From 81d36161ce5367fa7aa9a5d99dc8b80eacfa7cdf Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Fri, 24 Jan 2014 14:43:46 +0000
Subject: [PATCH] Checkpoint commit for OPENDJ-1288 :    Migrate I18n and logging support to i18n framework and SLF4J

---
 opendj3-server-dev/src/server/org/opends/server/extensions/UserDNNotificationMessageTemplateElement.java                                       |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidatorTestCase.java               |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/UpdateOperationTest.java                                   |   27 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/DN2URI.java                                                                       |    4 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexQueryFactoryImpl.java                                                        |    8 
 opendj3-server-dev/src/server/org/opends/server/schema/UUIDOrderingMatchingRule.java                                                           |    8 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/RuntimeOptionsPanel.java                                                  |   16 
 opendj3-server-dev/src/server/org/opends/server/plugins/LastModPlugin.java                                                                     |   10 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanelLauncher.java                                                     |   12 
 opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskClientException.java                                                           |    7 
 opendj3-server-dev/src/server/org/opends/server/extensions/SMTPAlertHandler.java                                                               |   20 
 opendj3-server-dev/src/server/org/opends/server/admin/client/ClientConstraintHandler.java                                                      |    9 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyObjectClassTask.java                                               |    7 
 opendj3-server-dev/src/server/org/opends/server/admin/client/AuthenticationNotSupportedException.java                                          |    7 
 opendj3-server-dev/src/server/org/opends/server/api/PasswordValidator.java                                                                     |    8 
 opendj3-server-dev/src/server/org/opends/server/tools/BackendToolUtils.java                                                                    |   26 
 opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliReturnCode.java                                              |    9 
 opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameSyntax.java                                                            |    4 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/GlobalAdministratorPanel.java                                             |    8 
 opendj3-server-dev/src/server/org/opends/server/api/AccessControlHandler.java                                                                  |    6 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/Utilities.java                                                                      |   13 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestPasswordValidator.java                                  |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/GoverningStructureRuleVirtualAttributeProvider.java                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/config/IntegerWithUnitConfigAttribute.java                                                     |   62 
 opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesFilter.java                                                              |   18 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/FirstNameTag.java                                                               |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractVLVIndexPanel.java                                                 |   30 
 opendj3-server-dev/src/server/org/opends/server/schema/ProtocolInformationSyntax.java                                                          |    4 
 opendj3-server-dev/src/server/org/opends/server/admin/AdminException.java                                                                      |    7 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/SSF.java                                                              |    8 
 opendj3-server-dev/src/server/org/opends/server/tools/EncodePassword.java                                                                      |  108 
 opendj3-server-dev/src/server/org/opends/server/tasks/SetGenerationIdTask.java                                                                 |   10 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/StepsPanel.java                                                                     |    5 
 opendj3-server-dev/src/server/org/opends/server/controls/GetEffectiveRightsRequestControl.java                                                 |    6 
 opendj3-server-dev/src/server/org/opends/server/core/BindOperation.java                                                                        |    6 
 opendj3-server-dev/src/server/org/opends/server/types/ConfigChangeResult.java                                                                  |   16 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/InclusionExclusionPanel.java                                               |   10 
 opendj3-server-dev/src/server/org/opends/server/schema/TimeBasedMatchingRuleFactory.java                                                       |   18 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/SetPropSubCommandHandler.java                                                   |   50 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPException.java                                  |   38 
 opendj3-server-dev/src/server/org/opends/server/api/EntryCache.java                                                                            |    6 
 opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java                                                      |   62 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/IndexInputBuffer.java                                                  |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/CancelExtendedOperation.java                                                        |    6 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/ParentInheritance.java                                                |   20 
 opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java                                                                  |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/DirectoryExceptionTestCase.java                                  |   12 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConstraintViolationException.java                                                 |   24 
 opendj3-server-dev/src/server/org/opends/server/controls/ServerSideSortRequestControl.java                                                     |   24 
 opendj3-server-dev/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java                                                       |   20 
 opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerSync.java                                                                  |   14 
 opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java                                          |   94 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataConfirmationException.java                                                     |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/SchemaReplicationTest.java                                 |   14 
 opendj3-server-dev/src/server/org/opends/server/api/ConnectionHandler.java                                                                     |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestCompareResponseProtocolOp.java                      |    6 
 opendj3-server-dev/src/server/org/opends/server/tasks/ExportTask.java                                                                          |   48 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserDN.java                                                           |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/ObjectClassCellPanel.java                                       |   11 
 opendj3-server-dev/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java                                                    |   30 
 opendj3-server-dev/src/server/org/opends/server/util/StaticUtils.java                                                                          |  167 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewDomainPanel.java                                                        |   11 
 opendj3-server-dev/src/server/org/opends/server/types/operation/InProgressOperation.java                                                       |   10 
 opendj3-server-dev/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java                                                    |    8 
 opendj3-server-dev/src/server/org/opends/server/core/MonitorConfigManager.java                                                                 |   18 
 opendj3-server-dev/src/server/org/opends/server/tools/ConfigureWindowsService.java                                                             |   30 
 opendj3-server-dev/src/server/org/opends/server/core/WorkflowImpl.java                                                                         |    4 
 opendj3-server-dev/src/server/org/opends/server/types/CancelResult.java                                                                        |    9 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/FileManager.java                                                                  |   10 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java                                                       |   36 
 opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeTasks.java                                                                |   56 
 opendj3-server-dev/src/server/org/opends/server/tools/VerifyIndex.java                                                                         |   54 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java                                          |    5 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ServerController.java                                                             |   36 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/BaseDNTableModel.java                                               |    6 
 opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1ByteSequenceReader.java                                                     |   38 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/OfflineUpdateException.java                                              |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TableViewEntryPanel.java                                                   |    6 
 opendj3-server-dev/src/server/org/opends/server/schema/ObjectIdentifierEqualityMatchingRule.java                                               |   12 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataException.java                                                                 |    7 
 opendj3-server-dev/src/server/org/opends/server/api/ServerShutdownListener.java                                                                |    5 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciBody.java                                                          |    8 
 opendj3-server-dev/src/server/org/opends/server/tasks/RestartTaskThread.java                                                                   |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseEntriesPanel.java                                                    |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/DelayPreOpPlugin.java                                          |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/ManageTasks.java                                                                         |   46 
 opendj3-server-dev/src/server/org/opends/server/tools/DBTest.java                                                                              |   92 
 opendj3-server-dev/src/server/org/opends/server/types/OpenDsException.java                                                                     |   14 
 opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskEntry.java                                                                     |   78 
 opendj3-server-dev/src/server/org/opends/server/core/IdleTimeLimitThread.java                                                                  |   12 
 opendj3-server-dev/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidator.java                                              |   12 
 opendj3-server-dev/src/server/org/opends/server/tools/InstallDSArgumentParser.java                                                             |   46 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/BindRule.java                                                         |   24 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ResetGenerationIdMsg.java                                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/StaticTextTag.java                                                              |   11 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPMessage.java                                                                |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerLoadBalancingTest.java             |    4 
 opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTargetTask.java                                                                |   10 
 opendj3-server-dev/src/server/org/opends/server/controls/LDAPPostReadRequestControl.java                                                       |    6 
 opendj3-server-dev/src/server/org/opends/server/controls/ServerSideSortResponseControl.java                                                    |    6 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallWelcomePanel.java                                                  |   10 
 opendj3-server-dev/src/server/org/opends/server/schema/SubstringAssertionSyntax.java                                                           |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/DBEnvironmentMonitoringTableModel.java                              |    7 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectChangeListener.java                                            |    5 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/UserAttr.java                                                         |   10 
 opendj3-server-dev/src/server/org/opends/server/util/cli/PointAdder.java                                                                       |    5 
 opendj3-server-dev/src/server/org/opends/server/controls/PasswordExpiringControl.java                                                          |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/GroupIdHandshakeTest.java                           |    4 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/WebBrowserErrorDialog.java                                                          |    8 
 opendj3-server-dev/src/server/org/opends/server/api/ErrorLogPublisher.java                                                                     |   52 
 opendj3-server-dev/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProvider.java                                      |    4 
 opendj3-server-dev/src/server/org/opends/server/core/VirtualAttributeConfigManager.java                                                        |   48 
 opendj3-server-dev/src/ads/org/opends/admin/ads/TopologyCache.java                                                                             |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexPanel.java                                                            |   14 
 opendj3-server-dev/src/server/org/opends/server/schema/CollationMatchingRuleFactory.java                                                       |   18 
 opendj3-server-dev/src/server/org/opends/server/api/WorkQueue.java                                                                             |    8 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/DNS.java                                                              |   14 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewVLVIndexPanel.java                                                      |   10 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/TemplateFile.java                                                               |   90 
 opendj3-server-dev/src/server/org/opends/server/admin/StringPropertyDefinition.java                                                            |    6 
 opendj3-server-dev/src/server/org/opends/server/core/KeyManagerProviderConfigManager.java                                                      |   23 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DisconnectClientTaskTestCase.java                                |    4 
 opendj3-server-dev/src/server/org/opends/server/core/PasswordGeneratorConfigManager.java                                                       |   21 
 opendj3-server-dev/src/server/org/opends/server/util/args/StringArgument.java                                                                  |   19 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyResponseProtocolOp.java                       |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/OperationsException.java                                                                 |    7 
 opendj3-server-dev/src/server/org/opends/server/schema/CertificateSyntax.java                                                                  |    8 
 opendj3-server-dev/src/server/org/opends/server/admin/AggregationPropertyDefinition.java                                                       |   62 
 opendj3-server-dev/src/server/org/opends/server/tools/status/StatusCli.java                                                                    |  104 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ECLServerHandler.java                                                       |   24 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/FractionalReplicationTest.java                      |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SelectObjectClassesPanel.java                                              |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NoItemSelectedPanel.java                                                   |    9 
 opendj3-server-dev/src/server/org/opends/server/tools/ImportLDIF.java                                                                          |  112 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidatorTestCase.java            |   18 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/JavaArguments.java                                                                     |   20 
 opendj3-server-dev/src/server/org/opends/server/extensions/AttributeValuePasswordValidator.java                                                |   12 
 opendj3-server-dev/src/server/org/opends/server/backends/task/TaskBackend.java                                                                 |  126 
 opendj3-server-dev/src/server/org/opends/server/schema/UTCTimeSyntax.java                                                                      |   72 
 opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java                                                                     |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/PropertyValuePrinter.java                                                       |   27 
 opendj3-server-dev/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java                                                 |   16 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupErrorPanel.java                                                           |    5 
 opendj3-server-dev/src/server/org/opends/server/loggers/AsynchronousTextWriter.java                                                            |    6 
 opendj3-server-dev/src/server/org/opends/server/schema/UniqueMemberEqualityMatchingRule.java                                                   |    6 
 opendj3-server-dev/src/server/org/opends/server/core/SASLConfigManager.java                                                                    |   23 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java                                    |    8 
 opendj3-server-dev/src/server/org/opends/server/api/DebugLogPublisher.java                                                                     |  159 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternDN.java                                                        |   44 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/AggregationServerTest.java                                |   16 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/makeldif/MakeLDIFTestCase.java                                   |   10 
 opendj3-server-dev/src/server/org/opends/server/admin/PropertyDefinition.java                                                                  |   10 
 opendj3-server-dev/src/server/org/opends/server/core/WorkflowResultCode.java                                                                   |   29 
 opendj3-server-dev/src/server/org/opends/server/types/AbstractOperation.java                                                                   |   42 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VerifyIndexPanel.java                                                      |   11 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/ReplicationServerTest.java                          |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandler.java                                                  |   20 
 opendj3-server-dev/src/server/org/opends/server/core/WorkQueueConfigManager.java                                                               |    9 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/SetupLauncher.java                                                           |   11 
 opendj3-server-dev/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java                                                        |   18 
 opendj3-server-dev/src/server/org/opends/server/types/operation/PreOperationOperation.java                                                     |   12 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java                                          |   33 
 opendj3-server-dev/src/server/org/opends/server/protocols/asn1/GSERException.java                                                              |    7 
 opendj3-server-dev/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java                                                  |    4 
 opendj3-server-dev/src/server/org/opends/server/util/Platform.java                                                                             |   28 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BaseDNPanel.java                                                           |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/StateMachineTest.java                               |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProvider.java                                            |    6 
 opendj3-server-dev/src/server/org/opends/server/util/args/SubCommand.java                                                                      |   25 
 opendj3-server-dev/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java                                                        |    7 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java                                                                |   24 
 opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyRequestControl.java                                                     |    4 
 opendj3-server-dev/src/server/org/opends/server/types/operation/PostResponseBindOperation.java                                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/types/AccountStatusNotification.java                                                           |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewUserPanel.java                                                          |   11 
 opendj3-server-dev/src/server/org/opends/server/types/operation/PostResponseOperation.java                                                     |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java                                              |   18 
 opendj3-server-dev/src/server/org/opends/server/config/BooleanConfigAttribute.java                                                             |   38 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RootMonitoringPanel.java                                                   |    7 
 opendj3-server-dev/src/server/org/opends/server/types/operation/PostOperationOperation.java                                                    |   10 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/CertificateDialog.java                                                              |   50 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/FinishedPanel.java                                                                  |    5 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/BindResponseProtocolOp.java                                                     |   14 
 opendj3-server-dev/src/server/org/opends/server/config/ConfigEntry.java                                                                        |   10 
 opendj3-server-dev/src/server/org/opends/server/core/PasswordValidatorConfigManager.java                                                       |   23 
 opendj3-server-dev/src/server/org/opends/server/types/DirectoryConfig.java                                                                     |    4 
 opendj3-server-dev/src/server/org/opends/server/admin/doc/ConfigGuideGeneration.java                                                           |    8 
 opendj3-server-dev/src/server/org/opends/server/api/IdentityMapper.java                                                                        |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/CryptPasswordStorageScheme.java                                                     |   22 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/EntryHistorical.java                                                        |    6 
 opendj3-server-dev/src/server/org/opends/server/api/plugin/InternalDirectoryServerPlugin.java                                                  |    5 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/WizardStep.java                                                                        |    5 
 opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLServlet.java                                                                          |   18 
 opendj3-server-dev/src/server/org/opends/server/admin/GenericConstraint.java                                                                   |   13 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectAddListener.java                                               |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProvider.java                                  |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ErrorMsg.java                                                             |   35 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ProtocolWindowTest.java                                    |   12 
 opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java                                                                |    4 
 opendj3-server-dev/src/server/org/opends/server/plugins/ChangeNumberControlPlugin.java                                                         |   14 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandlerTestCase.java       |    4 
 opendj3-server-dev/src/server/org/opends/server/schema/UUIDSyntax.java                                                                         |    4 
 opendj3-server-dev/src/server/org/opends/server/util/args/IntegerArgument.java                                                                 |   35 
 opendj3-server-dev/src/server/org/opends/server/tools/LDAPDelete.java                                                                          |   26 
 opendj3-server-dev/src/server/org/opends/server/replication/common/LastCookieVirtualProvider.java                                              |    6 
 opendj3-server-dev/src/server/org/opends/server/schema/TeletexTerminalIdentifierSyntax.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                                                              |   32 
 opendj3-server-dev/src/server/org/opends/server/controls/LDAPPreReadResponseControl.java                                                       |    6 
 opendj3-server-dev/src/server/org/opends/server/api/Extension.java                                                                             |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/EntrySchemaCheckingTestCase.java                                 |   50 
 opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallerArgumentParser.java                                                 |   15 
 opendj3-server-dev/src/server/org/opends/server/types/RDN.java                                                                                 |   30 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/UpdateMsg.java                                                            |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/LDAPPasswordModify.java                                                                  |   58 
 opendj3-server-dev/src/server/org/opends/server/schema/BooleanEqualityMatchingRule.java                                                        |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/MonitoringAttributes.java                                           |    5 
 opendj3-server-dev/src/server/org/opends/server/schema/SupportedAlgorithmSyntax.java                                                           |    4 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.java                                                                     |   24 
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java                                             |   12 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Branch.java                                                                     |    6 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Target.java                                                           |    9 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/internal/InternalClientConnectionTestCase.java               |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java                                        |    4 
 opendj3-server-dev/src/server/org/opends/server/protocols/jmx/RmiAuthenticator.java                                                            |    4 
 opendj3-server-dev/src/server/org/opends/server/core/BindOperationBasis.java                                                                   |   12 
 opendj3-server-dev/src/server/org/opends/server/extensions/SASLContext.java                                                                    |   30 
 opendj3-server-dev/src/server/org/opends/server/tools/ClientException.java                                                                     |    7 
 opendj3-server-dev/src/server/org/opends/server/core/RootPrivilegeChangeListener.java                                                          |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfigurationObjectClassPanel.java                                         |    5 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciList.java                                                          |   14 
 opendj3-server-dev/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java                                                        |   70 
 opendj3-server-dev/src/server/org/opends/server/extensions/ExactMatchIdentityMapper.java                                                       |   14 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java                                                                     |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProvider.java                                        |    4 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryIDSetSorter.java                                                             |    6 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/DayOfWeek.java                                                        |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagementContext.java                                                      |    6 
 opendj3-server-dev/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyFactory.java                                          |   13 
 opendj3-server-dev/src/server/org/opends/server/tools/InstallDS.java                                                                           |  175 
 opendj3-server-dev/src/server/org/opends/server/tools/LDAPCompare.java                                                                         |   30 
 opendj3-server-dev/src/server/org/opends/server/controls/SubentriesControl.java                                                                |    6 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupStepPanel.java                                                            |   18 
 opendj3-server-dev/src/server/org/opends/server/backends/task/TaskState.java                                                                   |   11 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ObjectClassEditorPanel.java                                                |    5 
 opendj3-server-dev/src/server/org/opends/server/core/RootDNConfigManager.java                                                                  |   19 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/DataOptionsPanel.java                                                     |    9 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/VerifyJob.java                                                                    |   20 
 opendj3-server-dev/src/server/org/opends/server/controls/PersistentSearchChangeType.java                                                       |    8 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendDeleteOperation.java                                  |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java                                                  |   46 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LoginPanel.java                                                            |   10 
 opendj3-server-dev/src/server/org/opends/server/types/CommonSchemaElements.java                                                                |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/ReplicationServerFailoverTest.java                  |    4 
 opendj3-server-dev/src/server/org/opends/server/schema/AuthPasswordSyntax.java                                                                 |   24 
 opendj3-server-dev/src/server/org/opends/server/schema/CertificateExactAssertionSyntax.java                                                    |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntryPanel.java                                                        |   12 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ListTag.java                                                                    |    9 
 opendj3-server-dev/src/server/org/opends/server/util/ExpirationCheckTrustManager.java                                                          |   11 
 opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroup.java                                                           |   34 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LengthBasedPasswordValidatorTestCase.java                   |   10 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java                                                       |   13 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/ExportJob.java                                                                    |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/client/cli/SecureConnectionCliArgs.java                                                  |   36 
 opendj3-server-dev/ivy.xml                                                                                                                     |    2 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/GUIDTag.java                                                                    |   11 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/IP.java                                                               |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/NotificationPropertyNotificationMessageTemplateElement.java                         |    5 
 opendj3-server-dev/src/server/org/opends/server/core/AccessControlConfigManager.java                                                           |   21 
 opendj3-server-dev/src/server/org/opends/server/tools/upgrade/Upgrade.java                                                                     |   20 
 opendj3-server-dev/src/server/org/opends/server/core/PasswordStorageSchemeConfigManager.java                                                   |   25 
 opendj3-server-dev/src/server/org/opends/server/extensions/Base64PasswordStorageScheme.java                                                    |    8 
 opendj3-server-dev/src/server/org/opends/server/controls/SubtreeDeleteControl.java                                                             |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/common/FirstChangeNumberVirtualAttributeProvider.java                              |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordExpirationTimeVirtualAttributeProviderTestCase.java |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/BinaryAttributeSyntaxTest.java                                  |    4 
 opendj3-server-dev/src/server/org/opends/server/admin/client/AuthorizationException.java                                                       |    7 
 opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliException.java                                               |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ListenerTest.java                                         |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ComputeBestServerTest.java                         |  102 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/ReplayThread.java                                                           |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/FileSystemEntryCache.java                                                           |   34 
 opendj3-server-dev/src/server/org/opends/server/plugins/EntryUUIDPlugin.java                                                                   |   10 
 opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.java                                                 |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteBaseDNAndBackendTask.java                                          |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackendVLVIndexesPanel.java                                                |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/GeneralMonitoringRightPanel.java                                           |    9 
 opendj3-server-dev/src/server/org/opends/server/extensions/PasswordExpirationTimeVirtualAttributeProvider.java                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/backends/task/TaskScheduler.java                                                               |   68 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/BackupManager.java                                                                |   46 
 opendj3-server-dev/src/server/org/opends/server/api/ClientConnection.java                                                                      |   16 
 opendj3-server-dev/src/server/org/opends/server/admin/IntegerPropertyDefinition.java                                                           |    6 
 opendj3-server-dev/src/server/org/opends/server/plugins/SambaPasswordPlugin.java                                                               |   10 
 opendj3-server-dev/src/server/org/opends/server/backends/TrustStoreBackend.java                                                                |  110 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/PersistentServerState.java                                                  |    8 
 opendj3-server-dev/src/server/org/opends/server/schema/FaxNumberSyntax.java                                                                    |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/MakeLDIFException.java                                                          |    7 
 opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliMain.java                                                       |   25 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryCachePreloader.java                                                          |    8 
 opendj3-server-dev/src/server/org/opends/server/types/IdentifiedException.java                                                                 |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java                                                        |   31 
 opendj3-server-dev/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java                                                           |   21 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java                                              |   16 
 opendj3-server-dev/src/server/org/opends/server/extensions/TraditionalWorkQueue.java                                                           |   24 
 opendj3-server-dev/src/server/org/opends/server/loggers/AbstractLogger.java                                                                    |   34 
 opendj3-server-dev/src/server/org/opends/server/tasks/RestoreTask.java                                                                         |   37 
 opendj3-server-dev/src/server/org/opends/server/loggers/LogPublisherErrorHandler.java                                                          |   13 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ProgressDescriptor.java                                                                |   13 
 opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java                                              |   20 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/crypto/CryptoManagerTestCase.java                                      |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/EntryCacheCommon.java                                                               |   29 
 opendj3-server-dev/src/server/org/opends/server/util/args/LDAPConnectionArgumentParser.java                                                    |   22 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/SequentialTag.java                                                              |   15 
 opendj3-server-dev/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java                                                               |    8 
 opendj3-server-dev/src/server/org/opends/server/tasks/DisconnectClientTask.java                                                                |   19 
 opendj3-server-dev/src/server/org/opends/server/types/FilePermission.java                                                                      |   18 
 opendj3-server-dev/src/server/org/opends/server/extensions/PasswordModifyExtendedOperation.java                                                |   24 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/externalchangelog/ECLSearchOperation.java                                      |   14 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/ReplicationServerListener.java                                              |    7 
 opendj3-server-dev/src/server/org/opends/server/controls/LDAPPreReadRequestControl.java                                                        |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ManageTasksPanel.java                                                      |   42 
 opendj3-server-dev/src/server/org/opends/server/extensions/MD5PasswordStorageScheme.java                                                       |   14 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBaseDNPanel.java                                                     |   19 
 opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java                                |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/PromptTrustManager.java                                                                  |   13 
 opendj3-server-dev/src/server/org/opends/server/api/LogPublisher.java                                                                          |   11 
 opendj3-server-dev/src/server/org/opends/server/loggers/debug/DebugLogger.java                                                                 |   55 
 opendj3-server-dev/src/server/org/opends/server/replication/server/MessageHandler.java                                                         |    8 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryContainer.java                                                               |  116 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Installation.java                                                                      |    6 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/RemotePendingChanges.java                                                   |    4 
 opendj3-server-dev/src/server/org/opends/server/loggers/FileNumberRetentionPolicy.java                                                         |    9 
 opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeContext.java                                                              |   10 
 opendj3-server-dev/src/server/org/opends/server/controls/EntryChangeNotificationControl.java                                                   |    8 
 opendj3-server-dev/src/server/org/opends/server/types/CanceledOperationException.java                                                          |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/SubjectAttributeToUserAttributeCertificateMapper.java                               |   34 
 opendj3-server-dev/src/server/org/opends/server/types/LDAPException.java                                                                       |   22 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewEntryFromLDIFPanel.java                                                 |   13 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerConstraintHandler.java                                                      |    7 
 opendj3-server-dev/src/server/org/opends/server/types/operation/PreParseOperation.java                                                         |   12 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/BasicMonitoringAttributes.java                                      |   19 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/AddResponseProtocolOp.java                                                      |   11 
 opendj3-server-dev/src/server/org/opends/server/util/VersionCompatibilityIssue.java                                                            |   14 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConnectionHandlerMonitoringPanel.java                                      |   23 
 opendj3-server-dev/src/server/org/opends/server/admin/Tag.java                                                                                 |    6 
 opendj3-server-dev/src/server/org/opends/server/types/operation/PostOperationBindOperation.java                                                |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/UnsavedChangesDialog.java                                                  |    7 
 opendj3-server-dev/src/server/org/opends/server/crypto/GetSymmetricKeyExtendedOperation.java                                                   |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyTest.java                     |   16 
 opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalLDAPOutputStream.java                                               |   10 
 opendj3-server-dev/src/server/org/opends/server/schema/CaseExactIA5SubstringMatchingRule.java                                                  |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/TraditionalWorkerThread.java                                                        |    8 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPConnectionHandler.java                                                      |   30 
 opendj3-server-dev/src/server/org/opends/server/core/ExtensionConfigManager.java                                                               |   23 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewOrganizationPanel.java                                                  |   16 
 opendj3-server-dev/src/server/org/opends/server/admin/client/ManagedObjectDecodingException.java                                               |    8 
 opendj3-server-dev/src/server/org/opends/server/schema/DistinguishedNameEqualityMatchingRule.java                                              |    4 
 opendj3-server-dev/src/server/org/opends/server/core/SubentryPasswordPolicy.java                                                               |   10 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/DataReplicationPanel.java                                                 |   12 
 opendj3-server-dev/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java                                                         |   33 
 opendj3-server-dev/src/server/org/opends/server/core/GroupManager.java                                                                         |   20 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilterList.java                                               |   12 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/Task.java                                                                |   10 
 opendj3-server-dev/src/server/org/opends/server/admin/DefinitionDecodingException.java                                                         |    7 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/TopologyMsg.java                                                          |    4 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciTargets.java                                                       |   26 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/EnvManager.java                                                                   |   13 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java                                                |   14 
 opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java                                                    |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/AttributeValuePasswordValidatorTestCase.java                |    4 
 opendj3-server-dev/resource/Messages.java.stub                                                                                                 |   19 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplSessionSecurity.java                                                  |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RandomTag.java                                                                  |   57 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DummyAlertHandler.java                                      |    9 
 opendj3-server-dev/src/server/org/opends/server/api/TrustManagerProvider.java                                                                  |    5 
 opendj3-server-dev/src/server/org/opends/server/controls/PasswordExpiredControl.java                                                           |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/OnlineUpdateException.java                                               |    7 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectAddListenerAdaptor.java                                        |    5 
 opendj3-server-dev/src/server/org/opends/server/controls/VLVResponseControl.java                                                               |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java                                                      |   85 
 opendj3-server-dev/src/server/org/opends/server/loggers/TextAuditLogPublisher.java                                                             |   20 
 opendj3-server-dev/src/server/org/opends/server/types/HostPort.java                                                                            |    4 
 opendj3-server-dev/src/server/org/opends/server/util/LDIFException.java                                                                        |   11 
 opendj3-server-dev/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyFactory.java                                            |   12 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/IfAbsentTag.java                                                                |   15 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectChangeListenerAdaptor.java                                     |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseIndexPanel.java                                                      |    7 
 opendj3-server-dev/src/server/org/opends/server/api/SASLMechanismHandler.java                                                                  |    5 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreDNTag.java                                                            |   10 
 opendj3-server-dev/src/server/org/opends/server/admin/client/AuthenticationException.java                                                      |    7 
 opendj3-server-dev/src/server/org/opends/server/plugins/SevenBitCleanPlugin.java                                                               |   12 
 opendj3-server-dev/src/server/org/opends/server/admin/client/spi/AbstractManagedObject.java                                                    |    5 
 opendj3-server-dev/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java                                                       |   10 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/EntryMsg.java                                                             |    6 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServerDomain.java                                                |   58 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBackendPanel.java                                                    |   19 
 opendj3-server-dev/src/server/org/opends/server/extensions/SMTPAccountStatusNotificationHandler.java                                           |   13 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Launcher.java                                                                          |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/client/AdminSecurityException.java                                                       |    7 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeRequestMsg.java                                                 |    2 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFReader.java                                               |    6 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/Installer.java                                                               |   94 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDeleteListenerAdaptor.java                                     |    5 
 opendj3-server-dev/src/server/org/opends/server/core/BindOperationWrapper.java                                                                 |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java                                              |   18 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/SearchResultDoneProtocolOp.java                                                 |   13 
 opendj3-server-dev/src/server/org/opends/server/controls/AccountUsableRequestControl.java                                                      |    4 
 opendj3-server-dev/src/server/org/opends/server/config/DNConfigAttribute.java                                                                  |   70 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SchemaBrowserRightPanel.java                                               |    7 
 opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesControl.java                                                             |    8 
 opendj3-server-dev/src/server/org/opends/server/util/args/Argument.java                                                                        |   44 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.java                                                                  |   10 
 opendj3-server-dev/src/server/org/opends/server/plugins/LDAPADListPlugin.java                                                                  |   14 
 opendj3-server-dev/src/server/org/opends/server/core/WorkflowConfigManager.java                                                                |   18 
 opendj3-server-dev/src/server/org/opends/server/extensions/RegularExpressionIdentityMapper.java                                                |   20 
 opendj3-server-dev/src/server/org/opends/server/types/DN.java                                                                                  |   92 
 opendj3-server-dev/src/server/org/opends/server/tools/ConfigureDS.java                                                                         |   86 
 opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/ui/ConfirmUninstallPanel.java                                                  |   16 
 opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java                                                          |    9 
 opendj3-server-dev/src/server/org/opends/server/schema/BooleanSyntax.java                                                                      |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ResetUserPasswordTask.java                                               |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/ExternalSASLMechanismHandler.java                                                   |   26 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/RestartServerTask.java                                                   |    9 
 opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliGlobalAdmin.java                                                |   38 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ExtendedResponseProtocolOp.java                                                 |   14 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/DSConfig.java                                                                   |   28 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/plugin/DirectoryServerPluginTestCase.java                          |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ProgressDialog.java                                                        |   13 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciHandler.java                                                       |   22 
 opendj3-server-dev/src/server/org/opends/server/tasks/TaskUtils.java                                                                           |   22 
 opendj3-server-dev/src/server/org/opends/server/controls/AuthorizationIdentityResponseControl.java                                             |    6 
 opendj3-server-dev/src/server/org/opends/server/types/AttributeValues.java                                                                     |    4 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Step.java                                                                              |    9 
 opendj3-server-dev/src/server/org/opends/server/extensions/CharacterSetPasswordValidator.java                                                  |   40 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java                                                   |   21 
 opendj3-server-dev/src/server/org/opends/server/tools/LDAPConnection.java                                                                      |   44 
 opendj3-server-dev/src/server/org/opends/server/plugins/UniqueAttributePlugin.java                                                             |   18 
 opendj3-server-dev/src/server/org/opends/server/backends/BackupBackend.java                                                                    |   58 
 opendj3-server-dev/src/server/org/opends/server/config/ConfigException.java                                                                    |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractIndexPanel.java                                                    |   23 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/MultimasterReplication.java                                                 |   10 
 opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1Exception.java                                                              |    6 
 opendj3-server-dev/src/server/org/opends/server/schema/IntegerSyntax.java                                                                      |    8 
 opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java                                                     |   53 
 opendj3-server-dev/src/server/org/opends/server/schema/DeliveryMethodSyntax.java                                                               |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/DefaultBehaviorTest.java                                  |    6 
 opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyFactory.java                                                           |    6 
 opendj3-server-dev/src/server/org/opends/server/util/EMailMessage.java                                                                         |   27 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/TaskTableModel.java                                                 |   39 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigExceptionFactory.java                                                       |   11 
 opendj3-server-dev/src/server/org/opends/server/api/QOSPolicyFactory.java                                                                      |    5 
 opendj3-server-dev/src/server/org/opends/server/schema/GuideSyntax.java                                                                        |    6 
 opendj3-server-dev/src/server/org/opends/server/util/cli/MenuBuilder.java                                                                      |   65 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java                                                |   25 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ModifyDNResponseProtocolOp.java                                                 |   13 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/HtmlProgressMessageFormatter.java                                                 |   89 
 opendj3-server-dev/src/server/org/opends/server/loggers/TextAccessLogPublisher.java                                                            |   34 
 opendj3-server-dev/src/server/org/opends/server/schema/PresentationAddressSyntax.java                                                          |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/LDAPConnectionException.java                                                             |   23 
 opendj3-server-dev/src/server/org/opends/server/util/table/TableBuilder.java                                                                   |   11 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyDNOperation.java                                |   14 
 opendj3-server-dev/src/server/org/opends/server/admin/EnumPropertyDefinition.java                                                              |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java                                                 |    5 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java                                                                      |   57 
 opendj3-server-dev/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java                                                     |   23 
 opendj3-server-dev/src/server/org/opends/server/extensions/RandomPasswordGenerator.java                                                        |   32 
 opendj3-server-dev/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java                                                   |   14 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java                                    |    4 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AuthMethod.java                                                       |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/NotificationTypeNotificationMessageTemplateElement.java                             |    5 
 opendj3-server-dev/src/server/org/opends/server/tools/StartWindowsService.java                                                                 |    8 
 opendj3-server-dev/src/server/org/opends/server/replication/common/LastChangeNumberVirtualAttributeProvider.java                               |    6 
 opendj3-server-dev/src/server/org/opends/server/schema/NumericStringSyntax.java                                                                |    4 
 opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentParser.java                                                                  |   80 
 opendj3-server-dev/src/server/org/opends/server/backends/MonitorBackend.java                                                                   |   44 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConnectionHandlersMonitoringTableModel.java                         |    5 
 opendj3-server-dev/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java                                                 |   15 
 opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyWarningType.java                                                        |    9 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyMsg.java                                                            |    2 
 opendj3-server-dev/src/server/org/opends/server/schema/DITStructureRuleSyntax.java                                                             |   90 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ConstraintTest.java                                       |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/ProtocolCompatibilityTest.java                    |    6 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.java                                                               |    8 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/MakeLDIF.java                                                                   |   38 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java                                           |    6 
 opendj3-server-dev/src/server/org/opends/server/api/AccessLogPublisher.java                                                                    |    8 
 opendj3-server-dev/src/server/org/opends/server/protocols/LDIFConnectionHandler.java                                                           |   27 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationChangeListener.java                                                  |    5 
 opendj3-server-dev/src/server/org/opends/server/loggers/debug/TraceSettings.java                                                               |    7 
 opendj3-server-dev/src/server/org/opends/server/types/operation/PostSynchronizationOperation.java                                              |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/PKCS11KeyManagerProvider.java                                                       |   24 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDeleteListener.java                                            |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/AESPasswordStorageScheme.java                                                       |   12 
 opendj3-server-dev/src/server/org/opends/server/api/plugin/PluginResult.java                                                                   |   87 
 opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicy.java                                                                  |   72 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MainActionsPane.java                                                       |   11 
 opendj3-server-dev/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapper.java                                      |   16 
 opendj3-server-dev/src/server/org/opends/server/schema/TelephoneNumberSubstringMatchingRule.java                                               |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/JavaPropertiesToolArgumentParser.java                                                    |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/UnbindOperationTestCase.java                                      |    8 
 opendj3-server-dev/src/server/org/opends/server/api/PasswordGenerator.java                                                                     |    4 
 opendj3-server-dev/src/server/org/opends/server/schema/CaseIgnoreIA5EqualityMatchingRule.java                                                  |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java                                                       |   12 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Permission.java                                                       |   10 
 opendj3-server-dev/src/server/org/opends/server/api/AccountStatusNotificationHandler.java                                                      |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteIndexTask.java                                                     |    6 
 opendj3-server-dev/src/server/org/opends/server/util/args/SubCommandArgumentParser.java                                                        |  106 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java                            |    8 
 opendj3-server-dev/src/server/org/opends/server/extensions/BlowfishPasswordStorageScheme.java                                                  |   12 
 opendj3-server-dev/src/server/org/opends/server/schema/NameAndOptionalUIDSyntax.java                                                           |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/PasswordPolicyStateExtendedOperation.java                                           |   22 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/SortableTableModel.java                                             |    7 
 opendj3-server-dev/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java                                                           |    7 
 opendj3-server-dev/src/server/org/opends/server/replication/server/MsgQueue.java                                                               |    8 
 opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskTool.java                                                                      |   26 
 opendj3-server-dev/src/server/org/opends/server/util/EmbeddedUtils.java                                                                        |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/DeleteOperationTestCase.java                                      |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/GenerationIdTest.java                                      |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/PresenceTag.java                                                                |   15 
 opendj3-server-dev/replace.rb                                                                                                                  |  154 
 opendj3-server-dev/src/server/org/opends/server/loggers/AbstractTextAccessLogPublisher.java                                                    |   16 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/ReadOnlyConfigFileHandler.java                                           |   16 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/StartMsg.java                                                             |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/LDIFModify.java                                                                          |   32 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractBrowseEntriesPanel.java                                            |   38 
 opendj3-server-dev/src/server/org/opends/server/controls/LDAPPostReadResponseControl.java                                                      |    6 
 opendj3-server-dev/src/server/org/opends/server/api/AlertHandler.java                                                                          |    7 
 opendj3-server-dev/src/server/org/opends/server/api/PasswordStorageScheme.java                                                                 |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyTestCase.java            |    4 
 opendj3-server-dev/src/server/org/opends/server/controls/PersistentSearchControl.java                                                          |    6 
 opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupConfigManager.java                                              |   19 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendModifyOperation.java                                  |   36 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java                                                        |   10 
 opendj3-server-dev/src/server/org/opends/server/extensions/DynamicGroupSearchThread.java                                                       |    8 
 opendj3-server-dev/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java                                                      |   12 
 opendj3-server-dev/src/server/org/opends/server/schema/NumericStringSubstringMatchingRule.java                                                 |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ExportLDIFPanel.java                                                       |   13 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/SelectableLabelWithHelpIcon.java                                |    5 
 opendj3-server-dev/src/server/org/opends/server/types/ResultCode.java                                                                          |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/GeneralMonitoringPanel.java                                                |    9 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StartServerTask.java                                                     |    5 
 opendj3-server-dev/src/server/org/opends/server/protocols/asn1/GSERParser.java                                                                 |   21 
 opendj3-server-dev/src/server/org/opends/server/core/PluginConfigManager.java                                                                  |  174 
 opendj3-server-dev/src/server/org/opends/server/tasks/ShutdownTaskThread.java                                                                  |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ViewEntryPanel.java                                                        |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationDomainMonitor.java                                               |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/LDAPToolUtils.java                                                                       |    6 
 opendj3-server-dev/src/server/org/opends/server/util/args/FileBasedArgument.java                                                               |   19 
 opendj3-server-dev/src/server/org/opends/server/admin/server/AbstractConfigListenerAdaptor.java                                                |   11 
 opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalClientConnection.java                                               |    8 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartMsg.java                                                   |    6 
 opendj3-server-dev/src/server/org/opends/server/core/SchemaConfigManager.java                                                                  |   60 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConfigReadException.java                                            |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/UserAttributeNotificationMessageTemplateElement.java                                |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/PlainSASLMechanismHandler.java                                                      |   48 
 opendj3-server-dev/src/server/org/opends/server/tools/StopDS.java                                                                              |   48 
 opendj3-server-dev/src/server/org/opends/server/core/MatchingRuleConfigManager.java                                                            |   49 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/WindowProbeMsg.java                                                       |    8 
 opendj3-server-dev/src/server/org/opends/server/tools/LDAPSearch.java                                                                          |   76 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java                                |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/ClassLoaderProvider.java                                                                 |   30 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java                                              |   23 
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDbEnv.java                                          |   16 
 opendj3-server-dev/src/server/org/opends/server/schema/JPEGSyntax.java                                                                         |    8 
 opendj3-server-dev/src/server/org/opends/server/admin/client/ldap/LDAPDriver.java                                                              |    6 
 opendj3-server-dev/src/server/org/opends/server/tasks/InitializeTask.java                                                                      |   10 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ParentDNTag.java                                                                |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDecodingException.java                                         |    8 
 opendj3-server-dev/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidator.java                                               |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/RegularExpressionIdentityMapperTestCase.java                |   26 
 opendj3-server-dev/src/server/org/opends/server/core/LogRotationPolicyConfigManager.java                                                       |   25 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ServerReader.java                                                           |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ErrorPanel.java                                                            |   17 
 opendj3-server-dev/src/server/org/opends/server/admin/InstantiableRelationDefinition.java                                                      |    6 
 opendj3-server-dev/src/server/org/opends/server/loggers/TextHTTPAccessLogPublisher.java                                                        |   31 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/LdifFileWriter.java                                              |    7 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/UpdatePreOpPlugin.java                                         |    5 
 opendj3-server-dev/src/server/org/opends/server/schema/CertificatePairSyntax.java                                                              |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DictionaryPasswordValidatorTestCase.java                    |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AddToGroupPanel.java                                                       |   14 
 opendj3-server-dev/src/server/org/opends/server/extensions/StartTLSExtendedOperation.java                                                      |    6 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/HeartbeatMsg.java                                                         |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java                                       |   12 
 opendj3-server-dev/src/server/org/opends/server/loggers/TextErrorLogPublisher.java                                                             |  123 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ModifyResponseProtocolOp.java                                                   |   13 
 opendj3-server-dev/src/server/org/opends/server/extensions/PBKDF2PasswordStorageScheme.java                                                    |   18 
 opendj3-server-dev/src/server/org/opends/server/tools/RestoreDB.java                                                                           |   58 
 opendj3-server-dev/src/server/org/opends/server/tasks/RebuildTask.java                                                                         |   30 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/UnderscoreParentDNTag.java                                                      |    6 
 opendj3-server-dev/src/server/org/opends/server/schema/UUIDEqualityMatchingRule.java                                                           |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/ActionButton.java                                               |    5 
 opendj3-server-dev/src/server/org/opends/server/schema/NameFormSyntax.java                                                                     |   86 
 opendj3-server-dev/src/server/org/opends/server/tools/WaitForFileDelete.java                                                                   |   16 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/TreePanel.java                                                  |    5 
 opendj3-server-dev/src/server/org/opends/server/schema/CaseExactIA5EqualityMatchingRule.java                                                   |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReplicationTestCase.java                                   |   18 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/BinaryCellPanel.java                                            |   17 
 opendj3-server-dev/src/server/org/opends/server/types/SynchronizationProviderResult.java                                                       |   15 
 opendj3-server-dev/src/server/org/opends/server/extensions/TextNotificationMessageTemplateElement.java                                         |    5 
 opendj3-server-dev/src/server/org/opends/server/admin/RelationDefinition.java                                                                  |   14 
 opendj3-server-dev/src/server/org/opends/server/api/Backend.java                                                                               |    7 
 opendj3-server-dev/src/server/org/opends/server/tools/ListBackends.java                                                                        |   62 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationDeleteListener.java                                                  |    5 
 opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV1Control.java                                                             |   14 
 opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPConnectionHandler.java                                                      |   22 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallLicensePanel.java                                                  |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/MonitoringTableModel.java                                           |    9 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SelectAliasDialog.java                                                    |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/LDAPAuthenticationHandler.java                                                           |  408 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RDNTag.java                                                                     |   10 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallReviewPanel.java                                                   |   26 
 opendj3-server-dev/src/server/org/opends/server/types/BackupInfo.java                                                                          |   16 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RefreshOptionsPanel.java                                                   |    7 
 opendj3-server-dev/src/server/org/opends/server/schema/PrintableStringSyntax.java                                                              |    4 
 opendj3-server-dev/src/server/org/opends/server/schema/CertificateListSyntax.java                                                              |    4 
 opendj3-server-dev/src/server/org/opends/server/tasks/ImportTask.java                                                                          |   82 
 opendj3-server-dev/src/server/org/opends/server/api/VirtualAttributeProvider.java                                                              |    4 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java                                                               |   64 
 opendj3-server-dev/src/server/org/opends/server/schema/GeneralizedTimeSyntax.java                                                              |  100 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/AttributeValueTag.java                                                          |   23 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/LDAPReplicationDomain.java                                                  |   82 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxConnectTest.java                                      |    4 
 opendj3-server-dev/src/server/org/opends/server/schema/IA5StringSyntax.java                                                                    |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfirmInitializeAndImportDialog.java                                      |    7 
 opendj3-server-dev/src/server/org/opends/server/extensions/CollectiveAttributeSubentriesVirtualAttributeProvider.java                          |    4 
 opendj3-server-dev/src/server/org/opends/server/schema/EnhancedGuideSyntax.java                                                                |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/SHA1PasswordStorageScheme.java                                                      |   14 
 opendj3-server-dev/src/server/org/opends/server/tools/ManageAccount.java                                                                       |   50 
 opendj3-server-dev/src/server/org/opends/server/types/Entry.java                                                                               |   94 
 opendj3-server-dev/src/server/org/opends/server/extensions/HasSubordinatesVirtualAttributeProvider.java                                        |    4 
 opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContext.java                                                                                |    8 
 opendj3-server-dev/src/server/org/opends/server/schema/IntegerFirstComponentEqualityMatchingRule.java                                          |   10 
 opendj3-server-dev/src/server/org/opends/server/extensions/FilteredStaticGroupMemberList.java                                                  |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/ReSyncTest.java                                            |    4 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternIP.java                                                        |   25 
 opendj3-server-dev/src/server/org/opends/server/plugins/ReferentialIntegrityPlugin.java                                                        |   20 
 opendj3-server-dev/src/server/org/opends/server/tools/JavaPropertiesTool.java                                                                  |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPSyncManagerV2AccessTest.java                                  |    3 
 opendj3-server-dev/src/server/org/opends/server/backends/SchemaBackend.java                                                                    |  310 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendAddOperation.java                                     |   32 
 opendj3-server-dev/src/server/org/opends/server/backends/task/FailedDependencyAction.java                                                      |   11 
 opendj3-server-dev/src/server/org/opends/server/api/MonitorProvider.java                                                                       |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/ParallelWorkQueue.java                                                              |   16 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java                                        |    4 
 opendj3-server-dev/src/server/org/opends/server/admin/client/IllegalManagedObjectNameException.java                                            |    5 
 opendj3-server-dev/src/server/org/opends/server/schema/ObjectClassSyntax.java                                                                  |  102 
 opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java                                                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilters.java                                                  |   16 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/nodes/CategoryTreeNode.java                                                |    5 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/LabelFieldDescriptor.java                                                           |   13 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/AbstractIndexTableModel.java                                        |    5 
 opendj3-server-dev/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicy.java                                                 |    5 
 opendj3-server-dev/src/server/org/opends/server/util/args/BooleanArgument.java                                                                 |   11 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyDNMsg.java                                                          |    2 
 opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java                                                                  |    8 
 opendj3-server-dev/src/server/org/opends/server/extensions/CRAMMD5SASLMechanismHandler.java                                                    |   38 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/WindowsServicePanel.java                                                   |   11 
 opendj3-server-dev/src/server/org/opends/server/util/cli/ConsoleApplication.java                                                               |   79 
 opendj3-server-dev/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java                                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java                                                       |  257 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/WebBrowserException.java                                                          |    5 
 opendj3-server-dev/src/server/org/opends/server/tools/upgrade/ProgressNotificationCallback.java                                                |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java                                                   |    9 
 opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentGroup.java                                                                   |   11 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/VLVIndex.java                                                                     |   32 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/protocol/SynchronizationMsgTest.java                       |    6 
 opendj3-server-dev/src/server/org/opends/server/util/LDIFWriter.java                                                                           |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfigurationAttributePanel.java                                           |    5 
 opendj3-server-dev/src/server/org/opends/server/config/StringConfigAttribute.java                                                              |   58 
 opendj3-server-dev/src/server/org/opends/server/extensions/TripleDESPasswordStorageScheme.java                                                 |   12 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/BackendImpl.java                                                                  |   68 
 opendj3-server-dev/src/server/org/opends/server/util/LDIFReader.java                                                                           |  104 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/TestLDIFWriter.java                                               |    6 
 opendj3-server-dev/src/server/org/opends/server/plugins/AttributeCleanupPlugin.java                                                            |   12 
 opendj3-server-dev/src/server/org/opends/server/extensions/VirtualStaticGroup.java                                                             |   32 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/ArgumentExceptionFactory.java                                                   |   71 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java                                           |    5 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java                                               |   23 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/URLWorker.java                                                                    |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/NotificationMessageNotificationMessageTemplateElement.java                          |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackendIndexesPanel.java                                                   |    5 
 opendj3-server-dev/src/server/org/opends/server/admin/PropertyException.java                                                                   |   14 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/NetworkGroupTest.java                               |   10 
 opendj3-server-dev/src/server/org/opends/server/extensions/DefaultEntryCache.java                                                              |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java                                                           |   31 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/TestEntry.java                                                   |   14 
 opendj3-server-dev/src/server/org/opends/server/tasks/PurgeConflictsHistoricalTask.java                                                        |   10 
 opendj3-server-dev/src/server/org/opends/server/schema/PostalAddressSyntax.java                                                                |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Tag.java                                                                        |    7 
 opendj3-server-dev/src/server/org/opends/server/schema/OctetStringSyntax.java                                                                  |    4 
 opendj3-server-dev/src/server/org/opends/server/core/CertificateMapperConfigManager.java                                                       |   23 
 opendj3-server-dev/src/server/org/opends/server/core/LogRetentionPolicyConfigManager.java                                                      |   25 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractNewEntryPanel.java                                                 |   10 
 opendj3-server-dev/src/server/org/opends/server/backends/MemoryBackend.java                                                                    |   46 
 opendj3-server-dev/src/server/org/opends/server/schema/OtherMailboxSyntax.java                                                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyConfigManager.java                                                          |   30 
 opendj3-server-dev/src/server/org/opends/server/extensions/PasswordPolicySubentryVirtualAttributeProvider.java                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/types/DisconnectReason.java                                                                    |    8 
 opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyState.java                                                             |    6 
 opendj3-server-dev/src/server/org/opends/server/schema/SubtreeSpecificationSyntax.java                                                         |    4 
 opendj3-server-dev/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java                                                           |    7 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java                                                      |   60 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/UpgradeTestCase.java                                             |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/EntityTagVirtualAttributeProvider.java                                              |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewOrganizationalUnitPanel.java                                            |   11 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ResetUserPasswordPanel.java                                                |    9 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/FractionalLDIFImportPlugin.java                                             |   14 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServer.java                                                      |   34 
 opendj3-server-dev/src/server/org/opends/server/schema/OIDSyntax.java                                                                          |    4 
 opendj3-server-dev/src/server/org/opends/server/schema/UserPasswordSyntax.java                                                                 |   14 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java                                                      |    8 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigAddListenerAdaptor.java                                                     |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestBindResponseProtocolOp.java                         |    6 
 opendj3-server-dev/src/server/org/opends/server/core/RootDseWorkflowTopology.java                                                              |    7 
 opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskClient.java                                                                    |   12 
 opendj3-server-dev/src/server/org/opends/server/controls/AccountUsableResponseControl.java                                                     |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewEntryTask.java                                                        |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java                                                             |    6 
 opendj3-server-dev/src/server/org/opends/server/crypto/CryptoManagerImpl.java                                                                  |   18 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/browser/ReferralLimitExceededException.java                                   |    5 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargetAttr.java                                                       |   10 
 opendj3-server-dev/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidator.java                                            |   12 
 opendj3-server-dev/src/server/org/opends/server/schema/TelexNumberSyntax.java                                                                  |    4 
 opendj3-server-dev/src/server/org/opends/server/types/InitializationException.java                                                             |    6 
 opendj3-server-dev/src/server/org/opends/server/api/SynchronizationProvider.java                                                               |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidatorTestCase.java              |   18 
 opendj3-server-dev/src/server/org/opends/server/admin/AliasDefaultBehaviorProvider.java                                                        |    7 
 opendj3-server-dev/src/server/org/opends/server/backends/NullBackend.java                                                                      |   38 
 opendj3-server-dev/src/server/org/opends/server/types/MembershipException.java                                                                 |    8 
 opendj3-server-dev/src/server/org/opends/server/types/RawModification.java                                                                     |   12 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/BasicExpander.java                                              |    5 
 opendj3-server-dev/src/server/org/opends/server/core/DirectoryServer.java                                                                      |  148 
 opendj3-server-dev/src/server/org/opends/server/schema/AttributeTypeSyntax.java                                                                |  108 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/IncompatibleVersionException.java                                                 |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseSchemaPanel.java                                                     |   39 
 opendj3-server-dev/src/server/org/opends/server/schema/CountryStringSyntax.java                                                                |    8 
 opendj3-server-dev/src/server/org/opends/server/tasks/BackupTask.java                                                                          |   58 
 opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPClientConnection.java                                                       |   12 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java                                                |   37 
 opendj3-server-dev/src/server/org/opends/server/util/cli/LDAPConnectionConsoleInteraction.java                                                 |   40 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/CliTest.java                                          |    4 
 opendj3-server-dev/src/server/org/opends/server/api/AttributeSyntax.java                                                                       |    8 
 opendj3-server-dev/src/server/org/opends/server/core/ExtendedOperationConfigManager.java                                                       |   17 
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/api/ChangelogException.java                                       |    8 
 opendj3-server-dev/src/server/org/opends/server/schema/FaxSyntax.java                                                                          |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/CreateSubCommandHandler.java                                                    |   88 
 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                                                          |  102 
 opendj3-server-dev/src/server/org/opends/server/types/Schema.java                                                                              |   60 
 opendj3-server-dev/src/server/org/opends/server/loggers/debug/DebugTracer.java                                                                 |  663 -
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AddOperationTestCase.java                                         |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConnectionHandlerDescriptor.java                                    |   14 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexBrowserRightPanel.java                                                |    5 
 opendj3-server-dev/src/server/org/opends/server/core/BackendConfigManager.java                                                                 |   64 
 opendj3-server-dev/src/server/org/opends/server/core/AuthenticatedUsers.java                                                                   |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AbandonOperationTestCase.java                                     |    4 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java                                                              |   20 
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNData.java                                               |    4 
 opendj3-server-dev/src/server/org/opends/server/controls/ProxiedAuthV2Control.java                                                             |   20 
 opendj3-server-dev/src/server/org/opends/server/loggers/ParallelTextWriter.java                                                                |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TaskToSchedulePanel.java                                                   |   47 
 opendj3-server-dev/src/server/org/opends/server/extensions/StaticGroup.java                                                                    |   24 
 opendj3-server-dev/src/server/org/opends/server/loggers/OpenDJLoggerFactory.java                                                               |   67 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/ConfigChangeListenerTestCase.java                                  |    5 
 opendj3-server-dev/src/server/org/opends/server/tasks/EnterLockdownModeTask.java                                                               |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/Category.java                                                       |    9 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/StressTest.java                                            |    5 
 opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java                                                                  |    4 
 opendj3-server-dev/src/server/org/opends/server/admin/client/ldap/LDAPManagedObject.java                                                       |    9 
 opendj3-server-dev/src/server/org/opends/server/extensions/TLSCapableConnection.java                                                           |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RestorePanel.java                                                          |   13 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/event/ProgressUpdateEvent.java                                                         |   13 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPFilter.java                                                                 |   68 
 opendj3-server-dev/src/server/org/opends/server/tasks/ShutdownTask.java                                                                        |   10 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommand.java                                          |   63 
 opendj3-server-dev/src/build-tools/org/opends/build/tools/GenerateMessageFile.java                                                             |   46 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/controls/PersistentSearchControlTest.java                              |    4 
 opendj3-server-dev/src/server/org/opends/server/tools/LDAPModify.java                                                                          |   36 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java                                               |   10 
 opendj3-server-dev/src/server/org/opends/server/util/CertificateManager.java                                                                   |   26 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/JMXAlertHandlerTestCase.java                                |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/RC4PasswordStorageScheme.java                                                       |   12 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/LastNameTag.java                                                                |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java                                                    |    8 
 opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyErrorType.java                                                          |    7 
 opendj3-server-dev/src/server/org/opends/server/config/ReadOnlyConfigAttribute.java                                                            |   18 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java                                                                 |   10 
 opendj3-server-dev/src/server/org/opends/server/types/RawAttribute.java                                                                        |   10 
 opendj3-server-dev/src/server/org/opends/server/types/BackupDirectory.java                                                                     |   28 
 opendj3-server-dev/src/server/org/opends/server/controls/ExternalChangelogRequestControl.java                                                  |    4 
 opendj3-server-dev/src/server/org/opends/server/protocols/http/CollectClientConnectionsFilter.java                                             |    6 
 opendj3-server-dev/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java                                                      |    8 
 opendj3-server-dev/src/server/org/opends/server/extensions/JMXAlertHandler.java                                                                |   17 
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java                                             |   10 
 opendj3-server-dev/src/server/org/opends/server/admin/client/MissingMandatoryPropertiesException.java                                          |   14 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/InitializationExceptionTestCase.java                             |    8 
 opendj3-server-dev/src/server/org/opends/server/controls/EntryChangelogNotificationControl.java                                                |    6 
 opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java                                                                           |   14 
 opendj3-server-dev/src/server/org/opends/server/controls/PagedResultsControl.java                                                              |   12 
 opendj3-server-dev/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicy.java                                                   |    5 
 opendj3-server-dev/src/server/org/opends/server/loggers/MultifileTextWriter.java                                                               |   13 
 opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallLauncher.java                                                         |   14 
 opendj3-server-dev/src/server/org/opends/server/types/LDIFExportConfig.java                                                                    |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java                                            |   12 
 opendj3-server-dev/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java                                                              |   17 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/GetPropSubCommandHandler.java                                                   |   35 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/RemoteReplicationPortsPanel.java                                          |    9 
 opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupPlugin.java                                                     |   33 
 opendj3-server-dev/src/server/org/opends/server/types/CancelRequest.java                                                                       |    8 
 opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyState.java                                                                  |   12 
 opendj3-server-dev/src/server/org/opends/server/extensions/DictionaryPasswordValidator.java                                                    |   16 
 opendj3-server-dev/src/server/org/opends/server/tools/StopWindowsService.java                                                                  |    8 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java                                                                   |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/MonitorTest.java                                    |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StopServerTask.java                                                      |    5 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/RootContainer.java                                                                |   42 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ServerWriter.java                                                           |    8 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java                                                      |   50 
 opendj3-server-dev/src/server/org/opends/server/util/cli/CLIException.java                                                                     |    7 
 opendj3-server-dev/src/server/org/opends/server/core/SearchOperationBasis.java                                                                 |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ServerHandler.java                                                          |   14 
 opendj3-server-dev/src/server/org/opends/server/extensions/FileBasedTrustManagerProvider.java                                                  |   39 
 opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskScheduleInteraction.java                                                       |   21 
 opendj3-server-dev/src/server/org/opends/server/extensions/ParallelWorkerThread.java                                                           |    8 
 opendj3-server-dev/src/server/org/opends/server/admin/SetRelationDefinition.java                                                               |    7 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/Suffix.java                                                            |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java                                                       |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/IndexTableModel.java                                                |    5 
 opendj3-server-dev/src/server/org/opends/server/core/OperationWrapper.java                                                                     |   20 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/server/AssuredReplicationServerTest.java                   |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/MockClientConnection.java                           |    6 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/GroupDN.java                                                          |    6 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciListenerManager.java                                               |   16 
 opendj3-server-dev/src/server/org/opends/server/admin/client/OperationRejectedException.java                                                   |   34 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java                                                           |   72 
 opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliMain.java                                                    |  204 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ProgressDialog.java                                                                 |   16 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java                                                     |    7 
 opendj3-server-dev/src/server/org/opends/server/admin/client/AdminClientException.java                                                         |    7 
 opendj3-server-dev/src/server/org/opends/server/tools/upgrade/FileManager.java                                                                 |   14 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/TestCaseUtils.java                                                     |    4 
 opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliReturnCode.java                                                 |    9 
 opendj3-server-dev/src/server/org/opends/server/tools/BackUpDB.java                                                                            |   60 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewBaseDNPanel.java                                                        |   18 
 opendj3-server-dev/src/server/org/opends/server/util/args/MultiChoiceArgument.java                                                             |   19 
 opendj3-server-dev/src/server/org/opends/server/extensions/ClearPasswordStorageScheme.java                                                     |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/LocalPurgeHistorical.java                                                  |    6 
 opendj3-server-dev/src/server/org/opends/server/schema/BitStringSyntax.java                                                                    |    4 
 opendj3-server-dev/src/server/org/opends/server/types/CryptoManagerException.java                                                              |    7 
 opendj3-server-dev/src/server/org/opends/server/types/LDAPURL.java                                                                             |   24 
 opendj3-server-dev/src/server/org/opends/server/core/LoggerConfigManager.java                                                                  |   38 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendCompareOperation.java                                 |    6 
 opendj3-server-dev/ext/checkstyle/opends-checkstyle.xml                                                                                        |    4 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/InstallerHelper.java                                                         |   32 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StandardObjectClassPanel.java                                              |   31 
 opendj3-server-dev/src/server/org/opends/server/backends/RootDSEBackend.java                                                                   |   58 
 opendj3-server-dev/src/server/org/opends/server/schema/CertificateExactMatchingRule.java                                                       |   18 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java                                                         |   13 
 opendj3-server-dev/src/server/org/opends/server/replication/service/ReplicationDomain.java                                                     |   26 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java                                                    |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommandArgumentParser.java                            |    5 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Application.java                                                                       |   76 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargetFilter.java                                                     |    5 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java                                                             |    6 
 opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentException.java                                                               |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyAttributeTask.java                                                 |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MatchingRulePanel.java                                                     |   17 
 opendj3-server-dev/src/server/org/opends/server/types/SubEntry.java                                                                            |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/WindowMsg.java                                                            |    8 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java                                                   |   52 
 opendj3-server-dev/src/server/org/opends/server/schema/BinarySyntax.java                                                                       |    4 
 opendj3-server-dev/src/server/org/opends/server/extensions/NotificationMessageTemplateElement.java                                             |    5 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataCertificateException.java                                                      |    5 
 opendj3-server-dev/src/server/org/opends/server/admin/DecodingException.java                                                                   |    5 
 opendj3-server-dev/src/server/org/opends/server/core/AccountStatusNotificationHandlerConfigManager.java                                        |   25 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/PlainTextProgressMessageFormatter.java                                            |   67 
 opendj3-server-dev/src/server/org/opends/server/api/HTTPAccessLogPublisher.java                                                                |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/TestModifyDNOperation.java                                        |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackupPanel.java                                                           |   13 
 opendj3-server-dev/src/server/org/opends/server/schema/IntegerEqualityMatchingRule.java                                                        |   14 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/DeleteSubCommandHandler.java                                                    |   51 
 opendj3-server-dev/src/server/org/opends/server/config/IntegerConfigAttribute.java                                                             |   92 
 opendj3-server-dev/src/server/org/opends/server/extensions/GSSAPISASLMechanismHandler.java                                                     |   50 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ApplicationException.java                                                              |    7 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/IfPresentTag.java                                                               |   15 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/Action.java                                                         |    9 
 opendj3-server-dev/src/server/org/opends/server/api/ConfigChangeListener.java                                                                  |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/FingerprintCertificateMapper.java                                                   |   22 
 opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalConnectionHandler.java                                              |    5 
 opendj3-server-dev/src/server/org/opends/server/extensions/DynamicGroup.java                                                                   |   12 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationAddListener.java                                                     |    5 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/JECompressedSchema.java                                                           |   12 
 opendj3-server-dev/src/server/org/opends/server/core/CoreConfigManager.java                                                                    |   12 
 opendj3-server-dev/src/server/org/opends/server/replication/plugin/ExternalChangelogDomain.java                                                |    8 
 opendj3-server-dev/src/server/org/opends/server/admin/AdministrationConnector.java                                                             |   18 
 opendj3-server-dev/src/server/org/opends/server/tools/CreateRCScript.java                                                                      |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/TitlePanel.java                                                 |   21 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/WorkflowElementConfigManager.java                                              |   18 
 opendj3-server-dev/src/server/org/opends/server/schema/NumericStringOrderingMatchingRule.java                                                  |    4 
 opendj3-server-dev/src/server/org/opends/server/core/DefaultCompressedSchema.java                                                              |    4 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/CompareResponseProtocolOp.java                                                  |   13 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Aci.java                                                              |   10 
 opendj3-server-dev/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProvider.java                                              |    4 
 opendj3-server-dev/src/server/org/opends/server/types/operation/PreOperationBindOperation.java                                                 |    4 
 opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java                                                               |   71 
 opendj3-server-dev/src/server/org/opends/server/extensions/LDAPPassThroughAuthenticationPolicyFactory.java                                     |   14 
 opendj3-server-dev/src/server/org/opends/server/schema/CaseIgnoreIA5SubstringMatchingRule.java                                                 |    6 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternRDN.java                                                       |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/server/DelayedConfigAddListener.java                                                     |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/MockConstraint.java                                       |   11 
 opendj3-server-dev/src/server/org/opends/server/extensions/SubjectEqualsDNCertificateMapper.java                                               |   14 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/event/ProgressNotifier.java                                                            |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DuplicateEntryPanel.java                                                   |   12 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/ID2Entry.java                                                                     |    6 
 opendj3-server-dev/src/server/org/opends/server/api/plugin/DirectoryServerPlugin.java                                                          |  115 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/WorkflowTopologyTest.java                                         |   14 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/CellEditorButton.java                                           |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CannotRenameException.java                                          |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java                                                    |   25 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationBackend.java                                                     |   30 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigDeleteListenerAdaptor.java                                                  |   10 
 opendj3-server-dev/src/server/org/opends/server/schema/IntegerOrderingMatchingRule.java                                                        |   14 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BinaryValuePanel.java                                                      |    5 
 opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java                                                         |   48 
 opendj3-server-dev/src/server/org/opends/server/types/DirectoryException.java                                                                  |   18 
 opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLAbandonOperation.java                                                                 |    6 
 opendj3-server-dev/src/server/org/opends/server/loggers/OpenDJLoggerAdapter.java                                                               |  567 +
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/JebTestCase.java                                          |    4 
 opendj3-server-dev/build.xml                                                                                                                   |   22 
 opendj3-server-dev/src/server/org/opends/server/admin/client/cli/SecureConnectionCliParser.java                                                |   17 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestModifyDNResponseProtocolOp.java                     |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewIndexPanel.java                                                         |   10 
 opendj3-server-dev/src/server/org/opends/server/types/SubtreeSpecification.java                                                                |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyTest.java                       |   10 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/PeerNotFoundException.java                                                   |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteEntryTask.java                                                     |   10 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SuffixesToReplicatePanel.java                                             |   26 
 opendj3-server-dev/src/server/org/opends/server/api/Group.java                                                                                 |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/PropertyValueEditor.java                                                        |  132 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplServerStartDSMsg.java                                                 |    2 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MainMenuBar.java                                                           |   11 
 opendj3-server-dev/src/server/org/opends/server/plugins/profiler/ProfileViewer.java                                                            |   12 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/InvocationCounterPlugin.java                                   |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AttributeSyntaxPanel.java                                                  |   13 
 opendj3-server-dev/src/server/org/opends/server/admin/client/spi/Driver.java                                                                   |    5 
 opendj3-server-dev/src/server/org/opends/server/types/SearchFilter.java                                                                        |  124 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BinaryAttributeEditorPanel.java                                            |    7 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Template.java                                                                   |    7 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/JavaArgumentsDialog.java                                                  |   66 
 opendj3-server-dev/src/server/org/opends/server/api/DirectoryThread.java                                                                       |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/FileTag.java                                                                    |   17 
 opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServerHandler.java                                               |   24 
 opendj3-server-dev/src/server/org/opends/server/types/DebugLogCategory.java                                                                    |   51 
 opendj3-server-dev/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.java                                                            |    8 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/ConfigurableEnvironment.java                                                      |   14 
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java                                                 |    6 
 opendj3-server-dev/src/server/org/opends/server/extensions/ConfigFileHandler.java                                                              |  232 
 opendj3-server-dev/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandler.java                                       |   11 
 opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java                                                                |    4 
 opendj3-server-dev/src/server/org/opends/server/api/CertificateMapper.java                                                                     |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewGroupPanel.java                                                         |   16 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPConnectionHandler.java                          |    8 
 opendj3-server-dev/src/server/org/opends/server/replication/server/DataServerHandler.java                                                      |   22 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java                                                                 |   18 
 opendj3-server-dev/src/server/org/opends/server/types/EntryEncodeConfig.java                                                                   |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestDeleteResponseProtocolOp.java                       |    6 
 opendj3-server-dev/src/server/org/opends/server/backends/task/TaskThread.java                                                                  |    8 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestAddResponseProtocolOp.java                          |    6 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyEntryTask.java                                                     |    6 
 opendj3-server-dev/src/server/org/opends/server/types/NamedCharacterSet.java                                                                   |   16 
 opendj3-server-dev/src/server/org/opends/server/schema/DITContentRuleSyntax.java                                                               |  104 
 opendj3-server-dev/src/server/org/opends/server/api/ExtendedOperationHandler.java                                                              |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java                                                     |   11 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebException.java                                                                 |    7 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPResultCode.java                                                             |    5 
 opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContextException.java                                                                       |    9 
 opendj3-server-dev/src/server/org/opends/server/schema/DirectoryStringSyntax.java                                                              |    8 
 opendj3-server-dev/src/server/org/opends/server/types/Operation.java                                                                           |   20 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/MockConstraint.java                                  |   15 
 opendj3-server-dev/src/server/org/opends/server/types/RawFilter.java                                                                           |   44 
 opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleSyntax.java                                                                 |   44 
 opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java                                                              |   78 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciException.java                                                     |    7 
 opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyFactory.java                                                                |   32 
 opendj3-server-dev/src/server/org/opends/server/core/ServerContext.java                                                                        |   48 
 opendj3-server-dev/src/server/org/opends/server/tools/SSLConnectionException.java                                                              |    7 
 opendj3-server-dev/src/server/org/opends/server/core/SynchronizationProviderConfigManager.java                                                 |   25 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/ServerSettingsPanel.java                                                  |   19 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/InitOnLineTest.java                                        |    7 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserInteraction.java                                                                   |   16 
 opendj3-server-dev/src/server/org/opends/server/plugins/PasswordPolicyImportPlugin.java                                                        |   44 
 opendj3-server-dev/src/server/org/opends/server/tools/upgrade/FormattedNotificationCallback.java                                               |    6 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/AlertHandlerTestCase.java                                          |    4 
 opendj3-server-dev/src/server/org/opends/server/api/ConfigAddListener.java                                                                     |    5 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPAuthenticationHandlerTestCase.java                           |    6 
 opendj3-server-dev/src/server/org/opends/server/backends/LDIFBackend.java                                                                      |   60 
 opendj3-server-dev/src/server/org/opends/server/types/operation/PluginOperation.java                                                           |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntrySelectionPanel.java                                               |   10 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanelArgumentParser.java                                               |   12 
 opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java                                                |   20 
 opendj3-server-dev/src/server/org/opends/server/tools/RebuildIndex.java                                                                        |   46 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/BindOperationTestCase.java                                        |    6 
 opendj3-server-dev/src/server/org/opends/server/api/MatchingRuleFactory.java                                                                   |    5 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java                                         |   29 
 opendj3-server-dev/src/server/org/opends/server/core/IdentityMapperConfigManager.java                                                          |   23 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPAttribute.java                                                              |    4 
 opendj3-server-dev/src/server/org/opends/server/admin/client/ConcurrentModificationException.java                                              |    7 
 opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationData.java                                           |    4 
 opendj3-server-dev/src/server/org/opends/server/core/TrustManagerProviderConfigManager.java                                                    |   23 
 opendj3-server-dev/src/server/org/opends/server/loggers/ThreadFilterTextErrorLogPublisher.java                                                 |   44 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendBindOperation.java                                    |   22 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/HistoricalCsnOrderingTest.java                      |   16 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/CancelTaskTask.java                                                      |    7 
 opendj3-server-dev/src/server/org/opends/server/extensions/FIFOEntryCache.java                                                                 |   18 
 opendj3-server-dev/src/server/org/opends/server/tools/ConsoleDebugLogPublisher.java                                                            |  245 
 opendj3-server-dev/src/server/org/opends/server/core/BaseDnRegistry.java                                                                       |   24 
 opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java                                                        |   24 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ProgressMessageFormatter.java                                                     |   39 
 opendj3-server-dev/src/server/org/opends/server/backends/task/Task.java                                                                        |  103 
 opendj3-server-dev/src/server/org/opends/server/workflowelement/localbackend/LocalBackendWorkflowElement.java                                  |   20 
 opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TimeOfDay.java                                                        |   10 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewAttributePanel.java                                                     |   29 
 opendj3-server-dev/src/server/org/opends/server/util/Base64.java                                                                               |   12 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VLVIndexPanel.java                                                         |   16 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java                                                    |  124 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/TopologyViewTest.java                               |    4 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/LDAPUpdateMsg.java                                                        |   20 
 opendj3-server-dev/src/server/org/opends/server/tools/makeldif/DNTag.java                                                                      |   10 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigChangeListenerAdaptor.java                                                  |   18 
 opendj3-server-dev/src/server/org/opends/server/controls/VLVRequestControl.java                                                                |    8 
 opendj3-server-dev/src/server/org/opends/server/loggers/AccessLogger.java                                                                      |    6 
 opendj3-server-dev/src/server/org/opends/server/types/operation/PreParseBindOperation.java                                                     |    4 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/EmbeddedUtilsTestCase.java                                        |    7 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CheckEntrySyntaxException.java                                      |   15 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/Utils.java                                                                        |   56 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/DeleteResponseProtocolOp.java                                                   |   13 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntityTagVirtualAttributeProviderTestCase.java              |   12 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SecurityOptionsDialog.java                                                |   38 
 opendj3-server-dev/src/server/org/opends/server/tools/ExportLDIF.java                                                                          |   74 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/WebBrowserLauncher.java                                                           |   18 
 opendj3-server-dev/src/server/org/opends/server/tasks/AddSchemaFileTask.java                                                                   |   24 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/plugin/AssuredReplicationPluginTest.java                   |    4 
 opendj3-server-dev/src/server/org/opends/server/api/CompressedSchema.java                                                                      |    6 
 opendj3-server-dev/src/server/org/opends/server/replication/service/ReplicationBroker.java                                                     |   58 
 opendj3-server-dev/src/server/org/opends/server/controls/LDAPAssertionRequestControl.java                                                      |    4 
 opendj3-server-dev/src/server/org/opends/server/api/KeyManagerProvider.java                                                                    |    5 
 opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPReader.java                                                                 |  280 
 opendj3-server-dev/src/server/org/opends/server/tools/LDIFDiff.java                                                                            |   36 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ProgressUpdateListenerDelegate.java                                                    |    9 
 opendj3-server-dev/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java                                                       |   10 
 opendj3-server-dev/src/server/org/opends/server/loggers/ErrorLogger.java                                                                       |   60 
 opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SimplifiedViewEntryPanel.java                                              |   32 
 opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexQuery.java                                                                   |   11 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/ShortCircuitPlugin.java                                        |   40 
 opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java                                                          |   18 
 opendj3-server-dev/src/server/org/opends/server/config/MultiChoiceConfigAttribute.java                                                         |   68 
 opendj3-server-dev/src/server/org/opends/server/config/ConfigAttribute.java                                                                    |   33 
 opendj3-server-dev/src/server/org/opends/server/replication/protocol/InitializeTargetMsg.java                                                  |    2 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTests.java                                 |    6 
 opendj3-server-dev/src/server/org/opends/server/admin/AdministratorAction.java                                                                 |    7 
 opendj3-server-dev/src/server/org/opends/server/replication/common/MultiDomainServerState.java                                                 |    7 
 opendj3-server-dev/src/server/org/opends/server/tools/LDIFSearch.java                                                                          |   38 
 opendj3-server-dev/src/server/org/opends/server/api/ConfigDeleteListener.java                                                                  |    5 
 opendj3-server-dev/src/server/org/opends/server/schema/TelephoneNumberSyntax.java                                                              |   16 
 opendj3-server-dev/src/server/org/opends/server/admin/client/CommunicationException.java                                                       |    7 
 opendj3-server-dev/src/server/org/opends/server/core/AlertHandlerConfigManager.java                                                            |   23 
 /dev/null                                                                                                                                      |  158 
 opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObject.java                                                          |   10 
 opendj3-server-dev/src/server/org/opends/server/core/AbandonOperationBasis.java                                                                |    6 
 opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeCli.java                                                                  |   34 
 opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/ui/LoginDialog.java                                                            |   19 
 opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/ModifyOperationTestCase.java                                      |    6 
 opendj3-server-dev/src/server/org/opends/server/backends/task/RecurringTask.java                                                               |   32 
 opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java                                                           |    7 
 1,074 files changed, 12,004 insertions(+), 11,967 deletions(-)

diff --git a/opendj3-server-dev/build.xml b/opendj3-server-dev/build.xml
index 8d745dc..b1f21f5 100644
--- a/opendj3-server-dev/build.xml
+++ b/opendj3-server-dev/build.xml
@@ -284,13 +284,16 @@
   </target>
 
 
-  <target name="generatemessages" depends="buildtools">
+  <target name="generatemessages" depends="buildtools,resolve">
     <typedef name="genmsg"
              classname="org.opends.build.tools.GenerateMessageFile" >
       <classpath>
         <fileset dir="${build.dir}/build-tools">
           <include name="*.jar" />
         </fileset>
+        <fileset dir="${lib.dir}/compile">
+          <include name="i18n-core.jar" />
+        </fileset>
       </classpath>
     </typedef>
     <!--
@@ -781,6 +784,9 @@
         <fileset dir="${build.dir}/build-tools">
           <include name="build-tools.jar" />
         </fileset>
+      	<fileset dir="${lib.dir}/compile">
+      	  <include name="i18n-core.jar" />
+      	</fileset>
         <pathelement path="${classes.dir}"/>
       </classpath>
     </javac>
@@ -796,12 +802,20 @@
       <include name="**/org/opends/messages/Category.java"/>
       <include name="**/org/opends/messages/QuickSetupMessages.java"/>
       <include name="**/org/opends/server/types/OpenDsException.java"/>
+      <classpath>
+      	<fileset dir="${lib.dir}/compile">
+      	    <include name="i18n-core.jar" />
+      	</fileset>
+      </classpath>
     </javac>
     <javac srcdir="${quicksetup.src.dir}" destdir="${quicksetup.classes.dir}">
       <classpath>
         <fileset dir="${build.dir}/build-tools">
           <include name="build-tools.jar" />
         </fileset>
+      	<fileset dir="${lib.dir}/compile">
+      	    <include name="i18n-core.jar" />
+      	</fileset>
         <pathelement path="${classes.dir}"/>
       </classpath>
     </javac>
@@ -2429,7 +2443,7 @@
 
 
 
-  <target name="buildtools" depends="init"
+  <target name="buildtools" depends="init,resolve"
         description="Builds the build tools">
 
     <mkdir dir="${buildtools.classes.dir}" />
@@ -2453,6 +2467,10 @@
           <include name="*.jar" />
         </fileset>
 
+      	 <fileset dir="${lib.dir}/compile">
+      	  <include name="i18n-core.jar" />
+      	 </fileset>
+
         <fileset dir="${emma.dir}">
           <include name="*.jar" />
         </fileset>
diff --git a/opendj3-server-dev/ext/checkstyle/opends-checkstyle.xml b/opendj3-server-dev/ext/checkstyle/opends-checkstyle.xml
index 8797d72..99ca796 100644
--- a/opendj3-server-dev/ext/checkstyle/opends-checkstyle.xml
+++ b/opendj3-server-dev/ext/checkstyle/opends-checkstyle.xml
@@ -44,9 +44,9 @@
     </module>
 
 
-    <!-- Ensure that no line exceeds 80 characters in length -->
+    <!-- Ensure that no line exceeds 120 characters in length -->
     <module name="LineLength">
-      <property name="max" value="80" />
+      <property name="max" value="120" />
     </module>
 
 
diff --git a/opendj3-server-dev/ivy.xml b/opendj3-server-dev/ivy.xml
index a9c74f4..0d7f620 100644
--- a/opendj3-server-dev/ivy.xml
+++ b/opendj3-server-dev/ivy.xml
@@ -28,6 +28,7 @@
 <!DOCTYPE ivy-module [
     <!ENTITY grizzly.version    "2.3.6">
     <!ENTITY opendj.sdk.version "3.0.0-SNAPSHOT">
+    <!ENTITY i18n.version       "1.4.2-SNAPSHOT">
     <!ENTITY crest.version      "2.1.0-SNAPSHOT">
     <!ENTITY jackson.version    "1.9.2">
     <!ENTITY slf4j.version      "1.7.5">
@@ -50,6 +51,7 @@
     <dependency org="javax.servlet"         name="javax.servlet-api"        rev="[3.1-b02]" />
     <dependency org="com.sleepycat"         name="je"                       rev="5.0.97" />
     <dependency org="org.forgerock.opendj"  name="opendj-rest2ldap-servlet" rev="&opendj.sdk.version;" conf="default->master,compile"/>
+    <dependency org="org.forgerock.commons"  name="i18n-slf4j"  rev="&i18n.version;" />
     <dependency org="org.forgerock.opendj"  name="opendj-server2x-adapter"  rev="&opendj.sdk.version;">
       <!-- This is the OpenDJ server module :) -->
       <exclude  module="opendj-server"/>
diff --git a/opendj3-server-dev/replace.rb b/opendj3-server-dev/replace.rb
index a36f14a..18d0d22 100755
--- a/opendj3-server-dev/replace.rb
+++ b/opendj3-server-dev/replace.rb
@@ -27,62 +27,53 @@
 #
 class Replace
 
+  # Messages map : contains for each message its associated level
+  MESSAGES_MAP = {}
+
+  # Mapping of opendj2 log levels to opendj3 logging method
+  LOG_LEVELS = {
+    'INFO' => 'debug',
+    'MILD_WARN' => 'warn',
+    'SEVERE_WARN' => 'warn',
+    'MILD_ERR' => 'error',
+    'SEVERE_ERR' => 'error',
+    'FATAL_ERR' => 'error',
+    'DEBUG' => 'trace',
+    'NOTICE' => 'info',
+  }
+
   # 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.'
-      ]
-  }
+  SNMP_DIR = ["src/snmp/src"]
+  DSML_DIR = ["src/dsml/org"]
 
   # 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;',
+     :dirs => DSML_DIR,
+     :extensions => ["java"],
+     :stopwords => ['org/opends/messages'],
+     :replacements =>
+       [
+        /import org.opends.messages.(\bMessage(Builder)?(Descriptor)?\b|\*)(\.Arg..?)?;/,
+        'import org.forgerock.i18n.Localizable\1\4;',
 
-        /([ <(])Message([ >)(.]|$)/,
-        '\1LocalizableMessage\2',
+        /\bMessage\b/,
+        'LocalizableMessage',
 
-        /import org.opends.messages.MessageBuilder;/,
-        'import org.forgerock.i18n.LocalizableMessageBuilder;',
+        /\bMessageBuilder\b/,
+        'LocalizableMessageBuilder',
 
-        /([ <(])MessageBuilder([ >)(.]|$)/,
-        '\1LocalizableMessageBuilder\2'
-      ]
-  }
+        /\bMessageDescriptor\b/,
+        'LocalizableMessageDescriptor',
+
+        /LocalizableMessage.raw\((\n\s+)?Category.\w+,\s+(\n\s+)?Severity.\w+,\s?/,
+        'LocalizableMessage.raw(',
+
+        /msg.getDescriptor().equals\((\w)+\)/,
+        "msg.resourceName().equals(\\1.resourceName())\n      && msg.ordinal().equals(\\1.ordinal())"
+       ]
+   }
 
   # Replacement for types
   TYPES = {
@@ -99,34 +90,24 @@
       ]
   }
 
-  BYTESTRING_TYPE = {
-    :dirs => JAVA_DIRS,
+  # Replacement for types
+  DN_TYPE = {
+    :dirs => JAVA_DIRS + ["src/admin/generated"],
     :extensions => ["java"],
     :replacements =>
       [
-        /package org.opends.server.types;/,
-        "package org.opends.server.types;\n\n" +
-        "import org.forgerock.opendj.ldap.ByteString;\n" +
-        "import org.forgerock.opendj.ldap.ByteStringBuilder;\n" +
-        "import org.forgerock.opendj.ldap.ByteSequence;\n" +
-        "import org.forgerock.opendj.ldap.ByteSequenceReader;",
+        /package org.opends.server.types.(\b\w\b);/,
+        "package org.opends.server.types.\\1;\n\n" +
+        'import org.forgerock.opendj.ldap.DN;',
+
+        /import org.opends.server.types.DN;/,
+        'import org.forgerock.opendj.ldap.DN;',
 
         /import org.opends.server.types.\*;/,
-        "import org.opends.server.types.*;\n" +
-        "import org.forgerock.opendj.ldap.ByteString;\n" +
-        "import org.forgerock.opendj.ldap.ByteStringBuilder;\n" +
-        "import org.forgerock.opendj.ldap.ByteSequence;\n" +
-        "import org.forgerock.opendj.ldap.ByteSequenceReader;",
+        "import org.opends.server.types.*;\nimport org.forgerock.opendj.ldap.DN;",
 
-        /import org.opends.server.types.(ByteString|ByteStringBuilder|ByteSequence|ByteSequenceReader);/,
-        'import org.forgerock.opendj.ldap.\1;',
-
-        /package org.opends.server.protocols.asn1;/,
-        "package org.opends.server.protocols.asn1;\n\n" +
-        "import com.forgerock.opendj.util.ByteSequenceOutputStream;",
-
-        /import org.opends.server.protocols.asn1.ByteSequenceOutputStream;/,
-        "import com.forgerock.opendj.util.ByteSequenceOutputStream;",
+        /DN.NULL_DN/,
+        "DN.rootDN()"
 
       ]
   }
@@ -179,8 +160,8 @@
         /import org.opends.server.types.DebugLogLevel;\n/,
         '',
 
-        /import (static )?org.opends.server.loggers.debug.DebugLogger.*;\n/,
-        '',
+        #/import (static )?org.opends.server.loggers.debug.DebugLogger.*;\n/,
+        #'',
 
         /DebugTracer TRACER = (DebugLogger.)?getTracer\(\)/,
         "Logger debugLogger = LoggerFactory.getLogger({CLASSNAME}.class)",
@@ -245,10 +226,13 @@
   }
 
   # List of replacements to run
-  REPLACEMENTS = [ BYTESTRING_TYPE ]
-  #REPLACEMENTS = [ VALIDATOR, MESSAGES, TYPES, EXCEPTIONS, LOGGERS, I18N_LOGGERS ]
+  REPLACEMENTS = [ MESSAGES ]
+  #REPLACEMENTS = [ MESSAGES, TYPES, DN_TYPES, EXCEPTIONS, LOGGERS, I18N_LOGGERS ]
 
-  # Run replacements
+
+  ################################### Processing methods ########################################
+
+  # Main method : run replacements defined in REPLACEMENTS constant
   def run
     REPLACEMENTS.each { |repl|
       puts "Replacing " + Replace.constants.find{ |name| Replace.const_get(name)==repl }.to_s
@@ -257,6 +241,7 @@
     }
   end
 
+  # Process replacements on the provided directories
   def replace_dirs(replacements, dirs, stopwords, extensions)
     count_files = 0
     count_total = 0
@@ -275,6 +260,7 @@
     puts "Replaced in #{count_files} files, for a total of #{count_total} replacements"
   end
 
+  # Process replacement on the provided file
   def replace_file(file, replacements)
     count = 0
     File.open(file) { |source|
@@ -291,17 +277,33 @@
     count
   end
 
+  # Return java class name from java filename
   def classname(file)
     name = file.gsub(/.*\/(.*).java$/, '\1')
     if name.nil? then '' else name end
   end
 
+  # Return all files with provided extensions under the provided directory
+  # and all its subdirectories recursively
   def files_under_directory(directory, extensions)
     Dir[directory + '/**/*.{' + extensions.join(",") + '}']
   end
 
+  # Build a map of error messages and error level
+  def messages(message_file)
+    File.open(message_file).each { |line|
+      line = line.chomp
+      next if line.size==0 || line[0..0]=="#" || line[0..0]==" " || line[0..0]!=line[0..0].upcase || line[0..5]=="global"
+      first, *rest = line.split "_"
+      label = rest.join "_"
+      level_label = if %w(INFO DEBUG NOTICE).include?(first) then first else first.to_s + "_" + rest[0].to_s end
+      level = LOG_LEVELS[level_label]
+      puts "level #{level}, line #{line}"
+    }
+  end
+
 end
 
-# Launch replacement
+# Launch all replacements defined in the REPLACEMENTS constant
+#Replace.new.messages("src/messages/messages/admin.properties")
 Replace.new.run
-
diff --git a/opendj3-server-dev/resource/Messages.java.stub b/opendj3-server-dev/resource/Messages.java.stub
index 6a9d9f2..4cd7e26 100644
--- a/opendj3-server-dev/resource/Messages.java.stub
+++ b/opendj3-server-dev/resource/Messages.java.stub
@@ -22,28 +22,29 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package ${PACKAGE};
 
-import org.opends.messages.MessageDescriptor;
-import static org.opends.messages.Category.*;
-import static org.opends.messages.Severity.*;
+//import org.opends.messages.MessageDescriptor;
+import org.forgerock.i18n.LocalizableMessageDescriptor;
+
+//import static org.opends.messages.Category.*;
+//import static org.opends.messages.Severity.*;
 
 /**
  * This file contains a number of constants that are used throughout the
  * Directory Server source.  It was dynamically generated as part of the
  * Directory Server build process and should not be edited directly.
  */
-@org.opends.server.types.PublicAPI(
-    stability=org.opends.server.types.StabilityLevel.PRIVATE,
-    mayInstantiate=false,
-    mayExtend=false,
-    mayInvoke=true)
 public final class ${CLASS_NAME} {
 
   /** Base property for resource bundle containing messages */
-  private static final String BASE = "messages/${BASE}";
+  //private static final String BASE = "messages/${BASE}";
+
+  // The name of the resource bundle.
+  private static final String RESOURCE = "messages.${BASE}";
 
   private static ClassLoader webstartClassLoader;
 
diff --git a/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContext.java b/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContext.java
index ef312ff..eb4adeb 100644
--- a/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContext.java
+++ b/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContext.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012-2013 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 
 package org.opends.admin.ads;
@@ -63,7 +63,7 @@
 import javax.naming.ldap.LdapContext;
 
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.schema.SchemaConstants;
@@ -2611,7 +2611,7 @@
     }
     catch (ADSContextException adce)
     {
-      Message msg = ERR_ADS_MERGE.get(
+      LocalizableMessage msg = ERR_ADS_MERGE.get(
           ConnectionUtils.getHostPort(getDirContext()),
           ConnectionUtils.getHostPort(adsCtx.getDirContext()),
           adce.getMessageObject());
@@ -2642,7 +2642,7 @@
     }
     if (!notDefinedAdmins.isEmpty())
     {
-      Message msg = ERR_ADS_ADMINISTRATOR_MERGE.get(
+      LocalizableMessage msg = ERR_ADS_ADMINISTRATOR_MERGE.get(
           ConnectionUtils.getHostPort(adsCtx.getDirContext()),
           ConnectionUtils.getHostPort(getDirContext()),
           Utils.getStringFromCollection(notDefinedAdmins,
diff --git a/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContextException.java b/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContextException.java
index 15e65e8..5f918ee 100644
--- a/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContextException.java
+++ b/opendj3-server-dev/src/ads/org/opends/admin/ads/ADSContextException.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.admin.ads;
 
 import static org.opends.messages.QuickSetupMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 
@@ -146,7 +147,7 @@
    * @param msg the message describing the error.
    * @param x the throwable that generated this exception.
    */
-  public ADSContextException(ErrorType error, Message msg, Throwable x)
+  public ADSContextException(ErrorType error, LocalizableMessage msg, Throwable x)
   {
     super(msg);
     this.error = error;
@@ -198,9 +199,9 @@
     return toString;
   }
 
-  private static Message getMessage(ErrorType error, Throwable x)
+  private static LocalizableMessage getMessage(ErrorType error, Throwable x)
   {
-    Message msg;
+    LocalizableMessage msg;
     if (x != null)
     {
       if (x instanceof OpenDsException)
diff --git a/opendj3-server-dev/src/ads/org/opends/admin/ads/TopologyCache.java b/opendj3-server-dev/src/ads/org/opends/admin/ads/TopologyCache.java
index 3cfbd35..371d03e 100644
--- a/opendj3-server-dev/src/ads/org/opends/admin/ads/TopologyCache.java
+++ b/opendj3-server-dev/src/ads/org/opends/admin/ads/TopologyCache.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.admin.ads;
 
@@ -55,7 +55,7 @@
 import org.opends.admin.ads.util.ConnectionUtils;
 import org.opends.admin.ads.util.PreferredConnection;
 import org.opends.admin.ads.util.ServerLoader;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.Utils;
 
 /**
@@ -406,12 +406,12 @@
    *
    * @return a set of error messages encountered in the TopologyCache.
    */
-  public Set<Message> getErrorMessages()
+  public Set<LocalizableMessage> getErrorMessages()
   {
     Set<TopologyCacheException> exceptions =
         new HashSet<TopologyCacheException>();
     Set<ServerDescriptor> theServers = getServers();
-    Set<Message> exceptionMsgs = new LinkedHashSet<Message>();
+    Set<LocalizableMessage> exceptionMsgs = new LinkedHashSet<LocalizableMessage>();
     for (ServerDescriptor server : theServers)
     {
       TopologyCacheException e = server.getLastException();
diff --git a/opendj3-server-dev/src/build-tools/org/opends/build/tools/GenerateMessageFile.java b/opendj3-server-dev/src/build-tools/org/opends/build/tools/GenerateMessageFile.java
index 294eae3..03fc43a 100644
--- a/opendj3-server-dev/src/build-tools/org/opends/build/tools/GenerateMessageFile.java
+++ b/opendj3-server-dev/src/build-tools/org/opends/build/tools/GenerateMessageFile.java
@@ -22,17 +22,18 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.build.tools;
 
 import org.apache.tools.ant.Task;
 import org.apache.tools.ant.BuildException;
 import org.apache.tools.ant.Project;
+import org.forgerock.i18n.LocalizableMessageDescriptor;
+
 import static org.opends.build.tools.Utilities.*;
 import org.opends.messages.Category;
 import org.opends.messages.Severity;
-import org.opends.messages.MessageDescriptor;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -146,11 +147,11 @@
     KEY_FORM_MSG = new StringBuilder()
             .append(".\n\nOpenDJ message property keys must be of the form\n\n")
             .append("\t\'[CATEGORY]_[SEVERITY]_[DESCRIPTION]_[ORDINAL]\'\n\n")
-            .append("where\n\n")
-            .append("CATEGORY is one of ")
-            .append(EnumSet.allOf(Category.class))
-            .append("\n\nSEVERITY is one of ")
-            .append(Severity.getPropertyKeyFormSet().toString())
+            //.append("where\n\n")
+            //.append("CATEGORY is one of ...")
+            //.append(EnumSet.allOf(Category.class))
+            //.append("\n\nSEVERITY is one of ")
+            //.append(Severity.getPropertyKeyFormSet().toString())
             .append("\n\nDESCRIPTION is a descriptive string composed ")
             .append("of uppercase character, digits and underscores ")
             .append("describing the purpose of the message ")
@@ -300,14 +301,11 @@
     public String getDescriptorClassDeclaration() {
       StringBuilder sb = new StringBuilder();
       if (useGenericMessageTypeClass()) {
-        sb.append(getShortClassName(MessageDescriptor.class));
-        sb.append(".");
-        sb.append(MessageDescriptor.DESCRIPTOR_CLASS_BASE_NAME);
-        sb.append("N");
+        sb.append(getShortClassName(LocalizableMessageDescriptor.class));
+        sb.append(".ArgN");
       } else {
-        sb.append(getShortClassName(MessageDescriptor.class));
-        sb.append(".");
-        sb.append(MessageDescriptor.DESCRIPTOR_CLASS_BASE_NAME);
+        sb.append(getShortClassName(LocalizableMessageDescriptor.class));
+        sb.append(".Arg");
         sb.append(classTypes.size());
         sb.append(getClassTypeVariables());
       }
@@ -393,9 +391,9 @@
             sb.append(",");
           }
         }
-        sb.append(", ");
+        //sb.append(", ");
       }
-      sb.append("getClassLoader()");
+      //sb.append("getClassLoader()");
       sb.append(");");
       return sb.toString();
     }
@@ -409,7 +407,7 @@
      * @return boolean indicating
      */
     private boolean useGenericMessageTypeClass() {
-      if (specifiers.size() > MessageDescriptor.DESCRIPTOR_MAX_ARG_HANDLER) {
+      if (specifiers.size() > 9) {
         return true;
       } else if (specifiers != null) {
         for (FormatSpecifier s : specifiers) {
@@ -869,12 +867,10 @@
             globalOrdinal = new Integer(go);
           }
 
-          // Determine the value of the global category/mask if set
-          Integer  globalMask = null;
           Category globalCategory = null;
           String gms = properties.getProperty(GLOBAL_CATEGORY_MASK);
           if (gms != null) {
-            globalMask = Integer.parseInt(gms);
+            Integer.parseInt(gms);
             globalCategory = Category.USER_DEFINED;
           } else {
             String gcs = properties.getProperty(GLOBAL_CATEGORY);
@@ -986,12 +982,12 @@
                 messageRefEntries.add(entry);
                 }
             } else {
+                // old: (BASE,"MILD_ERR_ADD_CANNOT_ADD_ROOT_DSE_230",CORE,MILD_ERROR,230, getClassLoader())
+                // new: CoreMessages.class, RESOURCE, "ERR_ACCTUSABLEREQ_CONTROL_BAD_OID", -1
+                String className = getMessageDescriptorClassName();
               message.setConstructorArguments(
-                "BASE",
-                quote(key.toString()),
-                globalMask != null ? globalMask.toString() : c.name(),
-                s.name(),
-                globalOrdinal != null ?
+                className + ".class", "RESOURCE",
+                quote(key.toString()), globalOrdinal != null ?
                         globalOrdinal.toString() :
                         key.getOrdinal().toString()
               );
diff --git a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLAbandonOperation.java b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLAbandonOperation.java
index d160c2a..92872f2 100644
--- a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLAbandonOperation.java
+++ b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLAbandonOperation.java
@@ -22,14 +22,14 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.dsml.protocol;
 
 import java.io.IOException;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.protocols.ldap.AbandonRequestProtocolOp;
 import org.opends.server.protocols.ldap.LDAPMessage;
@@ -88,7 +88,7 @@
     } catch (NumberFormatException nfe)
     {
       throw new LDAPException(LDAPResultCode.UNWILLING_TO_PERFORM,
-                              Message.raw(nfe.getMessage()));
+                              LocalizableMessage.raw(nfe.getMessage()));
     }
 
     // Create and send an LDAP request to the server.
diff --git a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java
index d759b6a..36f26f6 100644
--- a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java
+++ b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLAddOperation.java
@@ -32,7 +32,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.ldap.AddRequestProtocolOp;
 import org.opends.server.protocols.ldap.AddResponseProtocolOp;
@@ -117,7 +117,7 @@
 
     AddResponseProtocolOp addOp = responseMessage.getAddResponseProtocolOp();
     int resultCode = addOp.getResultCode();
-    Message errorMessage = addOp.getErrorMessage();
+    LocalizableMessage errorMessage = addOp.getErrorMessage();
 
     // Set the result code and error message for the DSML response.
     addResponse.setErrorMessage(
diff --git a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java
index 7e3121d..69f579a 100644
--- a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java
+++ b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLCompareOperation.java
@@ -31,7 +31,7 @@
 import java.io.IOException;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.ldap.CompareRequestProtocolOp;
 import org.opends.server.protocols.ldap.CompareResponseProtocolOp;
@@ -106,7 +106,7 @@
     CompareResponseProtocolOp compareOp =
           responseMessage.getCompareResponseProtocolOp();
     int resultCode = compareOp.getResultCode();
-    Message errorMessage = compareOp.getErrorMessage();
+    LocalizableMessage errorMessage = compareOp.getErrorMessage();
 
     // Set the response code and error message for the DSML response.
     compareResponse.setErrorMessage(
diff --git a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java
index 204ba7d..5c5cbe1 100644
--- a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java
+++ b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLDeleteOperation.java
@@ -31,7 +31,7 @@
 import java.io.IOException;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.ldap.DeleteRequestProtocolOp;
 import org.opends.server.protocols.ldap.DeleteResponseProtocolOp;
@@ -105,7 +105,7 @@
     DeleteResponseProtocolOp delOp =
           responseMessage.getDeleteResponseProtocolOp();
     int resultCode = delOp.getResultCode();
-    Message errorMessage = delOp.getErrorMessage();
+    LocalizableMessage errorMessage = delOp.getErrorMessage();
 
     // Set the result code and error message for the DSML response.
     delResponse.setErrorMessage(
diff --git a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
index 0445170..aa7bab5 100644
--- a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
+++ b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLExtendedOperation.java
@@ -32,7 +32,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.ldap.ExtendedRequestProtocolOp;
 import org.opends.server.protocols.ldap.ExtendedResponseProtocolOp;
@@ -125,7 +125,7 @@
     ExtendedResponseProtocolOp extendedOp =
           responseMessage.getExtendedResponseProtocolOp();
     int resultCode = extendedOp.getResultCode();
-    Message errorMessage = extendedOp.getErrorMessage();
+    LocalizableMessage errorMessage = extendedOp.getErrorMessage();
 
     // Set the result code and error message for the DSML response.
     extendedResponse.setResponseName(extendedOp.getOID());
diff --git a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java
index c494b69..8f2d859 100644
--- a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java
+++ b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLModifyDNOperation.java
@@ -31,7 +31,7 @@
 import java.io.IOException;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.LDAPConnection;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.ldap.LDAPMessage;
@@ -115,7 +115,7 @@
     ModifyDNResponseProtocolOp modDNOp =
          responseMessage.getModifyDNResponseProtocolOp();
     int resultCode = modDNOp.getResultCode();
-    Message errorMessage = modDNOp.getErrorMessage();
+    LocalizableMessage errorMessage = modDNOp.getErrorMessage();
 
     modDNResponse.setErrorMessage(
             errorMessage != null ? errorMessage.toString() : null);
diff --git a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java
index 61fd61c..99b1179 100644
--- a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java
+++ b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLModifyOperation.java
@@ -32,7 +32,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.ldap.LDAPAttribute;
 import org.opends.server.protocols.ldap.LDAPMessage;
@@ -139,7 +139,7 @@
     ModifyResponseProtocolOp modOp =
          responseMessage.getModifyResponseProtocolOp();
     int resultCode = modOp.getResultCode();
-    Message errorMessage = modOp.getErrorMessage();
+    LocalizableMessage errorMessage = modOp.getErrorMessage();
 
     // Set the result code and error message for the DSML response.
     modResponse.setErrorMessage(
diff --git a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
index 22945b3..760a1cd 100644
--- a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
+++ b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLSearchOperation.java
@@ -36,7 +36,7 @@
 
 import javax.xml.bind.JAXBElement;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.protocols.asn1.ASN1Exception;
 import org.opends.server.protocols.ldap.LDAPAttribute;
 import org.opends.server.protocols.ldap.LDAPConstants;
@@ -302,7 +302,7 @@
     if(sf.getInitial() == null && subAnyElements.isEmpty()
             && sf.getFinal()==null)
     {
-      Message message = ERR_LDAP_FILTER_DECODE_NULL.get();
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_NULL.get();
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
     return LDAPFilter.createSubstringFilter(sf.getName(),
@@ -547,7 +547,7 @@
       do
       {
         int resultCode = 0;
-        Message errorMessage = null;
+        LocalizableMessage errorMessage = null;
         LDAPMessage responseMessage = connection.getLDAPReader().readMessage();
         if(responseMessage == null)
         {
@@ -556,7 +556,7 @@
           // the server , we have a reason to believe that the server doesn't
           // want to handle this request. Let us return unavailable error
           // code to the client to cover possible cases.
-          Message message = ERR_UNEXPECTED_CONNECTION_CLOSURE.get();
+          LocalizableMessage message = ERR_UNEXPECTED_CONNECTION_CLOSURE.get();
           LDAPResult result = objFactory.createLDAPResult();
           ResultCode code = ResultCodeFactory.create(objFactory,
               LDAPResultCode.UNAVAILABLE);
diff --git a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLServlet.java b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
index 55b68e7..57f1537 100644
--- a/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
+++ b/opendj3-server-dev/src/dsml/org/opends/dsml/protocol/DSMLServlet.java
@@ -66,7 +66,7 @@
 import javax.xml.validation.Schema;
 import javax.xml.validation.SchemaFactory;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.controls.ProxiedAuthV2Control;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.protocols.asn1.ASN1Exception;
@@ -286,7 +286,7 @@
               getResultCode())
           {
             default:
-              Message m = INFO_RESULT_AUTHORIZATION_DENIED.get();
+              LocalizableMessage m = INFO_RESULT_AUTHORIZATION_DENIED.get();
               throw new LDAPConnectionException(m, CLIENT_SIDE_CONNECT_ERROR,
                   null);
             case LDAPResultCode.SUCCESS:
@@ -297,18 +297,18 @@
     }
     catch (LDAPException le)
     {
-      Message m = INFO_RESULT_CLIENT_SIDE_ENCODING_ERROR.get();
+      LocalizableMessage m = INFO_RESULT_CLIENT_SIDE_ENCODING_ERROR.get();
       throw new LDAPConnectionException(m, CLIENT_SIDE_CONNECT_ERROR, null, le);
     }
     catch (ASN1Exception ae)
     {
-      Message m = INFO_RESULT_CLIENT_SIDE_ENCODING_ERROR.get();
+      LocalizableMessage m = INFO_RESULT_CLIENT_SIDE_ENCODING_ERROR.get();
       throw new LDAPConnectionException(m, CLIENT_SIDE_CONNECT_ERROR, null,
           ae);
     }
     catch (IOException ie)
     {
-      Message m = INFO_RESULT_CLIENT_SIDE_ENCODING_ERROR.get();
+      LocalizableMessage m = INFO_RESULT_CLIENT_SIDE_ENCODING_ERROR.get();
       throw new LDAPConnectionException(m, CLIENT_SIDE_CONNECT_ERROR, null, ie);
     }
   }
@@ -359,7 +359,7 @@
         batchResponses.add(
           createErrorResponse(
             new LDAPException(LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR,
-              Message.raw(
+              LocalizableMessage.raw(
               "Invalid SSL or TLS configuration to connect to LDAP server."))));
       }
       connOptions.setSSLConnectionFactory(sslConnectionFactory);
@@ -402,7 +402,7 @@
             batchResponses.add(
               createErrorResponse(
                     new LDAPException(LDAPResultCode.INVALID_CREDENTIALS,
-                    Message.raw(ex.getMessage()))));
+                    LocalizableMessage.raw(ex.getMessage()))));
             break;
           }
         }
@@ -427,7 +427,7 @@
           batchResponses.add(
               createErrorResponse(
                     new LDAPException(LDAPResultCode.INVALID_CREDENTIALS,
-                    Message.raw("Invalid configured credentials."))));
+                    LocalizableMessage.raw("Invalid configured credentials."))));
         }
       }
       else
@@ -442,7 +442,7 @@
         batchResponses.add(
               createErrorResponse(
                     new LDAPException(LDAPResultCode.INVALID_CREDENTIALS,
-                    Message.raw("Unable to retrieve credentials."))));
+                    LocalizableMessage.raw("Unable to retrieve credentials."))));
       }
     }
 
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java
index 966e228..fe13e27 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanel.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;
@@ -52,7 +52,7 @@
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.messages.AdminToolMessages;
 import org.opends.quicksetup.Installation;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.util.DynamicConstants;
@@ -200,7 +200,7 @@
             "INFO_CONTROL_PANEL_TITLE",
             AdminToolMessages.INFO_CONTROL_PANEL_TITLE.get(
             DynamicConstants.PRODUCT_NAME),
-            Message.class).toString();
+            LocalizableMessage.class).toString();
         dlg.setTitle(title);
         dlg.setContentPane(controlCenterPane);
         dlg.pack();
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanelArgumentParser.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanelArgumentParser.java
index 57fdc38..5210225 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanelArgumentParser.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanelArgumentParser.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.guitools.controlpanel;
@@ -33,7 +33,7 @@
 import java.util.LinkedHashSet;
 
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.UserData;
 import org.opends.quicksetup.util.Utils;
@@ -99,7 +99,7 @@
    * @param msg the usage message.
    */
   public ControlPanelArgumentParser(String mainClassName,
-      Message msg)
+      LocalizableMessage msg)
   {
     super(mainClassName, msg, false);
   }
@@ -197,7 +197,7 @@
   @Override()
   public void parseArguments(String[] args) throws ArgumentException
   {
-    LinkedHashSet<Message> errorMessages = new LinkedHashSet<Message>();
+    LinkedHashSet<LocalizableMessage> errorMessages = new LinkedHashSet<LocalizableMessage>();
     try
     {
       super.parseArguments(args);
@@ -209,7 +209,7 @@
 
     if (bindPasswordArg.isPresent() && bindPasswordFileArg.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           bindPasswordArg.getLongIdentifier(),
           bindPasswordFileArg.getLongIdentifier());
       errorMessages.add(message);
@@ -217,7 +217,7 @@
 
     if (errorMessages.size() > 0)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(
           Utils.getMessageFromCollection(errorMessages,
               Constants.LINE_SEPARATOR));
       throw new ArgumentException(message);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanelLauncher.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanelLauncher.java
index eeea0b5..55a7f04 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanelLauncher.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ControlPanelLauncher.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.guitools.controlpanel;
@@ -41,7 +41,7 @@
 
 import org.opends.guitools.controlpanel.util.ControlPanelLog;
 import org.opends.messages.AdminToolMessages;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.types.InitializationException;
@@ -95,9 +95,9 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       System.err.println(message);
-      System.out.println(Message.raw(argParser.getUsage()));
+      System.out.println(LocalizableMessage.raw(argParser.getUsage()));
 
       System.exit(ErrorReturnCode.ERROR_PARSING_ARGS.getReturnCode());
     }
@@ -235,9 +235,9 @@
   private static void initLookAndFeel() throws Throwable
   {
 //  Setup MacOSX native menu bar before AWT is loaded.
-    Message title = Utils.getCustomizedObject("INFO_CONTROL_PANEL_TITLE",
+    LocalizableMessage title = Utils.getCustomizedObject("INFO_CONTROL_PANEL_TITLE",
         AdminToolMessages.INFO_CONTROL_PANEL_TITLE.get(
-        DynamicConstants.PRODUCT_NAME), Message.class);
+        DynamicConstants.PRODUCT_NAME), LocalizableMessage.class);
     Utils.setMacOSXMenuBar(title);
     UIFactory.initializeLookAndFeel();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/browser/ReferralLimitExceededException.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/browser/ReferralLimitExceededException.java
index 5b56bc8..0397ab6 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/browser/ReferralLimitExceededException.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/browser/ReferralLimitExceededException.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.browser;
 
 import javax.naming.NamingException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The exception that is launched when we exceed the maximum number of hops
@@ -43,7 +44,7 @@
    * Constructor of the exception.
    * @param message the message associated with the exception.
    */
-  public ReferralLimitExceededException(Message message)
+  public ReferralLimitExceededException(LocalizableMessage message)
   {
     super(message.toString());
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/AbstractIndexTableModel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/AbstractIndexTableModel.java
index e47bff4..5b8ee06 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/AbstractIndexTableModel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/AbstractIndexTableModel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.datamodel;
@@ -33,7 +34,7 @@
 import java.util.TreeSet;
 
 import org.opends.messages.AdminToolMessages;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Table Model used to store information about indexes.  It is used basically
@@ -176,7 +177,7 @@
    * @return the message to be displayed in the cell if an index must be
    * rebuilt.
    */
-  protected Message getRebuildRequiredString(AbstractIndexDescriptor index)
+  protected LocalizableMessage getRebuildRequiredString(AbstractIndexDescriptor index)
   {
     if (info.mustReindex(index))
     {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/Action.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/Action.java
index 1b34e6f..319a3b3 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/Action.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/Action.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.datamodel;
 
 import org.opends.guitools.controlpanel.ui.StatusGenericPanel;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The class that is used by the different action buttons on the left side of
@@ -36,7 +37,7 @@
  */
 public class Action
 {
-  private Message name;
+  private LocalizableMessage name;
 
   private Class<? extends StatusGenericPanel> associatedPanel;
 
@@ -44,7 +45,7 @@
    * Returns the name of the action.
    * @return the name of the action.
    */
-  public Message getName()
+  public LocalizableMessage getName()
   {
     return name;
   }
@@ -53,7 +54,7 @@
    * Sets the name of the action.
    * @param name the name of the action.
    */
-  public void setName(Message name)
+  public void setName(LocalizableMessage name)
   {
     this.name = name;
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/BaseDNTableModel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/BaseDNTableModel.java
index 85e5759..5979c43 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/BaseDNTableModel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/BaseDNTableModel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock, AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.guitools.controlpanel.datamodel;
@@ -37,7 +37,7 @@
 import java.util.TreeSet;
 
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The table model used to display all the base DNs.
@@ -637,7 +637,7 @@
    */
   private String getStringForReplState(BaseDNDescriptor rep)
   {
-    Message s;
+    LocalizableMessage s;
     if (rep.getType() == BaseDNDescriptor.Type.REPLICATED)
     {
       s = INFO_BASEDN_REPLICATED_LABEL.get();
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/BasicMonitoringAttributes.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/BasicMonitoringAttributes.java
index edc26bf..e43f9a0 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/BasicMonitoringAttributes.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/BasicMonitoringAttributes.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.datamodel;
 
 import static org.opends.messages.AdminToolMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.monitors.TraditionalWorkQueueMonitor;
 import org.opends.server.util.ServerConstants;
 
@@ -40,23 +41,23 @@
   /**
    * Start Date.
    */
-  START_DATE(Message.EMPTY, ServerConstants.ATTR_START_TIME),
+  START_DATE(LocalizableMessage.EMPTY, ServerConstants.ATTR_START_TIME),
   /**
    * Current Date.
    */
-  CURRENT_DATE(Message.EMPTY, ServerConstants.ATTR_CURRENT_TIME),
+  CURRENT_DATE(LocalizableMessage.EMPTY, ServerConstants.ATTR_CURRENT_TIME),
   /**
    * Current Connections.
    */
-  CURRENT_CONNECTIONS(Message.EMPTY, ServerConstants.ATTR_CURRENT_CONNS),
+  CURRENT_CONNECTIONS(LocalizableMessage.EMPTY, ServerConstants.ATTR_CURRENT_CONNS),
   /**
    * Maximum Connections.
    */
-  MAX_CONNECTIONS(Message.EMPTY, ServerConstants.ATTR_MAX_CONNS),
+  MAX_CONNECTIONS(LocalizableMessage.EMPTY, ServerConstants.ATTR_MAX_CONNS),
   /**
    * Total Connections.
    */
-  TOTAL_CONNECTIONS(Message.EMPTY, ServerConstants.ATTR_TOTAL_CONNS),
+  TOTAL_CONNECTIONS(LocalizableMessage.EMPTY, ServerConstants.ATTR_TOTAL_CONNS),
   /**
    * Average Request Backlog.
    */
@@ -278,7 +279,7 @@
     }
   }
 
-  private Message msg;
+  private LocalizableMessage msg;
   private String attributeName;
   private boolean isAborted;
   private boolean isNumeric;
@@ -287,7 +288,7 @@
   private boolean canHaveAverage;
   private boolean isTime;
 
-  private BasicMonitoringAttributes(Message msg, String attributeName)
+  private BasicMonitoringAttributes(LocalizableMessage msg, String attributeName)
   {
     this.msg = msg;
     this.attributeName = attributeName;
@@ -296,7 +297,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getMessage()
+  public LocalizableMessage getMessage()
   {
     return msg;
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CannotRenameException.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CannotRenameException.java
index ab1ddb2..ccb29ca 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CannotRenameException.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CannotRenameException.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.datamodel;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -42,7 +43,7 @@
    * Constructor.
    * @param msg the message describing why the entry cannot be renamed.
    */
-  public CannotRenameException(Message msg)
+  public CannotRenameException(LocalizableMessage msg)
   {
     super(msg);
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/Category.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/Category.java
index 62d6d36..acb751e 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/Category.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/Category.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.datamodel;
 
 import java.util.ArrayList;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Class containing the different actions for a given category.  For instance
@@ -38,14 +39,14 @@
  */
 public class Category
 {
-  private Message name;
+  private LocalizableMessage name;
   private ArrayList<Action> actions = new ArrayList<Action>();
 
   /**
    * Returns the name of the category.
    * @return the name of the category.
    */
-  public Message getName()
+  public LocalizableMessage getName()
   {
     return name;
   }
@@ -54,7 +55,7 @@
    * Sets the name of the category.
    * @param name the name of the category.
    */
-  public void setName(Message name)
+  public void setName(LocalizableMessage name)
   {
     this.name = name;
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CheckEntrySyntaxException.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CheckEntrySyntaxException.java
index 8c28070..e7e3f1d 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CheckEntrySyntaxException.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/CheckEntrySyntaxException.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.datamodel;
@@ -31,7 +32,7 @@
 import java.util.List;
 
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -42,12 +43,12 @@
 public class CheckEntrySyntaxException extends OpenDsException
 {
   private static final long serialVersionUID = 8145911071581212822L;
-  private List<Message> errors;
+  private List<LocalizableMessage> errors;
   /**
    * Constructor of the exception.
    * @param errors the list of error description that were found.
    */
-  public CheckEntrySyntaxException(List<Message> errors)
+  public CheckEntrySyntaxException(List<LocalizableMessage> errors)
   {
     super(getMessage(errors));
     this.errors = Collections.unmodifiableList(errors);
@@ -57,7 +58,7 @@
    * Returns the list of errors that were encountered.
    * @return the list of errors that were encountered.
    */
-  public List<Message> getErrors()
+  public List<LocalizableMessage> getErrors()
   {
     return errors;
   }
@@ -68,13 +69,13 @@
    * @param errors the list of errors.
    * @return a single message using the provided messages.
    */
-  private static Message getMessage(List<Message> errors)
+  private static LocalizableMessage getMessage(List<LocalizableMessage> errors)
   {
     ArrayList<String> s = new ArrayList<String>();
-    for (Message error : errors)
+    for (LocalizableMessage error : errors)
     {
       s.add(error.toString());
     }
-    return Message.raw(Utilities.getStringFromCollection(s, "<br>"));
+    return LocalizableMessage.raw(Utilities.getStringFromCollection(s, "<br>"));
   }
 }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConfigReadException.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConfigReadException.java
index bde9c02..22d8d04 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConfigReadException.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConfigReadException.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.datamodel;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -41,7 +42,7 @@
    * Constructor for the exception.
    * @param msg the localized message to be used.
    */
-  public ConfigReadException(Message msg)
+  public ConfigReadException(LocalizableMessage msg)
   {
     super(msg);
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConnectionHandlerDescriptor.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConnectionHandlerDescriptor.java
index c063db7..17e23c3 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConnectionHandlerDescriptor.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConnectionHandlerDescriptor.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.datamodel;
 
@@ -35,7 +35,7 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.AdministrationConnectorCfgDefn;
 
 /**
@@ -125,18 +125,18 @@
      */
     OTHER(INFO_CTRL_PANEL_CONN_HANDLER_OTHER.get());
 
-    private Message displayMessage;
+    private LocalizableMessage displayMessage;
 
-    private Protocol(Message displayMessage)
+    private Protocol(LocalizableMessage displayMessage)
     {
       this.displayMessage = displayMessage;
     }
 
     /**
-     * Returns the display Message to be used for the protocol.
-     * @return the display Message to be used for the protocol.
+     * Returns the display LocalizableMessage to be used for the protocol.
+     * @return the display LocalizableMessage to be used for the protocol.
      */
-    public Message getDisplayMessage()
+    public LocalizableMessage getDisplayMessage()
     {
       return displayMessage;
     }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConnectionHandlersMonitoringTableModel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConnectionHandlersMonitoringTableModel.java
index 217c1a0..ecaddad 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConnectionHandlersMonitoringTableModel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/ConnectionHandlersMonitoringTableModel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.datamodel;
 
@@ -34,7 +35,7 @@
 
 import org.opends.guitools.controlpanel.datamodel.ConnectionHandlerDescriptor.
 Protocol;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The table model used to display the monitoring information of connection
@@ -214,7 +215,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getNameHeader()
+  protected LocalizableMessage getNameHeader()
   {
     return INFO_CTRL_PANEL_CONNECTION_HANDLER_HEADER.get();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/DBEnvironmentMonitoringTableModel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/DBEnvironmentMonitoringTableModel.java
index b83f1f7..d0d80f2 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/DBEnvironmentMonitoringTableModel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/DBEnvironmentMonitoringTableModel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.datamodel;
 
@@ -36,7 +37,7 @@
 import java.util.TreeSet;
 
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The abstract table model used to display all the network groups.
@@ -51,8 +52,8 @@
     new ArrayList<BackendDescriptor>();
 
   private String[] columnNames = {};
-  private Message NO_VALUE_SET = INFO_CTRL_PANEL_NO_MONITORING_VALUE.get();
-  private Message NOT_IMPLEMENTED = INFO_CTRL_PANEL_NOT_IMPLEMENTED.get();
+  private LocalizableMessage NO_VALUE_SET = INFO_CTRL_PANEL_NO_MONITORING_VALUE.get();
+  private LocalizableMessage NOT_IMPLEMENTED = INFO_CTRL_PANEL_NOT_IMPLEMENTED.get();
 
 
   /**
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/IndexTableModel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/IndexTableModel.java
index 6801df2..66070dc 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/IndexTableModel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/IndexTableModel.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.datamodel;
 
 import static org.opends.messages.AdminToolMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn.IndexType;
 
 /**
@@ -148,7 +149,7 @@
     StringBuilder sb = new StringBuilder();
     for (IndexType type : index.getTypes())
     {
-      Message v;
+      LocalizableMessage v;
       switch (type)
       {
       case SUBSTRING:
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/MonitoringAttributes.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/MonitoringAttributes.java
index e5e5eb5..dcdb895 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/MonitoringAttributes.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/MonitoringAttributes.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.datamodel;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * An interface defining the different methods required by the UI components
@@ -39,7 +40,7 @@
    * localized name of the operation associated with the attribute).
    * @return the message associated with the attribute.
    */
-  public Message getMessage();
+  public LocalizableMessage getMessage();
 
   /**
    * Returns the name of the attribute.
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/MonitoringTableModel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/MonitoringTableModel.java
index 7912739..a54ddbf 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/MonitoringTableModel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/MonitoringTableModel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.datamodel;
 
@@ -36,7 +37,7 @@
 import java.util.TreeSet;
 
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The abstract table model used to display all the network groups.
@@ -54,8 +55,8 @@
   private long runningTime;
 
   private String[] columnNames = {};
-  private Message NO_VALUE_SET = INFO_CTRL_PANEL_NO_MONITORING_VALUE.get();
-  private Message NOT_IMPLEMENTED = INFO_CTRL_PANEL_NOT_IMPLEMENTED.get();
+  private LocalizableMessage NO_VALUE_SET = INFO_CTRL_PANEL_NO_MONITORING_VALUE.get();
+  private LocalizableMessage NOT_IMPLEMENTED = INFO_CTRL_PANEL_NOT_IMPLEMENTED.get();
 
 
   /**
@@ -206,7 +207,7 @@
    * Returns the header to be used for the name of the object.
    * @return the header to be used for the name of the object.
    */
-  protected abstract Message getNameHeader();
+  protected abstract LocalizableMessage getNameHeader();
 
   /**
    * Sets the operations displayed by this table model.
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/SortableTableModel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/SortableTableModel.java
index e1d05b3..9877299 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/SortableTableModel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/SortableTableModel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.datamodel;
@@ -30,7 +31,7 @@
 
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.util.ServerConstants;
 import org.opends.server.util.StaticUtils;
 
@@ -78,7 +79,7 @@
    * @param msg the header message value (with no HTML formatting).
    * @return the header wrapped with the default line width.
    */
-  protected String getHeader(Message msg)
+  protected String getHeader(LocalizableMessage msg)
   {
     return getHeader(msg, 15);
   }
@@ -89,7 +90,7 @@
    * @param wrap the maximum line width before wrapping.
    * @return the header wrapped with the specified line width.
    */
-  protected String getHeader(Message msg, int wrap)
+  protected String getHeader(LocalizableMessage msg, int wrap)
   {
     String text = msg.toString();
     String wrappedText = StaticUtils.wrapText(text, wrap);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/TaskTableModel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/TaskTableModel.java
index e77fbaf..6ae9a88 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/TaskTableModel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/datamodel/TaskTableModel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.datamodel;
 
@@ -38,7 +39,7 @@
 
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.backends.task.TaskState;
 import org.opends.server.tools.tasks.TaskEntry;
@@ -54,15 +55,15 @@
   private Set<TaskEntry> data = new HashSet<TaskEntry>();
   private ArrayList<TaskEntry> dataSourceArray = new ArrayList<TaskEntry>();
 
-  LinkedHashSet<Message> displayedAttributes = new LinkedHashSet<Message>();
-  final LinkedHashSet<Message> defaultAttributes = new LinkedHashSet<Message>();
+  LinkedHashSet<LocalizableMessage> displayedAttributes = new LinkedHashSet<LocalizableMessage>();
+  final LinkedHashSet<LocalizableMessage> defaultAttributes = new LinkedHashSet<LocalizableMessage>();
   {
     defaultAttributes.add(INFO_TASKINFO_FIELD_ID.get());
     defaultAttributes.add(INFO_TASKINFO_FIELD_TYPE.get());
     defaultAttributes.add(INFO_TASKINFO_FIELD_STATUS.get());
     defaultAttributes.add(INFO_CTRL_PANEL_TASK_CANCELABLE.get());
   }
-  LinkedHashSet<Message> allAttributes = new LinkedHashSet<Message>();
+  LinkedHashSet<LocalizableMessage> allAttributes = new LinkedHashSet<LocalizableMessage>();
   {
     allAttributes.addAll(defaultAttributes);
     allAttributes.add(INFO_TASKINFO_FIELD_SCHEDULED_START.get());
@@ -148,7 +149,7 @@
    * Sets the operations displayed by this table model.
    * @param attributes the attributes displayed by this table model.
    */
-  public void setAttributes(LinkedHashSet<Message> attributes)
+  public void setAttributes(LinkedHashSet<LocalizableMessage> attributes)
   {
     if (!allAttributes.containsAll(attributes))
     {
@@ -160,7 +161,7 @@
     int columnCount = attributes.size();
     columnNames = new String[columnCount];
     int i = 0;
-    for (Message attribute : attributes)
+    for (LocalizableMessage attribute : attributes)
     {
       columnNames[i] = getHeader(attribute, 15);
       i++;
@@ -172,7 +173,7 @@
    */
   public Class<?> getColumnClass(int column)
   {
-    return Message.class;
+    return LocalizableMessage.class;
   }
 
   /**
@@ -187,13 +188,13 @@
    */
   public Object getValueAt(int row, int column)
   {
-    Message value;
+    LocalizableMessage value;
     column = getFixedOrderColumn(column);
     TaskEntry taskEntry = get(row);
     switch (column)
     {
     case 0:
-      value = Message.raw(taskEntry.getId());
+      value = LocalizableMessage.raw(taskEntry.getId());
       break;
     case 1:
       value = taskEntry.getType();
@@ -217,7 +218,7 @@
         value = taskEntry.getScheduleTab();
       } else {
         value = taskEntry.getScheduledStartTime();
-        if (value == null || value.equals(Message.EMPTY))
+        if (value == null || value.equals(LocalizableMessage.EMPTY))
         {
           value = INFO_TASKINFO_IMMEDIATE_EXECUTION.get();
         }
@@ -286,7 +287,7 @@
    * Returns the set of attributes ordered.
    * @return the set of attributes ordered.
    */
-  public LinkedHashSet<Message> getDisplayedAttributes()
+  public LinkedHashSet<LocalizableMessage> getDisplayedAttributes()
   {
     return displayedAttributes;
   }
@@ -295,7 +296,7 @@
    * Returns the set of attributes ordered.
    * @return the set of attributes ordered.
    */
-  public LinkedHashSet<Message> getAllAttributes()
+  public LinkedHashSet<LocalizableMessage> getAllAttributes()
   {
     return allAttributes;
   }
@@ -374,8 +375,8 @@
   {
     int fixedOrderColumn = 0;
     int i=0;
-    Message colMsg = null;
-    for (Message msg : displayedAttributes)
+    LocalizableMessage colMsg = null;
+    for (LocalizableMessage msg : displayedAttributes)
     {
       if (i == column)
       {
@@ -384,7 +385,7 @@
       }
       i++;
     }
-    for (Message msg : allAttributes)
+    for (LocalizableMessage msg : allAttributes)
     {
       if (msg.equals(colMsg))
       {
@@ -395,9 +396,9 @@
     return fixedOrderColumn;
   }
 
-  private Message getValue(List<String> values, Message valueIfEmpty)
+  private LocalizableMessage getValue(List<String> values, LocalizableMessage valueIfEmpty)
   {
-    Message msg;
+    LocalizableMessage msg;
     if (values.isEmpty())
     {
       msg = valueIfEmpty;
@@ -407,12 +408,12 @@
       String s = Utils.getStringFromCollection(values, "<br>");
       if (values.size() > 1)
       {
-        msg = Message.raw(
+        msg = LocalizableMessage.raw(
             "<html>"+Utilities.applyFont(s, ColorAndFontConstants.tableFont));
       }
       else
       {
-        msg = Message.raw(s);
+        msg = LocalizableMessage.raw(s);
       }
     }
     return msg;
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java
index 71b61da..8489dc7 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/AddToGroupTask.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;
@@ -55,7 +55,7 @@
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.messages.AdminToolMessages;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.DN;
 import org.opends.server.util.ServerConstants;
 
@@ -118,7 +118,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return
     AdminToolMessages.INFO_CTRL_PANEL_ADD_TO_GROUP_TASK_DESCRIPTION.get();
@@ -145,7 +145,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (!isServerRunning())
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/CancelTaskTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/CancelTaskTask.java
index 4c7ec1a..008802e 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/CancelTaskTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/CancelTaskTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -40,7 +41,7 @@
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.ManageTasks;
 import org.opends.server.tools.tasks.TaskEntry;
 
@@ -91,7 +92,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_CANCEL_TASK_DESCRIPTION.get();
   }
@@ -139,7 +140,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (!isServerRunning())
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 65a014b..ba75c6d 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
@@ -51,7 +51,7 @@
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.ConfigReader;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.client.ManagementContext;
 import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor;
 import org.opends.server.admin.client.ldap.LDAPManagementContext;
@@ -155,7 +155,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     StringBuilder sb = new StringBuilder();
 
@@ -208,14 +208,14 @@
         Utilities.getStringFromCollection(ids, ", ")));
       }
     }
-    return Message.raw(sb.toString());
+    return LocalizableMessage.raw(sb.toString());
   }
 
   /**
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
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 e909f33..67e0de2 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
@@ -59,7 +59,7 @@
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.ui.nodes.BrowserNodeInfo;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.schema.SchemaConstants;
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
@@ -151,7 +151,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_DELETE_ENTRY_TASK_DESCRIPTION.get();
   }
@@ -177,7 +177,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (!isServerRunning())
@@ -348,7 +348,7 @@
             equivalentCommandWithoutControlPrinted = true;
           }
           getProgressDialog().setSummary(
-              Message.raw(
+              LocalizableMessage.raw(
                   Utilities.applyFont(
                       INFO_CTRL_PANEL_DELETING_ENTRY_SUMMARY.get(
                           lastDn.toString()).toString(),
@@ -450,7 +450,7 @@
           equivalentCommandWithControlPrinted = true;
         }
         getProgressDialog().setSummary(
-            Message.raw(
+            LocalizableMessage.raw(
                 Utilities.applyFont(
                     INFO_CTRL_PANEL_DELETING_ENTRY_SUMMARY.get(
                         lastDn.toString()).toString(),
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 bbf2c6b..441e4b3 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
@@ -46,7 +46,7 @@
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.ConfigReader;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.client.ManagementContext;
 import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor;
 import org.opends.server.admin.client.ldap.LDAPManagementContext;
@@ -104,7 +104,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     if (backendSet.size() == 1)
     {
@@ -122,7 +122,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
index 9f8faa4..f582dee 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/DeleteSchemaElementsTask.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;
 
@@ -50,7 +50,7 @@
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.Attributes;
@@ -178,7 +178,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (state == State.RUNNING &&
@@ -240,7 +240,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_DELETE_SCHEMA_ELEMENT_TASK_DESCRIPTION.get();
   }
@@ -505,7 +505,7 @@
     String attrValue = getSchemaFileAttributeValue(element);
     if (!isServerRunning())
     {
-      Message msg;
+      LocalizableMessage msg;
       if (element instanceof AttributeType)
       {
         msg = INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_DELETE_ATTRIBUTE_OFFLINE.get(
@@ -531,7 +531,7 @@
       String equiv = getEquivalentCommandLine(getCommandLinePath("ldapmodify"),
           args);
 
-      Message msg;
+      LocalizableMessage msg;
       if (element instanceof AttributeType)
       {
         msg = INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_DELETE_ATTRIBUTE_ONLINE.get(
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyAttributeTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyAttributeTask.java
index 5e16a7a..bf8a969 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyAttributeTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyAttributeTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.task;
 
@@ -42,7 +43,7 @@
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.ObjectClass;
 import org.opends.server.types.OpenDsException;
@@ -92,7 +93,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_MODIFY_ATTRIBUTE_TASK_DESCRIPTION.get(
         oldAttribute.getNameOrOID());
@@ -102,7 +103,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (state == State.RUNNING &&
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 2194981..dafe10d 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
@@ -59,7 +59,7 @@
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.messages.AdminToolMessages;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.*;
@@ -173,7 +173,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_MODIFY_ENTRY_TASK_DESCRIPTION.get(oldEntry.getDN());
   }
@@ -199,7 +199,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (!isServerRunning())
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyObjectClassTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyObjectClassTask.java
index 8eea471..bbf7a26 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyObjectClassTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/ModifyObjectClassTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.task;
 
@@ -41,7 +42,7 @@
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.ObjectClass;
 import org.opends.server.types.OpenDsException;
@@ -91,7 +92,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_MODIFY_OBJECTCLASS_TASK_DESCRIPTION.get(
         oldObjectClass.getNameOrOID());
@@ -101,7 +102,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (state == State.RUNNING &&
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 049d154..a90e20e 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
@@ -52,7 +52,7 @@
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.ui.nodes.BrowserNodeInfo;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.types.AttributeValue;
 import org.opends.server.types.DN;
@@ -124,7 +124,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_NEW_ENTRY_TASK_DESCRIPTION.get(dn.toString());
   }
@@ -149,7 +149,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (!isServerRunning())
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java
index 70ffcfd..8a66e06 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/NewSchemaElementsTask.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -48,7 +48,7 @@
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.core.DirectoryServer;
@@ -106,7 +106,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (state == State.RUNNING &&
@@ -152,7 +152,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     if (attrsToAdd.size() == 1 && ocsToAdd.isEmpty())
     {
@@ -457,7 +457,7 @@
         args);
 
     StringBuilder sb = new StringBuilder();
-    Message msg;
+    LocalizableMessage msg;
     if (element instanceof AttributeType)
     {
       msg = INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_ADD_ATTRIBUTE_ONLINE.get(
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/OfflineUpdateException.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/OfflineUpdateException.java
index 75baa79..07f99b9 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/OfflineUpdateException.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/OfflineUpdateException.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -42,7 +43,7 @@
    * Creates an exception with a message.
    * @param msg the message.
    */
-  public OfflineUpdateException(Message msg)
+  public OfflineUpdateException(LocalizableMessage msg)
   {
     super(msg);
   }
@@ -52,7 +53,7 @@
    * @param msg the message.
    * @param rootCause the root cause.
    */
-  public OfflineUpdateException(Message msg, Throwable rootCause)
+  public OfflineUpdateException(LocalizableMessage msg, Throwable rootCause)
   {
     super(msg, rootCause);
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/OnlineUpdateException.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/OnlineUpdateException.java
index b312ea9..00d160e 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/OnlineUpdateException.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/OnlineUpdateException.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -43,7 +44,7 @@
    * Creates an exception with a message.
    * @param msg the message.
    */
-  public OnlineUpdateException(Message msg)
+  public OnlineUpdateException(LocalizableMessage msg)
   {
     super(msg);
   }
@@ -53,7 +54,7 @@
    * @param msg the message.
    * @param rootCause the root cause.
    */
-  public OnlineUpdateException(Message msg, Throwable rootCause)
+  public OnlineUpdateException(LocalizableMessage msg, Throwable rootCause)
   {
     super(msg, rootCause);
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
index 1f35d3a..b295578 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/RebuildIndexTask.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -46,7 +46,7 @@
 import org.opends.guitools.controlpanel.datamodel.VLVIndexDescriptor;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.RebuildIndex;
 
 /**
@@ -91,7 +91,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     if (baseDNs.size() == 1)
     {
@@ -111,7 +111,7 @@
    */
   @Override
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
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 777730f..06a9b53 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
@@ -49,7 +49,7 @@
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.tools.LDAPPasswordModify;
 import org.opends.server.types.DN;
@@ -136,7 +136,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_RESET_USER_PASSWORD_TASK_DESCRIPTION.get(
         node.getDN());
@@ -185,7 +185,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (!isServerRunning())
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/RestartServerTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/RestartServerTask.java
index cd7d471..aae8f23 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/RestartServerTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/RestartServerTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -36,7 +37,7 @@
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The task called when we want to restart the server.
@@ -77,7 +78,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_RESTART_SERVER_TASK_DESCRIPTION.get();
   }
@@ -133,7 +134,7 @@
         String cmdLine = getStopCommandLineName();
         printEquivalentCommandLine(cmdLine, getCommandLineArguments(),
             INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_STOP_SERVER.get());
-        dlg.setSummary(Message.raw(
+        dlg.setSummary(LocalizableMessage.raw(
             Utilities.applyFont(
             INFO_CTRL_PANEL_STOPPING_SERVER_SUMMARY.get().toString(),
             ColorAndFontConstants.defaultFont)));
@@ -170,7 +171,7 @@
             printEquivalentCommandLine(cmdLine, getStartCommandLineArguments(),
                 INFO_CTRL_PANEL_EQUIVALENT_CMD_TO_START_SERVER.get());
 
-            dlg.setSummary(Message.raw(
+            dlg.setSummary(LocalizableMessage.raw(
                 Utilities.applyFont(
                 INFO_CTRL_PANEL_STARTING_SERVER_SUMMARY.get().toString(),
                 ColorAndFontConstants.defaultFont)));
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StartServerTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StartServerTask.java
index 9d0f248..5d86bda 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StartServerTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StartServerTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -32,7 +33,7 @@
 
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The task called when we want to start the server.
@@ -62,7 +63,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_START_SERVER_TASK_DESCRIPTION.get();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java
index 361f305..3e06268 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StartStopTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -34,7 +35,7 @@
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * An abstract class used to re-factor some code between the start, stop and
@@ -75,7 +76,7 @@
    * {@inheritDoc}
    */
   public boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons)
+      Collection<LocalizableMessage> incompatibilityReasons)
   {
     boolean canLaunch = true;
     if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StopServerTask.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StopServerTask.java
index d6ecba0..48c16a9 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StopServerTask.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/task/StopServerTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.task;
@@ -36,7 +37,7 @@
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.ui.ProgressDialog;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The task called when we want to start the server.
@@ -67,7 +68,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTaskDescription()
+  public LocalizableMessage getTaskDescription()
   {
     return INFO_CTRL_PANEL_STOP_SERVER_TASK_DESCRIPTION.get();
   }
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 232430d..094f773 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
@@ -55,7 +55,7 @@
 import org.opends.guitools.controlpanel.util.ConfigReader;
 import org.opends.guitools.controlpanel.util.ProcessReader;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.UserData;
 import org.forgerock.opendj.ldap.ByteString;
@@ -423,7 +423,7 @@
    * quit and there are tasks running.
    * @return the description of the task.
    */
-  public abstract Message getTaskDescription();
+  public abstract LocalizableMessage getTaskDescription();
 
   /**
    * Adds a configuration element created listener.
@@ -608,7 +608,7 @@
    * launched in paralel with this task and <CODE>false</CODE> otherwise.
    */
   public abstract boolean canLaunch(Task taskToBeLaunched,
-      Collection<Message> incompatibilityReasons);
+      Collection<LocalizableMessage> incompatibilityReasons);
 
   /**
    * Execute the task.  This method is synchronous.
@@ -1046,7 +1046,7 @@
    * @param msg the message associated with the command line.
    */
   protected void printEquivalentCommandLine(String cmdName, List<String> args,
-      Message msg)
+      LocalizableMessage msg)
   {
     getProgressDialog().appendProgressHtml(Utilities.applyFont(msg+"<br><b>"+
         getEquivalentCommandLine(cmdName, args)+"</b><br><br>",
@@ -1106,7 +1106,7 @@
    * @param taskToBeLaunched the task that we are trying to launch.
    * @return the incompatible message between two tasks.
    */
-  protected Message getIncompatibilityMessage(Task taskRunning,
+  protected LocalizableMessage getIncompatibilityMessage(Task taskRunning,
       Task taskToBeLaunched)
   {
     return INFO_CTRL_PANEL_INCOMPATIBLE_TASKS.get(
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 2afc9a7..2f74835 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
@@ -96,8 +96,8 @@
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.ui.renderer.CustomListCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.quicksetup.UserDataCertificateException;
 import org.opends.quicksetup.ui.CertificateDialog;
 import org.opends.quicksetup.util.UIKeyStore;
@@ -167,22 +167,22 @@
   /**
    * LDAP filter message.
    */
-  protected static final Message LDAP_FILTER =
+  protected static final LocalizableMessage LDAP_FILTER =
     INFO_CTRL_PANEL_LDAP_FILTER.get();
 
   /**
    * User filter message.
    */
-  protected static final Message USER_FILTER =
+  protected static final LocalizableMessage USER_FILTER =
     INFO_CTRL_PANEL_USERS_FILTER.get();
 
   /**
    * Group filter message.
    */
-  protected static final Message GROUP_FILTER =
+  protected static final LocalizableMessage GROUP_FILTER =
     INFO_CTRL_PANEL_GROUPS_FILTER.get();
 
-  private final Message OTHER_BASE_DN =
+  private final LocalizableMessage OTHER_BASE_DN =
     INFO_CTRL_PANEL_OTHER_BASE_DN.get();
 
   private ArrayList<DN> otherBaseDns = new ArrayList<DN>();
@@ -320,12 +320,12 @@
     gbc.gridy = 0;
     gbc.gridwidth = 7;
     addErrorPane(gbc);
-    Message title = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessage title = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     mb.append(INFO_CTRL_PANEL_SERVER_NOT_RUNNING_DETAILS.get());
     mb.append("<br><br>");
     mb.append(getStartServerHTML());
-    Message details = mb.toMessage();
+    LocalizableMessage details = mb.toMessage();
     updateErrorPane(errorPane, title, ColorAndFontConstants.errorTitleFont,
         details,
         ColorAndFontConstants.defaultFont);
@@ -685,7 +685,7 @@
    */
   protected void applyButtonClicked()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     setPrimaryValid(lFilter);
     String s = getBaseDN();
     boolean displayAll = false;
@@ -1331,14 +1331,14 @@
   {
     boolean displayNodes = false;
     boolean displayErrorPane = false;
-    Message errorTitle = Message.EMPTY;
-    Message errorDetails = Message.EMPTY;
+    LocalizableMessage errorTitle = LocalizableMessage.EMPTY;
+    LocalizableMessage errorDetails = LocalizableMessage.EMPTY;
     ServerDescriptor.ServerStatus status = desc.getStatus();
     if (status == ServerDescriptor.ServerStatus.STARTED)
     {
       if (!desc.isAuthenticated())
       {
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         mb.append(
             INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_TO_BROWSE_SUMMARY.get());
         mb.append("<br><br>"+getAuthenticateHTML());
@@ -1425,7 +1425,7 @@
     }
     else if (status == ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(
           desc.getHostname()));
       mb.append("<br><br>"+getAuthenticateHTML());
@@ -1436,7 +1436,7 @@
     else
     {
       errorTitle = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(
         INFO_CTRL_PANEL_AUTHENTICATION_SERVER_MUST_RUN_TO_BROWSE_SUMMARY.get());
       mb.append("<br><br>");
@@ -1447,8 +1447,8 @@
 
     final boolean fDisplayNodes = displayNodes;
     final boolean fDisplayErrorPane = displayErrorPane;
-    final Message fErrorTitle = errorTitle;
-    final Message fErrorDetails = errorDetails;
+    final LocalizableMessage fErrorTitle = errorTitle;
+    final LocalizableMessage fErrorDetails = errorDetails;
     SwingUtilities.invokeLater(new Runnable()
     {
       /**
@@ -1572,7 +1572,7 @@
       {
         dn = ALL_BASE_DNS;
       }
-      // The following is never true. OTHER_BASE_DN is a Message
+      // The following is never true. OTHER_BASE_DN is a LocalizableMessage
       // Comment out buggy code
       // else if (OTHER_BASE_DN.equals(dn))
       // {
@@ -1774,7 +1774,7 @@
    */
   class CustomComboBoxCellRenderer extends CustomListCellRenderer
   {
-    private Message ALL_BASE_DNS_STRING = INFO_CTRL_PANEL_ALL_BASE_DNS.get();
+    private LocalizableMessage ALL_BASE_DNS_STRING = INFO_CTRL_PANEL_ALL_BASE_DNS.get();
     /**
      * The constructor.
      * @param combo the combo box to be rendered.
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractIndexPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractIndexPanel.java
index e3e777c..7c40357 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractIndexPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractIndexPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 
@@ -48,7 +49,7 @@
 import org.opends.guitools.controlpanel.ui.components.TitlePanel;
 import org.opends.guitools.controlpanel.ui.renderer.CustomListCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn;
 import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn.IndexType;
 import org.opends.server.types.AttributeType;
@@ -64,8 +65,8 @@
   /**
    * Title panel.
    */
-  protected TitlePanel titlePanel = new TitlePanel(Message.EMPTY,
-      Message.EMPTY);
+  protected TitlePanel titlePanel = new TitlePanel(LocalizableMessage.EMPTY,
+      LocalizableMessage.EMPTY);
   /**
    * Attributes combo box.
    */
@@ -148,15 +149,15 @@
   protected JPanel typesPanel = new JPanel(new GridBagLayout());
 
   /**
-   * Message to be displayed to indicate that an index is not configurable.
+   * LocalizableMessage to be displayed to indicate that an index is not configurable.
    */
-  protected Message NON_CONFIGURABLE_INDEX =
+  protected LocalizableMessage NON_CONFIGURABLE_INDEX =
     INFO_CTRL_PANEL_NON_CONFIGURABLE_INDEX_LABEL.get();
 
   /**
-   * Message to be displayed to indicate that an index has been modified.
+   * LocalizableMessage to be displayed to indicate that an index has been modified.
    */
-  protected Message INDEX_MODIFIED = INFO_CTRL_PANEL_INDEX_MODIFIED_LABEL.get();
+  protected LocalizableMessage INDEX_MODIFIED = INFO_CTRL_PANEL_INDEX_MODIFIED_LABEL.get();
 
   /**
    * Array of checkboxes.
@@ -175,12 +176,12 @@
   /**
    * Custom attributes message.
    */
-  protected Message CUSTOM_ATTRIBUTES =
+  protected LocalizableMessage CUSTOM_ATTRIBUTES =
     INFO_CTRL_PANEL_CUSTOM_ATTRIBUTES_LABEL.get();
   /**
    * Standard attributes message.
    */
-  protected Message STANDARD_ATTRIBUTES =
+  protected LocalizableMessage STANDARD_ATTRIBUTES =
     INFO_CTRL_PANEL_STANDARD_ATTRIBUTES_LABEL.get();
 
   /**
@@ -392,9 +393,9 @@
    * @return a list of error message with the problems encountered in the data
    * provided by the user.
    */
-  protected List<Message> getErrors()
+  protected List<LocalizableMessage> getErrors()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     setPrimaryValid(lEntryLimit);
     setPrimaryValid(lType);
 
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractNewEntryPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractNewEntryPanel.java
index 61e9c36..e76b102 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractNewEntryPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AbstractNewEntryPanel.java
@@ -42,7 +42,7 @@
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.Entry;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.util.LDIFException;
@@ -84,7 +84,7 @@
    * Returns the title for the progress dialog.
    * @return the title for the progress dialog.
    */
-  protected abstract Message getProgressDialogTitle();
+  protected abstract LocalizableMessage getProgressDialogTitle();
   /**
    * Returns the LDIF representation of the new entry.
    * @return the LDIF representation of the new entry.
@@ -95,7 +95,7 @@
    * Updates the list of errors by checking the syntax of the entry.
    * @param errors the list of errors that must be updated.
    */
-  protected abstract void checkSyntax(ArrayList<Message> errors);
+  protected abstract void checkSyntax(ArrayList<LocalizableMessage> errors);
 
   /**
    * Returns <CODE>true</CODE> if the syntax of the entry must be checked in
@@ -113,7 +113,7 @@
    */
   public void okClicked()
   {
-    final ArrayList<Message> errors = new ArrayList<Message>();
+    final ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
 
     if (checkSyntaxBackground())
     {
@@ -160,7 +160,7 @@
    * task.
    * @param errors the list of errors.
    */
-  private void handleErrorsAndLaunchTask(ArrayList<Message> errors)
+  private void handleErrorsAndLaunchTask(ArrayList<LocalizableMessage> errors)
   {
     Entry entry = null;
     if (errors.size() == 0)
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 ba0a2e2..048ba0e 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
@@ -74,7 +74,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.VLVSortOrderRenderer;
 import org.opends.guitools.controlpanel.util.LowerCaseComparator;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.DefinedDefaultBehaviorProvider;
 import org.opends.server.admin.std.meta.LocalDBVLVIndexCfgDefn;
 import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn.IndexType;
@@ -100,8 +100,8 @@
   /**
    * Title panel.
    */
-  protected TitlePanel titlePanel = new TitlePanel(Message.EMPTY,
-      Message.EMPTY);
+  protected TitlePanel titlePanel = new TitlePanel(LocalizableMessage.EMPTY,
+      LocalizableMessage.EMPTY);
   /**
    * Name label.
    */
@@ -240,29 +240,29 @@
   /**
    * Other base DN message.
    */
-  protected final Message OTHER_BASE_DN =
+  protected final LocalizableMessage OTHER_BASE_DN =
     INFO_CTRL_PANEL_VLV_OTHER_BASE_DN_LABEL.get();
   /**
    * Ascending message.
    */
-  protected final Message ASCENDING =
+  protected final LocalizableMessage ASCENDING =
     INFO_CTRL_PANEL_VLV_ASCENDING_LABEL.get();
   /**
    * Descending message.
    */
-  protected final Message DESCENDING =
+  protected final LocalizableMessage DESCENDING =
     INFO_CTRL_PANEL_VLV_DESCENDING_LABEL.get();
 
   /**
    * Custom attributes message.
    */
-  protected Message CUSTOM_ATTRIBUTES =
+  protected LocalizableMessage CUSTOM_ATTRIBUTES =
     INFO_CTRL_PANEL_CUSTOM_ATTRIBUTES_LABEL.get();
 
   /**
    * Standard attributes message.
    */
-  protected Message STANDARD_ATTRIBUTES =
+  protected LocalizableMessage STANDARD_ATTRIBUTES =
     INFO_CTRL_PANEL_STANDARD_ATTRIBUTES_LABEL.get();
 
   /**
@@ -591,12 +591,12 @@
     try
     {
       LDAPFilter ldapFilter = LDAPFilter.decode(f);
-      ArrayList<Message> msgs = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> msgs = new ArrayList<LocalizableMessage>();
       updateIndexRequiredMessages(ldapFilter, msgs);
       if (!msgs.isEmpty())
       {
         StringBuilder sb = new StringBuilder();
-        for (Message msg : msgs)
+        for (LocalizableMessage msg : msgs)
         {
           sb.append("<br>-"+msg);
         }
@@ -623,7 +623,7 @@
    * @param msgs the list of messages to be updated.
    */
   private void updateIndexRequiredMessages(RawFilter filter,
-      Collection<Message> msgs)
+      Collection<LocalizableMessage> msgs)
   {
     switch (filter.getFilterType())
     {
@@ -650,7 +650,7 @@
           IndexType.ORDERING, IndexType.ORDERING, IndexType.PRESENCE,
           IndexType.APPROXIMATE, null
           };
-      Message[] indexTypeNames = {INFO_CTRL_PANEL_VLV_INDEX_EQUALITY_TYPE.get(),
+      LocalizableMessage[] indexTypeNames = {INFO_CTRL_PANEL_VLV_INDEX_EQUALITY_TYPE.get(),
           INFO_CTRL_PANEL_VLV_INDEX_SUBSTRING_TYPE.get(),
           INFO_CTRL_PANEL_VLV_INDEX_ORDERING_TYPE.get(),
           INFO_CTRL_PANEL_VLV_INDEX_ORDERING_TYPE.get(),
@@ -677,7 +677,7 @@
           }
           else
           {
-            Message type = indexTypeNames[i];
+            LocalizableMessage type = indexTypeNames[i];
             if (type != null)
             {
               msgs.add(INFO_CTRL_PANEL_MUST_DEFINE_INDEX_TYPE.get(
@@ -749,7 +749,7 @@
    * @param checkName whether the name of the VLV index must be checked or not.
    * @return a list containing the error messages found.
    */
-  protected List<Message> checkErrors(boolean checkName)
+  protected List<LocalizableMessage> checkErrors(boolean checkName)
   {
     for (JLabel l : labels)
     {
@@ -758,7 +758,7 @@
 
     BackendDescriptor backend = getBackend();
 
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     if (checkName)
     {
       String n = name.getText();
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 6d16664..d7d635e 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
@@ -60,7 +60,7 @@
 import org.opends.guitools.controlpanel.ui.nodes.DndBrowserNodes;
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.DN;
 import org.opends.server.types.OpenDsException;
 import org.opends.server.util.ServerConstants;
@@ -136,7 +136,7 @@
    */
   public void okClicked()
   {
-    final ArrayList<Message> errors = new ArrayList<Message>();
+    final ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     BackgroundTask<Void> worker = new BackgroundTask<Void>()
     {
       /**
@@ -178,7 +178,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_ADD_TO_GROUP_TITLE.get();
   }
@@ -206,7 +206,7 @@
         INFO_CTRL_PANEL_ADD_TO_GROUP_ENTRIES_LABEL.get());
     add(l, gbc);
     gbc.insets.top = 5;
-    entries = Utilities.createNonEditableTextArea(Message.EMPTY, 6, 40);
+    entries = Utilities.createNonEditableTextArea(LocalizableMessage.EMPTY, 6, 40);
     scrollEntries = Utilities.createScrollPane(entries);
     gbc.weighty = 0.1;
     gbc.fill = GridBagConstraints.BOTH;
@@ -223,7 +223,7 @@
     add(lGroups, gbc);
     gbc.insets.top = 5;
     gbc.gridwidth = 1;
-    groups = Utilities.createTextArea(Message.EMPTY, 8, 40);
+    groups = Utilities.createTextArea(LocalizableMessage.EMPTY, 8, 40);
     JScrollPane scrollGroups = Utilities.createScrollPane(groups);
     gbc.weightx = 1.0;
     gbc.weighty = 1.0;
@@ -361,7 +361,7 @@
     }
   }
 
-  private void updateErrors(List<Message> errors)
+  private void updateErrors(List<LocalizableMessage> errors)
   {
     SwingUtilities.invokeLater(new Runnable()
     {
@@ -427,7 +427,7 @@
     }
   }
 
-  private void handleErrorsAndLaunchTask(ArrayList<Message> errors)
+  private void handleErrorsAndLaunchTask(ArrayList<LocalizableMessage> errors)
   {
     if (errors.size() == 0)
     {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AttributeSyntaxPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AttributeSyntaxPanel.java
index ef4fc35..3f55a61 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AttributeSyntaxPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/AttributeSyntaxPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -45,7 +46,7 @@
 import org.opends.guitools.controlpanel.ui.components.TitlePanel;
 import org.opends.guitools.controlpanel.util.LowerCaseComparator;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.Schema;
@@ -57,8 +58,8 @@
 public class AttributeSyntaxPanel extends SchemaElementPanel
 {
   private static final long serialVersionUID = -2426247742251904863L;
-  private TitlePanel titlePanel = new TitlePanel(Message.EMPTY,
-      Message.EMPTY);
+  private TitlePanel titlePanel = new TitlePanel(LocalizableMessage.EMPTY,
+      LocalizableMessage.EMPTY);
   private JLabel name = Utilities.createDefaultLabel();
   private JLabel oid = Utilities.createDefaultLabel();
   private JLabel description = Utilities.createDefaultLabel();
@@ -77,7 +78,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_ATTRIBUTE_SYNTAX_TITLE.get();
   }
@@ -122,7 +123,7 @@
     gbc.insets.bottom = 0;
     gbc.insets.top = 8;
 
-    Message[] labels = {INFO_CTRL_PANEL_ATTRIBUTE_SYNTAX_NAME.get(),
+    LocalizableMessage[] labels = {INFO_CTRL_PANEL_ATTRIBUTE_SYNTAX_NAME.get(),
         INFO_CTRL_PANEL_ATTRIBUTE_SYNTAX_OID.get(),
         INFO_CTRL_PANEL_ATTRIBUTE_SYNTAX_DESCRIPTION.get()};
     JLabel[] values = {name, oid, description};
@@ -201,7 +202,7 @@
     {
       n = NOT_APPLICABLE.toString();
     }
-    titlePanel.setDetails(Message.raw(n));
+    titlePanel.setDetails(LocalizableMessage.raw(n));
     name.setText(n);
     oid.setText(syntax.getOID());
 
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackendIndexesPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackendIndexesPanel.java
index df056a0..4f10720 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackendIndexesPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackendIndexesPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -33,7 +34,7 @@
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.IndexTableModel;
 import org.opends.messages.AdminToolMessages;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Panel displaying a table containing the indexes of a backend.
@@ -54,7 +55,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return AdminToolMessages.INFO_CTRL_PANEL_BACKEND_INDEXES_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackendVLVIndexesPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackendVLVIndexesPanel.java
index ed2345e..0d6e725 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackendVLVIndexesPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackendVLVIndexesPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -33,7 +34,7 @@
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.VLVIndexTableModel;
 import org.opends.messages.AdminToolMessages;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Panel displaying a table containing the VLV indexes of a backend.
@@ -55,7 +56,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return AdminToolMessages.INFO_CTRL_PANEL_BACKEND_VLV_INDEXES_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java
index 4c97483..aceca3f 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackupListPanel.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;
@@ -67,7 +67,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.BackupTableCellRenderer;
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.BackupDirectory;
 import org.opends.server.types.BackupInfo;
 import org.opends.server.types.OpenDsException;
@@ -91,13 +91,13 @@
    * The refreshing list message, displayed when the list of backups is
    * refreshed.
    */
-  protected final Message REFRESHING_LIST =
+  protected final LocalizableMessage REFRESHING_LIST =
     INFO_CTRL_PANEL_REFRESHING_LIST_SUMMARY.get();
 
   /**
    * The message informing that no backups where found.
    */
-  protected final Message NO_BACKUPS_FOUND =
+  protected final LocalizableMessage NO_BACKUPS_FOUND =
     INFO_CTRL_PANEL_NO_BACKUPS_FOUND.get();
 
   /**
@@ -457,7 +457,7 @@
           if (t instanceof OpenDsException)
           {
             OpenDsException e = (OpenDsException)t;
-            if (e.getMessageObject().getDescriptor().equals(
+            if (StaticUtils.hasDescriptor(e.getMessageObject(),
                 ERR_BACKUPDIRECTORY_NO_DESCRIPTOR_FILE))
             {
               displayError = false;
@@ -465,7 +465,7 @@
           }
           if (displayError)
           {
-            Message details = ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY.get(
+            LocalizableMessage details = ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY.get(
               parentDirectory.getText(), StaticUtils.getExceptionMessage(t));
 
             updateErrorPane(errorPane,
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackupPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackupPanel.java
index 4d3eede..3b7c66d 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackupPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BackupPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -66,7 +67,7 @@
 import org.opends.guitools.controlpanel.ui.components.ScheduleSummaryPanel;
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.BackUpDB;
 import org.opends.server.types.BackupDirectory;
 import org.opends.server.types.BackupInfo;
@@ -119,7 +120,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_BACKUP_TITLE.get();
   }
@@ -364,7 +365,7 @@
     setPrimaryValid(lBackupOptions);
     backupIDInitialized = false;
 
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 
     if (!allBackends.isSelected())
     {
@@ -554,7 +555,7 @@
           }
           if (errors.isEmpty())
           {
-            Message initMsg;
+            LocalizableMessage initMsg;
             if (allBackends.isSelected())
             {
               initMsg = INFO_CTRL_PANEL_RUN_BACKUP_ALL_BACKENDS.get();
@@ -699,7 +700,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       return INFO_CTRL_PANEL_BACKUP_TASK_DESCRIPTION.get(
       Utilities.getStringFromCollection(backendSet, ", "), dir);
@@ -709,7 +710,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
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 ae446ba..6e1258d 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
@@ -37,7 +37,7 @@
 
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.DN;
 import org.opends.server.types.OpenDsException;
 
@@ -65,7 +65,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_OTHER_BASE_DN_TITLE.get();
   }
@@ -125,7 +125,7 @@
   public void okClicked()
   {
     setPrimaryValid(dnLabel);
-    LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 
     if ("".equals(dn.getText().trim()))
     {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BinaryAttributeEditorPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BinaryAttributeEditorPanel.java
index ca127c6..c929e50 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BinaryAttributeEditorPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BinaryAttributeEditorPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -53,7 +54,7 @@
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.Schema;
 
 /**
@@ -264,7 +265,7 @@
   private void refresh(final boolean closeAndUpdateValue,
       final boolean updateImage)
   {
-    final ArrayList<Message> errors = new ArrayList<Message>();
+    final ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
 
     setPrimaryValid(useFile);
     setPrimaryValid(useBase64);
@@ -449,7 +450,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_EDIT_BINARY_ATTRIBUTE_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BinaryValuePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BinaryValuePanel.java
index c49eabc..c46c7c7 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BinaryValuePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BinaryValuePanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -40,7 +41,7 @@
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.Schema;
 
 /**
@@ -176,7 +177,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_VIEW_BINARY_ATTRIBUTE_TITLE.get();
   }
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 05ddcbf..bafaf31 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
@@ -86,7 +86,7 @@
 import org.opends.guitools.controlpanel.ui.nodes.DndBrowserNodes;
 import org.opends.guitools.controlpanel.util.LDAPEntryReader;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.DN;
 import org.opends.server.types.ObjectClass;
@@ -174,7 +174,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_MANAGE_ENTRIES_TITLE.get();
   }
@@ -1067,7 +1067,7 @@
 
   private void deleteClicked()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     TreePath[] paths = treePane.getTree().getSelectionPaths();
 
     if ((paths != null) && (paths.length > 0))
@@ -1262,7 +1262,7 @@
           INFO_CTRL_PANEL_VIEW_MENU.get(),
           INFO_CTRL_PANEL_VIEW_MENU_DESCRIPTION.get());
       menu.setMnemonic(KeyEvent.VK_V);
-      Message[] labels = {
+      LocalizableMessage[] labels = {
           INFO_CTRL_PANEL_SIMPLIFIED_VIEW_MENU.get(),
           INFO_CTRL_PANEL_ATTRIBUTE_VIEW_MENU.get(),
           INFO_CTRL_PANEL_LDIF_VIEW_MENU.get()
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java
index 0cadf2c..c26f5b4 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseGeneralMonitoringPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.ui;
 
@@ -58,8 +59,8 @@
 import org.opends.guitools.controlpanel.ui.renderer.TreeCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.guitools.controlpanel.util.ViewPositions;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 /**
  * The pane that is displayed when the user clicks on 'General Monitoring'.
@@ -82,9 +83,9 @@
 
   private boolean ignoreSelectionEvents;
 
-  private Message NO_ELEMENT_SELECTED =
+  private LocalizableMessage NO_ELEMENT_SELECTED =
     INFO_CTRL_PANEL_GENERAL_MONITORING_NO_ITEM_SELECTED.get();
-  private Message MULTIPLE_ITEMS_SELECTED =
+  private LocalizableMessage MULTIPLE_ITEMS_SELECTED =
     INFO_CTRL_PANEL_MULTIPLE_ITEMS_SELECTED_LABEL.get();
 
   /**
@@ -207,7 +208,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_GENERAL_MONITORING_TITLE.get();
   }
@@ -358,14 +359,14 @@
     }
 
     boolean displayErrorPane = false;
-    Message errorTitle = Message.EMPTY;
-    Message errorDetails = Message.EMPTY;
+    LocalizableMessage errorTitle = LocalizableMessage.EMPTY;
+    LocalizableMessage errorDetails = LocalizableMessage.EMPTY;
     ServerDescriptor.ServerStatus status = server.getStatus();
     if (status == ServerDescriptor.ServerStatus.STARTED)
     {
       if (!server.isAuthenticated())
       {
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         mb.append(
    INFO_CTRL_PANEL_AUTH_REQUIRED_TO_BROWSE_MONITORING_SUMMARY.
    get());
@@ -378,7 +379,7 @@
     }
     else if (status == ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(
           server.getHostname()));
       mb.append("<br><br>"+getAuthenticateHTML());
@@ -389,7 +390,7 @@
     else
     {
       errorTitle = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(
           INFO_CTRL_PANEL_SERVER_MUST_RUN_TO_BROWSE_MONITORING_SUMMARY.
           get());
@@ -399,8 +400,8 @@
       displayErrorPane = true;
     }
     final boolean fDisplayErrorPane = displayErrorPane;
-    final Message fErrorTitle = errorTitle;
-    final Message fErrorDetails = errorDetails;
+    final LocalizableMessage fErrorTitle = errorTitle;
+    final LocalizableMessage fErrorDetails = errorDetails;
     SwingUtilities.invokeLater(new Runnable()
     {
       /**
@@ -454,7 +455,7 @@
             true);
     }
 
-    Message[] messages = getNodeMessages();
+    LocalizableMessage[] messages = getNodeMessages();
     NodeType[] identifiers = getNodeTypes();
     for (int i=0; i < messages.length; i++)
     {
@@ -613,7 +614,7 @@
         NodeType.ENTRY_CACHES,
         NodeType.DB_ENVIRONMENT
     };
-    Message[] ocPaths = {
+    LocalizableMessage[] ocPaths = {
         INFO_CTRL_PANEL_GENERAL_MONITORING_ROOT_TREE_NODE.get(),
         INFO_CTRL_PANEL_SYSTEM_INFORMATION_TREE_NODE.get(),
         INFO_CTRL_PANEL_JVM_MEMORY_USAGE_TREE_NODE.get(),
@@ -682,9 +683,9 @@
    * Returns the labels of the nodes to be displayed.
    * @return the labels of the nodes to be displayed.
    */
-  protected Message[] getNodeMessages()
+  protected LocalizableMessage[] getNodeMessages()
   {
-    return new Message[] {
+    return new LocalizableMessage[] {
       INFO_CTRL_PANEL_SYSTEM_INFORMATION.get(),
       INFO_CTRL_PANEL_JAVA_INFORMATION.get(),
       INFO_CTRL_PANEL_WORK_QUEUE.get(),
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseIndexPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseIndexPanel.java
index 84032d2..6bd62fe 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseIndexPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseIndexPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -81,7 +82,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.TreeCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.guitools.controlpanel.util.ViewPositions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The pane that is displayed when the user clicks on 'Browse Indexes'.
@@ -271,7 +272,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_MANAGE_INDEXES_TITLE.get();
   }
@@ -886,7 +887,7 @@
 
   private void deleteClicked()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     TreePath[] paths = treePane.getTree().getSelectionPaths();
     ArrayList<AbstractIndexDescriptor> indexesToDelete =
       new ArrayList<AbstractIndexDescriptor>();
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseSchemaPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseSchemaPanel.java
index dec4f7a..098ef23 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseSchemaPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/BrowseSchemaPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -85,8 +86,8 @@
 import org.opends.guitools.controlpanel.util.LowerCaseComparator;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.guitools.controlpanel.util.ViewPositions;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.api.MatchingRule;
 import org.opends.server.types.AttributeType;
@@ -129,13 +130,13 @@
 
   private CommonSchemaElements lastCreatedElement;
 
-  private final Message NAME = INFO_CTRL_PANEL_SCHEMA_ELEMENT_NAME.get();
-  private final Message TYPE = INFO_CTRL_PANEL_SCHEMA_ELEMENT_TYPE.get();
-  private final Message PARENT_CLASS = INFO_CTRL_PANEL_PARENT_CLASS.get();
-  private final Message CHILD_CLASS = INFO_CTRL_PANEL_CHILD_CLASS.get();
-  private final Message REQUIRED_ATTRIBUTES =
+  private final LocalizableMessage NAME = INFO_CTRL_PANEL_SCHEMA_ELEMENT_NAME.get();
+  private final LocalizableMessage TYPE = INFO_CTRL_PANEL_SCHEMA_ELEMENT_TYPE.get();
+  private final LocalizableMessage PARENT_CLASS = INFO_CTRL_PANEL_PARENT_CLASS.get();
+  private final LocalizableMessage CHILD_CLASS = INFO_CTRL_PANEL_CHILD_CLASS.get();
+  private final LocalizableMessage REQUIRED_ATTRIBUTES =
     INFO_CTRL_PANEL_REQUIRED_ATTRIBUTES.get();
-  private final Message OPTIONAL_ATTRIBUTES =
+  private final LocalizableMessage OPTIONAL_ATTRIBUTES =
     INFO_CTRL_PANEL_OPTIONAL_ATTRIBUTES.get();
 
   private CategoryTreeNode attributes =
@@ -181,11 +182,11 @@
 
   private boolean ignoreSelectionEvents;
 
-  private Message NO_SCHEMA_ITEM_SELECTED =
+  private LocalizableMessage NO_SCHEMA_ITEM_SELECTED =
     INFO_CTRL_PANEL_NO_SCHEMA_ITEM_SELECTED.get();
-  private Message CATEGORY_ITEM_SELECTED =
+  private LocalizableMessage CATEGORY_ITEM_SELECTED =
     INFO_CTRL_PANEL_CATEGORY_ITEM_SELECTED.get();
-  private Message MULTIPLE_ITEMS_SELECTED =
+  private LocalizableMessage MULTIPLE_ITEMS_SELECTED =
     INFO_CTRL_PANEL_MULTIPLE_SCHEMA_ITEMS_SELECTED.get();
 
   /**
@@ -311,7 +312,7 @@
 
     filterAttribute = Utilities.createComboBox();
     filterAttribute.setModel(
-        new DefaultComboBoxModel(new Message[]{
+        new DefaultComboBoxModel(new LocalizableMessage[]{
             NAME,
             TYPE,
             PARENT_CLASS,
@@ -436,7 +437,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_MANAGE_SCHEMA_TITLE.get();
   }
@@ -1253,7 +1254,7 @@
 
   private void deleteClicked()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     TreePath[] paths = treePane.getTree().getSelectionPaths();
     ArrayList<ObjectClass> ocsToDelete = new ArrayList<ObjectClass>();
     ArrayList<AttributeType> attrsToDelete = new ArrayList<AttributeType>();
@@ -1280,7 +1281,7 @@
     }
     if (errors.isEmpty())
     {
-      Message confirmationMessage =
+      LocalizableMessage confirmationMessage =
         getConfirmationMessage(ocsToDelete, attrsToDelete, schema);
 
       LinkedHashSet<AttributeType> orderedAttributes =
@@ -1288,7 +1289,7 @@
       LinkedHashSet<ObjectClass> orderedObjectClasses =
         getOrderedObjectClassesToDelete(ocsToDelete);
 
-      Message title;
+      LocalizableMessage title;
       if (orderedAttributes.isEmpty())
       {
         title = INFO_CTRL_PANEL_DELETE_OBJECTCLASSES_TITLE.get();
@@ -1841,7 +1842,7 @@
     return new LinkedHashSet<AttributeType>(lOrderedAttributes);
   }
 
-  private Message getConfirmationMessage(
+  private LocalizableMessage getConfirmationMessage(
       Collection<ObjectClass> ocsToDelete,
       Collection<AttributeType> attrsToDelete,
       Schema schema)
@@ -1891,7 +1892,7 @@
       }
     }
 
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     if (!childClasses.isEmpty())
     {
       TreeSet<String> childNames = new TreeSet<String>();
@@ -1957,7 +1958,7 @@
     {
       allNames.add(attrToDelete.getNameOrOID());
     }
-    Message confirmationMessage =
+    LocalizableMessage confirmationMessage =
       INFO_CTRL_PANEL_CONFIRMATION_DELETE_SCHEMA_ELEMENTS_MSG.get(
           Utilities.getStringFromCollection(allNames, ", "));
     mb.append(confirmationMessage);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfigurationAttributePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfigurationAttributePanel.java
index c6e339e..55f33d0 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfigurationAttributePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfigurationAttributePanel.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
 
 import static org.opends.messages.AdminToolMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The panel that displays a configuration attribute definition.
@@ -40,7 +41,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_CONFIGURATION_ATTRIBUTE_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfigurationObjectClassPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfigurationObjectClassPanel.java
index 7d087d6..6079a40 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfigurationObjectClassPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfigurationObjectClassPanel.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
 
 import static org.opends.messages.AdminToolMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The panel that displays a configuration objectclass definition.
@@ -40,7 +41,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_CONFIGURATION_OBJECTCLASS_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfirmInitializeAndImportDialog.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfirmInitializeAndImportDialog.java
index ad9f6cf..876dd7d 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfirmInitializeAndImportDialog.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConfirmInitializeAndImportDialog.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -43,7 +44,7 @@
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Dialog used to inform the user that there are unsaved changes in a panel.
@@ -95,7 +96,7 @@
    * @param title the title of the message.
    * @param details the details of the message.
    */
-  public void setMessage(Message title, Message details)
+  public void setMessage(LocalizableMessage title, LocalizableMessage details)
   {
     panel.updateConfirmationPane(panel.errorPane, title,
         ColorAndFontConstants.errorTitleFont, details,
@@ -289,7 +290,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTitle()
+    public LocalizableMessage getTitle()
     {
       return INFO_CTRL_PANEL_CONFIRM_INITIALIZE_TITLE.get();
     }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConnectionHandlerMonitoringPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConnectionHandlerMonitoringPanel.java
index 9ac953a..35b0999 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConnectionHandlerMonitoringPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ConnectionHandlerMonitoringPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.ui;
 
@@ -78,8 +79,8 @@
  NoLeftInsetCategoryComboBoxRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.guitools.controlpanel.util.ViewPositions;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 /**
  * Class that displays the monitoring information of connection handlers.
@@ -134,7 +135,7 @@
     allowedChOperations.add(BasicMonitoringAttributes.UNBIND_REQUESTS);
   }
 
-  private Message ALL_CONNECTION_HANDLERS =
+  private LocalizableMessage ALL_CONNECTION_HANDLERS =
     INFO_CTRL_PANEL_ALL_CONNECTION_HANDLERS.get();
 
   /**
@@ -257,7 +258,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_CONNECTION_HANDLER_MONITORING_TITLE.get();
   }
@@ -332,14 +333,14 @@
         (DefaultComboBoxModel)connectionHandlers.getModel());
 
     boolean displayErrorPane = false;
-    Message errorTitle = Message.EMPTY;
-    Message errorDetails = Message.EMPTY;
+    LocalizableMessage errorTitle = LocalizableMessage.EMPTY;
+    LocalizableMessage errorDetails = LocalizableMessage.EMPTY;
     ServerDescriptor.ServerStatus status = server.getStatus();
     if (status == ServerDescriptor.ServerStatus.STARTED)
     {
       if (!server.isAuthenticated())
       {
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         mb.append(
    INFO_CTRL_PANEL_AUTH_REQUIRED_TO_SEE_TRAFFIC_MONITORING_SUMMARY.
    get());
@@ -352,7 +353,7 @@
     }
     else if (status == ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(
       server.getHostname()));
       mb.append("<br><br>"+getAuthenticateHTML());
@@ -363,7 +364,7 @@
     else
     {
       errorTitle = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(
           INFO_CTRL_PANEL_SERVER_MUST_RUN_TO_SEE_TRAFFIC_MONITORING_SUMMARY.
           get());
@@ -373,8 +374,8 @@
       displayErrorPane = true;
     }
     final boolean fDisplayErrorPane = displayErrorPane;
-    final Message fErrorTitle = errorTitle;
-    final Message fErrorDetails = errorDetails;
+    final LocalizableMessage fErrorTitle = errorTitle;
+    final LocalizableMessage fErrorDetails = errorDetails;
     SwingUtilities.invokeLater(new Runnable()
     {
       /**
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java
index 99e8196..2950534 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ControlCenterMainPane.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -47,7 +48,7 @@
 import org.opends.guitools.controlpanel.event.ConfigChangeListener;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The main panel of the control panel.  It contains a split pane.  On the left
@@ -60,7 +61,7 @@
   private static final long serialVersionUID = -8939025523701408656L;
   private StatusPanel statusPane;
   private JLabel lAuthenticatedAs =
-    Utilities.createInlineHelpLabel(Message.EMPTY);
+    Utilities.createInlineHelpLabel(LocalizableMessage.EMPTY);
 
   /**
    * Constructor.
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java
index 6966b55..4c2c4cd 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/CustomAttributePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/CustomAttributePanel.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;
@@ -84,8 +84,8 @@
  SchemaElementComboBoxCellRenderer;
 import org.opends.guitools.controlpanel.util.LowerCaseComparator;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.ApproximateMatchingRule;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.api.EqualityMatchingRule;
@@ -112,8 +112,8 @@
   private String attrName;
   private ScrollPaneBorderListener scrollListener;
 
-  private TitlePanel titlePanel = new TitlePanel(Message.EMPTY,
-      Message.EMPTY);
+  private TitlePanel titlePanel = new TitlePanel(LocalizableMessage.EMPTY,
+      LocalizableMessage.EMPTY);
   private JLabel lName = Utilities.createPrimaryLabel(
       INFO_CTRL_PANEL_ATTRIBUTE_NAME_LABEL.get());
   private JLabel lSuperior = Utilities.createPrimaryLabel(
@@ -173,8 +173,8 @@
 
   private Set<String> lastAliases = new LinkedHashSet<String>();
 
-  private Message NO_PARENT = INFO_CTRL_PANEL_NO_PARENT_FOR_ATTRIBUTE.get();
-  private Message NO_MATCHING_RULE =
+  private LocalizableMessage NO_PARENT = INFO_CTRL_PANEL_NO_PARENT_FOR_ATTRIBUTE.get();
+  private LocalizableMessage NO_MATCHING_RULE =
     INFO_CTRL_PANEL_NO_MATCHING_RULE_FOR_ATTRIBUTE.get();
 
   private Schema schema;
@@ -194,7 +194,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_CUSTOM_ATTRIBUTE_TITLE.get();
   }
@@ -255,7 +255,7 @@
        */
       public void actionPerformed(ActionEvent ev)
       {
-        ArrayList<Message> errors = new ArrayList<Message>();
+        ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
         saveChanges(false, errors);
       }
     });
@@ -291,7 +291,7 @@
 
     JComboBox[] comboBoxes = {parent, syntax, approximate,
         equality, ordering, substring};
-    Message[] defaultValues = {NO_PARENT, Message.EMPTY, NO_MATCHING_RULE,
+    LocalizableMessage[] defaultValues = {NO_PARENT, LocalizableMessage.EMPTY, NO_MATCHING_RULE,
         NO_MATCHING_RULE, NO_MATCHING_RULE, NO_MATCHING_RULE
     };
     SchemaElementComboBoxCellRenderer renderer = new
@@ -403,7 +403,7 @@
     };
     syntax.addItemListener(itemListener);
 
-    Message[] msgs = new Message[] {
+    LocalizableMessage[] msgs = new LocalizableMessage[] {
         INFO_CTRL_PANEL_REQUIRED_BY_LABEL.get(),
         INFO_CTRL_PANEL_ALLOWED_BY_LABEL.get()
         };
@@ -555,7 +555,7 @@
     result = unsavedChangesDlg.getResult();
     if (result == UnsavedChangesDialog.Result.SAVE)
     {
-      ArrayList<Message> errors = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
       saveChanges(true, errors);
       if (!errors.isEmpty())
       {
@@ -586,7 +586,7 @@
     {
       n = "";
     }
-    titlePanel.setDetails(Message.raw(n));
+    titlePanel.setDetails(LocalizableMessage.raw(n));
     name.setText(n);
 
     oid.setText(attr.getOID());
@@ -876,7 +876,7 @@
 
   private void deleteAttribute()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     Schema schema = getInfo().getServerDescriptor().getSchema();
     ProgressDialog dlg = new ProgressDialog(
         Utilities.createFrame(),
@@ -923,7 +923,7 @@
     }
     if (errors.isEmpty())
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
 
       if (!childAttributes.isEmpty())
       {
@@ -939,7 +939,7 @@
             Utilities.getStringFromCollection(dependentClasses, ", ")));
         mb.append("<br>");
       }
-      Message confirmationMessage =
+      LocalizableMessage confirmationMessage =
         INFO_CTRL_PANEL_CONFIRMATION_DELETE_ATTRIBUTE_DETAILS.get(
             attribute.getNameOrOID());
       mb.append(confirmationMessage);
@@ -964,7 +964,7 @@
     }
   }
 
-  private void saveChanges(boolean modal, ArrayList<Message> errors)
+  private void saveChanges(boolean modal, ArrayList<LocalizableMessage> errors)
   {
     // Check if the aliases or the name have changed
     for (JLabel label : labels)
@@ -972,7 +972,7 @@
       setPrimaryValid(label);
     }
     String n = getAttributeName();
-    MessageBuilder err = new MessageBuilder();
+    LocalizableMessageBuilder err = new LocalizableMessageBuilder();
     if (n.length() == 0)
     {
       errors.add(ERR_CTRL_PANEL_ATTRIBUTE_NAME_REQUIRED.get());
@@ -984,11 +984,11 @@
       {
         errors.add(ERR_CTRL_PANEL_INVALID_ATTRIBUTE_NAME.get(err.toString()));
         setPrimaryInvalid(lName);
-        err = new MessageBuilder();
+        err = new LocalizableMessageBuilder();
       }
       else
       {
-        Message elementType = NewAttributePanel.getSchemaElementType(n, schema);
+        LocalizableMessage elementType = NewAttributePanel.getSchemaElementType(n, schema);
         if (elementType != null)
         {
           errors.add(ERR_CTRL_PANEL_ATTRIBUTE_NAME_ALREADY_IN_USE.get(n,
@@ -1004,11 +1004,11 @@
       {
         errors.add(ERR_CTRL_PANEL_OID_NOT_VALID.get(err.toString()));
         setPrimaryInvalid(lOID);
-        err = new MessageBuilder();
+        err = new LocalizableMessageBuilder();
       }
       else
       {
-        Message elementType = NewAttributePanel.getSchemaElementType(n, schema);
+        LocalizableMessage elementType = NewAttributePanel.getSchemaElementType(n, schema);
         if (elementType != null)
         {
           errors.add(ERR_CTRL_PANEL_OID_ALREADY_IN_USE.get(n,
@@ -1043,7 +1043,7 @@
           }
           if (notPreviouslyDefined)
           {
-            Message elementType =
+            LocalizableMessage elementType =
               NewAttributePanel.getSchemaElementType(alias, schema);
             if (elementType != null)
             {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java
index 76979ec..a6f04a8 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/CustomObjectClassPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -85,8 +86,8 @@
 import org.opends.guitools.controlpanel.ui.renderer.
  SchemaElementComboBoxCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.ObjectClass;
 import org.opends.server.types.ObjectClassType;
@@ -107,7 +108,7 @@
   private String ocName;
   private ScrollPaneBorderListener scrollListener;
 
-  private TitlePanel titlePanel = new TitlePanel(Message.EMPTY, Message.EMPTY);
+  private TitlePanel titlePanel = new TitlePanel(LocalizableMessage.EMPTY, LocalizableMessage.EMPTY);
   private JLabel lName = Utilities.createPrimaryLabel(
       INFO_CTRL_PANEL_OBJECTCLASS_NAME_LABEL.get());
   private JLabel lSuperior = Utilities.createPrimaryLabel(
@@ -168,7 +169,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_CUSTOM_OBJECTCLASS_TITLE.get();
   }
@@ -229,7 +230,7 @@
        */
       public void actionPerformed(ActionEvent ev)
       {
-        ArrayList<Message> errors = new ArrayList<Message>();
+        ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
         saveChanges(false, errors);
       }
     });
@@ -490,7 +491,7 @@
     {
       n = NOT_APPLICABLE.toString();
     }
-    titlePanel.setDetails(Message.raw(n));
+    titlePanel.setDetails(LocalizableMessage.raw(n));
     name.setText(n);
 
     SortableListModel<AttributeType> modelRequired =
@@ -662,7 +663,7 @@
     result = unsavedChangesDlg.getResult();
     if (result == UnsavedChangesDialog.Result.SAVE)
     {
-      ArrayList<Message> errors = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
       saveChanges(true, errors);
       if (!errors.isEmpty())
       {
@@ -690,7 +691,7 @@
 
   private void deleteObjectclass()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     ProgressDialog dlg = new ProgressDialog(
         Utilities.createFrame(),
         Utilities.getParentDialog(this),
@@ -727,7 +728,7 @@
     }
     if (errors.size() == 0)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
 
       if (!childClasses.isEmpty())
       {
@@ -736,7 +737,7 @@
             Utilities.getStringFromCollection(childClasses, ", ")));
         mb.append("<br>");
       }
-      Message confirmationMessage =
+      LocalizableMessage confirmationMessage =
         INFO_CTRL_PANEL_CONFIRMATION_DELETE_OBJECTCLASS_DETAILS.get(
             ocName);
       mb.append(confirmationMessage);
@@ -761,14 +762,14 @@
     }
   }
 
-  private void saveChanges(boolean modal, ArrayList<Message> errors)
+  private void saveChanges(boolean modal, ArrayList<LocalizableMessage> errors)
   {
     for (JLabel label : labels)
     {
       setPrimaryValid(label);
     }
     String n = getObjectClassName();
-    MessageBuilder err = new MessageBuilder();
+    LocalizableMessageBuilder err = new LocalizableMessageBuilder();
     if (n.length() == 0)
     {
       errors.add(ERR_CTRL_PANEL_OBJECTCLASS_NAME_REQUIRED.get());
@@ -780,11 +781,11 @@
       {
         errors.add(ERR_CTRL_PANEL_INVALID_OBJECTCLASS_NAME.get(err.toString()));
         setPrimaryInvalid(lName);
-        err = new MessageBuilder();
+        err = new LocalizableMessageBuilder();
       }
       else
       {
-        Message elementType = NewAttributePanel.getSchemaElementType(n, schema);
+        LocalizableMessage elementType = NewAttributePanel.getSchemaElementType(n, schema);
         if (elementType != null)
         {
           errors.add(ERR_CTRL_PANEL_OBJECTCLASS_NAME_ALREADY_IN_USE.get(n,
@@ -800,11 +801,11 @@
       {
         errors.add(ERR_CTRL_PANEL_OID_NOT_VALID.get(err.toString()));
         setPrimaryInvalid(lOID);
-        err = new MessageBuilder();
+        err = new LocalizableMessageBuilder();
       }
       else
       {
-        Message elementType = NewAttributePanel.getSchemaElementType(n, schema);
+        LocalizableMessage elementType = NewAttributePanel.getSchemaElementType(n, schema);
         if (elementType != null)
         {
           errors.add(ERR_CTRL_PANEL_OID_ALREADY_IN_USE.get(n,
@@ -839,7 +840,7 @@
           }
           if (notPreviouslyDefined)
           {
-            Message elementType =
+            LocalizableMessage elementType =
               NewAttributePanel.getSchemaElementType(alias, schema);
             if (elementType != null)
             {
@@ -901,7 +902,7 @@
 
 
   private void validateSuperiority(ObjectClass superior,
-          ArrayList<Message> errors)
+          ArrayList<LocalizableMessage> errors)
   {
     if(superior.getNameOrOID().equalsIgnoreCase(objectClass.getNameOrOID()))
     {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBackendPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBackendPanel.java
index 90bddd7..2ba3eaf 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBackendPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBackendPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -42,8 +43,8 @@
 import org.opends.guitools.controlpanel.task.DeleteBaseDNAndBackendTask;
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 /**
  * The panel displayed when the user clicks on 'Delete Backend...' in the
@@ -57,7 +58,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_DELETE_BACKEND_TITLE.get();
   }
@@ -66,7 +67,7 @@
    * Returns the no backend found label.
    * @return the no backend found label.
    */
-  protected Message getNoElementsFoundLabel()
+  protected LocalizableMessage getNoElementsFoundLabel()
   {
     return INFO_CTRL_PANEL_NO_BACKENDS_FOUND_LABEL.get();
   }
@@ -75,7 +76,7 @@
    * Returns the list label.
    * @return the list label.
    */
-  protected Message getListLabel()
+  protected LocalizableMessage getListLabel()
   {
     return INFO_CTRL_PANEL_SELECT_BACKENDS_TO_DELETE.get();
   }
@@ -106,7 +107,7 @@
    */
   public void okClicked()
   {
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
     ProgressDialog progressDialog = new ProgressDialog(
         Utilities.createFrame(),
         Utilities.getParentDialog(this), getTitle(), getInfo());
@@ -136,7 +137,7 @@
     }
     if (errors.isEmpty())
     {
-      Message confirmationMessage = getConfirmationMessage(backendsToDelete);
+      LocalizableMessage confirmationMessage = getConfirmationMessage(backendsToDelete);
       if (displayConfirmationDialog(
           INFO_CTRL_PANEL_CONFIRMATION_REQUIRED_SUMMARY.get(),
           confirmationMessage))
@@ -159,10 +160,10 @@
     }
   }
 
-  private Message getConfirmationMessage(
+  private LocalizableMessage getConfirmationMessage(
       Collection<BackendDescriptor> backendsToDelete)
   {
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     mb.append(INFO_CTRL_PANEL_CONFIRMATION_DELETE_BACKENDS_DETAILS.get());
     for (BackendDescriptor backend : backendsToDelete)
     {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBaseDNPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBaseDNPanel.java
index 83cef6b..c40d3a0 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBaseDNPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/DeleteBaseDNPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -61,8 +62,8 @@
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.ui.renderer.CustomListCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.DN;
 
 /**
@@ -102,7 +103,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_DELETE_BASE_DN_TITLE.get();
   }
@@ -128,7 +129,7 @@
    * Returns the no backend found label.
    * @return the no backend found label.
    */
-  protected Message getNoElementsFoundLabel()
+  protected LocalizableMessage getNoElementsFoundLabel()
   {
     return INFO_CTRL_PANEL_NO_BASE_DNS_FOUND_LABEL.get();
   }
@@ -137,7 +138,7 @@
    * Returns the list label.
    * @return the list label.
    */
-  protected Message getListLabel()
+  protected LocalizableMessage getListLabel()
   {
     return INFO_CTRL_PANEL_SELECT_BASE_DNS_TO_DELETE.get();
   }
@@ -373,7 +374,7 @@
    */
   public void okClicked()
   {
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
     ProgressDialog progressDialog = new ProgressDialog(
         Utilities.createFrame(),
         Utilities.getParentDialog(this), getTitle(), getInfo());
@@ -412,7 +413,7 @@
     }
     if (errors.isEmpty())
     {
-      Message confirmationMessage = getConfirmationMessage(baseDNsToDelete);
+      LocalizableMessage confirmationMessage = getConfirmationMessage(baseDNsToDelete);
       if (displayConfirmationDialog(
           INFO_CTRL_PANEL_CONFIRMATION_REQUIRED_SUMMARY.get(),
           confirmationMessage))
@@ -435,10 +436,10 @@
     }
   }
 
-  private Message getConfirmationMessage(
+  private LocalizableMessage getConfirmationMessage(
       Collection<BaseDNDescriptor> baseDNsToDelete)
   {
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     Map<String, Set<BaseDNDescriptor>> hmBackends =
       new HashMap<String, Set<BaseDNDescriptor>>();
     for (BaseDNDescriptor baseDN : baseDNsToDelete)
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 5491b5b..2c5d195 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
@@ -51,7 +51,7 @@
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.LDAPEntryReader;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
@@ -169,7 +169,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getProgressDialogTitle()
+  protected LocalizableMessage getProgressDialogTitle()
   {
     return INFO_CTRL_PANEL_DUPLICATE_ENTRY_TITLE.get();
   }
@@ -177,7 +177,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_DUPLICATE_ENTRY_TITLE.get();
   }
@@ -333,7 +333,7 @@
   /**
    * {@inheritDoc}
    */
-  protected void checkSyntax(ArrayList<Message> errors)
+  protected void checkSyntax(ArrayList<LocalizableMessage> errors)
   {
     int origSize = errors.size();
     String name = this.name.getText().trim();
@@ -522,8 +522,8 @@
       {
         if (throwable != null)
         {
-          Message title = INFO_CTRL_PANEL_ERROR_SEARCHING_ENTRY_TITLE.get();
-          Message details =
+          LocalizableMessage title = INFO_CTRL_PANEL_ERROR_SEARCHING_ENTRY_TITLE.get();
+          LocalizableMessage details =
             ERR_CTRL_PANEL_ERROR_SEARCHING_ENTRY.get(node.getDN(),
                 throwable.toString());
           displayErrorMessage(title, details);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ErrorPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ErrorPanel.java
index f64cab2..8d1f87d 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ErrorPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ErrorPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -32,8 +33,8 @@
 
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 /**
  * Class used to display an collection of error messages.
@@ -42,13 +43,13 @@
 public class ErrorPanel extends StatusGenericPanel
 {
   private static final long serialVersionUID = -4494826284037288552L;
-  private Message title;
+  private LocalizableMessage title;
   /**
    * Constructor.
    * @param title the title to be displayed in the dialog.
    * @param errors the collection of errors to be displayed.
    */
-  public ErrorPanel(Message title, Collection<Message> errors)
+  public ErrorPanel(LocalizableMessage title, Collection<LocalizableMessage> errors)
   {
     super();
     this.title = title;
@@ -58,20 +59,20 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return title;
   }
 
-  private void createLayout(Collection<Message> errors)
+  private void createLayout(Collection<LocalizableMessage> errors)
   {
     GridBagConstraints gbc = new GridBagConstraints();
     addErrorPane(gbc);
 
     errorPane.setVisible(true);
 
-    MessageBuilder mb = new MessageBuilder();
-    for (Message error : errors)
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
+    for (LocalizableMessage error : errors)
     {
       if (mb.length() > 0)
       {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java
index 55f3420..284eaa4 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ErrorSearchingEntryPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -38,8 +39,8 @@
 import org.opends.guitools.controlpanel.browser.BasicNodeError;
 import org.opends.guitools.controlpanel.browser.ReferralLimitExceededException;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.types.LDAPURL;
 import org.opends.server.types.OpenDsException;
@@ -91,7 +92,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_ERROR_SEARCHING_ENTRY_TITLE.get();
   }
@@ -111,8 +112,8 @@
    */
   public void setError(String dn, Throwable t)
   {
-    Message title = INFO_CTRL_PANEL_ERROR_SEARCHING_ENTRY_TITLE.get();
-    Message details;
+    LocalizableMessage title = INFO_CTRL_PANEL_ERROR_SEARCHING_ENTRY_TITLE.get();
+    LocalizableMessage details;
     if (t instanceof OpenDsException)
     {
       details = ERR_CTRL_PANEL_ERROR_SEARCHING_ENTRY.get(dn,
@@ -136,8 +137,8 @@
   public void setReferralError(String dn, String[] referrals,
       BasicNodeError error)
   {
-    Message title = INFO_CTRL_PANEL_ERROR_RESOLVING_REFERRAL_TITLE.get();
-    MessageBuilder details = new MessageBuilder();
+    LocalizableMessage title = INFO_CTRL_PANEL_ERROR_RESOLVING_REFERRAL_TITLE.get();
+    LocalizableMessageBuilder details = new LocalizableMessageBuilder();
     StringBuilder sb = new StringBuilder();
     for (String ref: referrals)
     {
@@ -152,7 +153,7 @@
     if (ex instanceof NamingException)
     {
       Object arg = error.getArg();
-      Message msg = null;
+      LocalizableMessage msg = null;
       if (arg != null)
       {
         // Maybe is the LDAPURL
@@ -164,7 +165,7 @@
             String hostPort = url.getHost()+":"+url.getPort();
             if (ex instanceof ReferralLimitExceededException)
             {
-              msg = Message.raw(ex.getLocalizedMessage());
+              msg = LocalizableMessage.raw(ex.getLocalizedMessage());
             }
             else if (ex instanceof NameNotFoundException)
             {
@@ -181,7 +182,7 @@
           {
             if (ex instanceof ReferralLimitExceededException)
             {
-              msg = Message.raw(ex.getLocalizedMessage());
+              msg = LocalizableMessage.raw(ex.getLocalizedMessage());
             }
             else if (ex instanceof NameNotFoundException)
             {
@@ -204,7 +205,7 @@
       {
         if (ex instanceof ReferralLimitExceededException)
         {
-          msg = Message.raw(ex.getLocalizedMessage());
+          msg = LocalizableMessage.raw(ex.getLocalizedMessage());
         }
         else
         {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ExportLDIFPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ExportLDIFPanel.java
index 11226ee..3cfa0b8 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ExportLDIFPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ExportLDIFPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -60,7 +61,7 @@
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.ui.components.ScheduleSummaryPanel;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.ExportLDIF;
 
 /**
@@ -105,7 +106,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_EXPORT_LDIF_TITLE.get();
   }
@@ -371,7 +372,7 @@
     setPrimaryValid(lBackend);
     setPrimaryValid(lFile);
     setPrimaryValid(lExportOptions);
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 
     String backendName = (String)backends.getSelectedItem();
     if (backendName == null)
@@ -401,7 +402,7 @@
       String cols = wrapColumn.getText();
       int minValue = 1;
       int maxValue = 1000;
-      Message errMsg = ERR_CTRL_PANEL_INVALID_WRAP_COLUMN.get(minValue,
+      LocalizableMessage errMsg = ERR_CTRL_PANEL_INVALID_WRAP_COLUMN.get(minValue,
       maxValue);
       int size1 = errors.size();
       checkIntValue(errors, cols, minValue, maxValue, errMsg);
@@ -503,7 +504,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       return INFO_CTRL_PANEL_EXPORT_TASK_DESCRIPTION.get(
           backendSet.iterator().next(), fileName);
@@ -513,7 +514,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/GeneralMonitoringPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/GeneralMonitoringPanel.java
index 84885fd..30fa285 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/GeneralMonitoringPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/GeneralMonitoringPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.ui;
 
@@ -31,7 +32,7 @@
 import javax.swing.border.EmptyBorder;
 
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Abstract class used to refactor some code among the panels that display the
@@ -50,7 +51,7 @@
   /**
    * The message to express that the value was not found.
    */
-  protected static Message NO_VALUE_SET =
+  protected static LocalizableMessage NO_VALUE_SET =
     INFO_CTRL_PANEL_NO_MONITORING_VALUE.get();
 
   /**
@@ -63,9 +64,9 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
-    return Message.EMPTY;
+    return LocalizableMessage.EMPTY;
   }
 
   /**
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/GeneralMonitoringRightPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/GeneralMonitoringRightPanel.java
index 10e7960..2759020 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/GeneralMonitoringRightPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/GeneralMonitoringRightPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.ui;
 
@@ -36,7 +37,7 @@
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -94,7 +95,7 @@
    * @param msg the message.
    *
    */
-  public void displayMessage(Message msg)
+  public void displayMessage(LocalizableMessage msg)
   {
     noEntryPanel.setMessage(msg);
     ((CardLayout)mainPanel.getLayout()).show(mainPanel, getTitle(noEntryPanel));
@@ -173,9 +174,9 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
-    return Message.EMPTY;
+    return LocalizableMessage.EMPTY;
   }
 
   /**
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java
index f647c4f..7f0e3e1 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ImportLDIFPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -62,7 +63,7 @@
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.tools.ImportLDIF;
@@ -126,7 +127,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_IMPORT_LDIF_TITLE.get();
   }
@@ -577,7 +578,7 @@
     setPrimaryValid(lRejectsFile);
     setPrimaryValid(lSkipsFile);
     setPrimaryValid(lThreads);
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 
     String backendName = (String)backends.getSelectedItem();
     if (backendName == null)
@@ -822,7 +823,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       return INFO_CTRL_PANEL_IMPORT_TASK_DESCRIPTION.get(fileName,
           backendSet.iterator().next());
@@ -832,7 +833,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
@@ -1020,7 +1021,7 @@
 
       for (DN baseDN : replicatedBaseDNs)
       {
-        Message msg = INFO_PROGRESS_INITIALIZING_SUFFIX.get(baseDN.toString(),
+        LocalizableMessage msg = INFO_PROGRESS_INITIALIZING_SUFFIX.get(baseDN.toString(),
             ConnectionUtils.getHostPort(getInfo().getDirContext()));
         getProgressDialog().appendProgressHtml(Utilities.applyFont(
             msg.toString()+"<br>", ColorAndFontConstants.progressFont));
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 286b854..648bf7b 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
@@ -51,7 +51,7 @@
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.ui.components.BasicExpander;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.protocols.ldap.LDAPFilter;
 import org.opends.server.types.DN;
@@ -166,7 +166,7 @@
     gbc.gridx = 1;
     gbc.weightx = 1.0;
     gbc.insets.left = 10;
-    dnsToInclude = Utilities.createTextArea(Message.EMPTY, 5, 25);
+    dnsToInclude = Utilities.createTextArea(LocalizableMessage.EMPTY, 5, 25);
     final JScrollPane scrollDns = Utilities.createScrollPane(dnsToInclude);
     panel.add(scrollDns, gbc);
     lDnsToInclude.setLabelFor(dnsToInclude);
@@ -285,7 +285,7 @@
     gbc.gridx = 1;
     gbc.weightx = 1.0;
     gbc.insets.left = 10;
-    dnsToExclude = Utilities.createTextArea(Message.EMPTY, 5, 0);
+    dnsToExclude = Utilities.createTextArea(LocalizableMessage.EMPTY, 5, 0);
     final JScrollPane scrollDns = Utilities.createScrollPane(dnsToExclude);
     lDnsToExclude.setLabelFor(dnsToExclude);
     panel.add(scrollDns, gbc);
@@ -429,7 +429,7 @@
    * @param backendName the name of the backend where the operation associated
    * with the panel applies (used to generate the error messages).
    */
-  protected void updateIncludeExclude(Collection<Message> errors,
+  protected void updateIncludeExclude(Collection<LocalizableMessage> errors,
       String backendName)
   {
     updateErrors(lDnsToInclude, dnsToInclude, lAttributesToInclude,
@@ -443,7 +443,7 @@
 
   private void updateErrors(JLabel lDns, JTextComponent dns, JLabel lAttributes,
       JTextComponent attributes, JLabel lFilter, JTextComponent filter,
-      Collection<Message> errors, String backendName)
+      Collection<LocalizableMessage> errors, String backendName)
   {
     setPrimaryValid(lDns);
     setPrimaryValid(lAttributes);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexBrowserRightPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexBrowserRightPanel.java
index b14d4a0..d04b4d2 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexBrowserRightPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/IndexBrowserRightPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -39,7 +40,7 @@
 import org.opends.guitools.controlpanel.datamodel.VLVIndexDescriptor;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.event.IndexSelectionListener;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The panel on the right of the 'Manage Indexes' panel.
@@ -219,7 +220,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_INDEX_BROWSER_RIGHT_PANEL_TITLE.get();
   }
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 fadc42e..5f95b5d 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
@@ -68,7 +68,7 @@
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.util.ConfigReader;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.client.ManagementContext;
 import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor;
 import org.opends.server.admin.client.ldap.LDAPManagementContext;
@@ -234,7 +234,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_INDEX_PANEL_TITLE.get();
   }
@@ -337,7 +337,7 @@
 
   private void deleteIndex()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     ProgressDialog dlg = new ProgressDialog(
         Utilities.createFrame(),
         Utilities.getParentDialog(this),
@@ -391,7 +391,7 @@
       return;
     }
 
-    List<Message> errors = getErrors();
+    List<LocalizableMessage> errors = getErrors();
 
     if (errors.isEmpty())
     {
@@ -440,7 +440,7 @@
     setPrimaryValid(lType);
     name.setText(index.getName());
     backendName.setText(index.getBackend().getBackendID());
-    titlePanel.setDetails(Message.raw(index.getName()));
+    titlePanel.setDetails(LocalizableMessage.raw(index.getName()));
     entryLimit.setText(String.valueOf(index.getEntryLimit()));
     approximate.setSelected(false);
     equality.setSelected(false);
@@ -574,7 +574,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       return INFO_CTRL_PANEL_MODIFY_INDEX_TASK_DESCRIPTION.get(attributeName,
           backendName);
@@ -584,7 +584,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
index f4f5f23..1b36fac 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/JavaPropertiesPanel.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;
@@ -73,7 +73,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.LDAPEntryTableCellRenderer;
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.tools.JavaPropertiesTool;
@@ -160,7 +160,7 @@
 
   private boolean previousLocal = true;
 
-  private Message READING_JAVA_SETTINGS =
+  private LocalizableMessage READING_JAVA_SETTINGS =
     INFO_CTRL_PANEL_READING_JAVA_SETTINGS_SUMMARY.get();
 
   JComponent[] comps;
@@ -179,7 +179,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_JAVA_PROPERTIES_TITLE.get();
   }
@@ -224,7 +224,7 @@
 
     lJavaHome = Utilities.createPrimaryLabel(
         INFO_CTRL_PANEL_JAVA_HOME_LABEL.get());
-    useOpenDSJavaHome = Utilities.createRadioButton(Message.EMPTY);
+    useOpenDSJavaHome = Utilities.createRadioButton(LocalizableMessage.EMPTY);
     useOpenDSJavaHome.setOpaque(false);
     useOpenDSJavaHome.getAccessibleContext().setAccessibleName(
         INFO_CTRL_PANEL_USE_OPENDS_JAVA_HOME.get().toString()+" "+
@@ -253,7 +253,7 @@
     gbc.weightx = 0.0;
     gbc.insets.top = 10;
     gbc.gridwidth = 1;
-    useSpecifiedJavaHome = Utilities.createRadioButton(Message.EMPTY);
+    useSpecifiedJavaHome = Utilities.createRadioButton(LocalizableMessage.EMPTY);
     useSpecifiedJavaHome.setOpaque(false);
     useSpecifiedJavaHome.getAccessibleContext().setAccessibleName(
         INFO_CTRL_PANEL_USE_SPECIFIED_OPENDS_JAVA_HOME.get().toString() +
@@ -309,12 +309,12 @@
 
     lJavaArgs = Utilities.createPrimaryLabel(
         INFO_CTRL_PANEL_JAVA_ARGUMENTS_LABEL.get());
-    useSpecifiedJavaArgs = Utilities.createRadioButton(Message.EMPTY);
+    useSpecifiedJavaArgs = Utilities.createRadioButton(LocalizableMessage.EMPTY);
     useSpecifiedJavaArgs.getAccessibleContext().setAccessibleName(
         INFO_CTRL_PANEL_USE_OPENDS_JAVA_ARGS.get().toString() +
         " "+INFO_CTRL_PANEL_USE_OPENDS_JAVA_ARGS_HELP.get());
     useSpecifiedJavaArgs.setOpaque(false);
-    useOpenDSJavaArgs = Utilities.createRadioButton(Message.EMPTY);
+    useOpenDSJavaArgs = Utilities.createRadioButton(LocalizableMessage.EMPTY);
     useOpenDSJavaArgs.setOpaque(false);
     lJavaArgs.setLabelFor(useOpenDSJavaArgs);
     gbc.gridx = 0;
@@ -702,9 +702,9 @@
           {
             arg = t.toString();
           }
-          Message title =
+          LocalizableMessage title =
             ERR_CTRL_PANEL_ERR_READING_JAVA_SETTINGS_SUMMARY.get();
-          Message details =
+          LocalizableMessage details =
             ERR_CTRL_PANEL_READING_JAVA_SETTINGS_DETAILS.get(arg);
           updateErrorPane(errorPane, title,
               ColorAndFontConstants.errorTitleFont, details,
@@ -768,7 +768,7 @@
   {
     editor.stopCellEditing();
 
-    final ArrayList<Message> javaHomeErrors = new ArrayList<Message>();
+    final ArrayList<LocalizableMessage> javaHomeErrors = new ArrayList<LocalizableMessage>();
     String f = javaHome.getText().trim();
     if (f.length() > 0)
     {
@@ -806,17 +806,17 @@
       disableComponents();
       lInitContents.setText(
           INFO_CTRL_PANEL_CHECKING_JAVA_OPTIONS_SUMMARY.get().toString());
-      BackgroundTask<List<Message>> worker =
-        new BackgroundTask<List<Message>>()
+      BackgroundTask<List<LocalizableMessage>> worker =
+        new BackgroundTask<List<LocalizableMessage>>()
       {
         private boolean isConfirmation = false;
         @Override
-        public List<Message> processBackgroundTask() throws Throwable
+        public List<LocalizableMessage> processBackgroundTask() throws Throwable
         {
           String[] jvms;
           String userJVM = javaHome.getText();
-          ArrayList<Message> errorMessages = new ArrayList<Message>();
-          ArrayList<Message> confirmationMessages = new ArrayList<Message>();
+          ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>();
+          ArrayList<LocalizableMessage> confirmationMessages = new ArrayList<LocalizableMessage>();
           String defaultJVM = System.getenv(SetupUtils.OPENDJ_JAVA_HOME);
           if (defaultJVM == null)
           {
@@ -866,7 +866,7 @@
             if (notWorkingArgs.size() > 0)
             {
               File javaFile = getJavaFile(new File(jvm));
-              Message confirmationMessage;
+              LocalizableMessage confirmationMessage;
               if (useSpecifiedJavaArgs.isSelected())
               {
                 confirmationMessage =
@@ -898,7 +898,7 @@
          * {@inheritDoc}
          */
         @Override
-        public void backgroundTaskCompleted(List<Message> returnValue,
+        public void backgroundTaskCompleted(List<LocalizableMessage> returnValue,
             Throwable t)
         {
           if (t == null)
@@ -935,9 +935,9 @@
             {
               arg = t.toString();
             }
-            Message title =
+            LocalizableMessage title =
               ERR_CTRL_PANEL_ERROR_CHECKING_JAVA_SETTINGS_SUMMARY.get();
-            Message details =
+            LocalizableMessage details =
               ERR_CTRL_PANEL_ERROR_CHECKING_JAVA_SETTINGS_DETAILS.get(arg);
             updateErrorPane(errorPane, title,
                 ColorAndFontConstants.errorTitleFont, details,
@@ -961,12 +961,12 @@
       else
       {
         ArrayList<String> s = new ArrayList<String>();
-        for (Message msg : javaHomeErrors)
+        for (LocalizableMessage msg : javaHomeErrors)
         {
           s.add(msg.toString());
         }
-        ArrayList<Message> msgs = new ArrayList<Message>();
-        Message msg = ERR_CTRL_PANEL_GENERIC_ERROR_FALLBACK_JAVAHOME.get(
+        ArrayList<LocalizableMessage> msgs = new ArrayList<LocalizableMessage>();
+        LocalizableMessage msg = ERR_CTRL_PANEL_GENERIC_ERROR_FALLBACK_JAVAHOME.get(
             f, Utilities.getStringFromCollection(s, "<br>-"));
         msgs.add(msg);
         displayErrorDialog(msgs);
@@ -995,7 +995,7 @@
 
   private void launchTask()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     ProgressDialog dlg = new ProgressDialog(
         Utilities.createFrame(),
         Utilities.getParentDialog(this),
@@ -1435,7 +1435,7 @@
      * {@inheritDoc}
      */
     @Override
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       return INFO_CTRL_PANEL_UPDATE_JAVA_SETTINGS_TASK_DESCRIPTION.get();
     }
@@ -1445,7 +1445,7 @@
      */
     @Override
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (!isServerRunning())
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 068969a..5905118 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
@@ -59,7 +59,7 @@
 import org.opends.guitools.controlpanel.task.ModifyEntryTask;
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.Constants;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.types.DN;
@@ -411,7 +411,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_EDIT_LDAP_ENTRY_TITLE.get();
   }
@@ -573,7 +573,7 @@
   private void saveChanges(boolean modal)
   {
     newTask = null;
-    final ArrayList<Message> errors = new ArrayList<Message>();
+    final ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     // Check that the entry is correct.
     try
     {
@@ -624,14 +624,14 @@
 
   private void deleteEntry()
   {
-    final ArrayList<Message> errors = new ArrayList<Message>();
+    final ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     // Check that the entry is correct.
     // Rely in numsubordinates and hassubordinates
     boolean isLeaf = !BrowserController.getHasSubOrdinates(searchResult);
 
     if (treePath != null)
     {
-      Message title = isLeaf ? INFO_CTRL_PANEL_DELETING_ENTRY_TITLE.get() :
+      LocalizableMessage title = isLeaf ? INFO_CTRL_PANEL_DELETING_ENTRY_TITLE.get() :
         INFO_CTRL_PANEL_DELETING_SUBTREE_TITLE.get();
       ProgressDialog dlg = new ProgressDialog(
           Utilities.createFrame(),
@@ -644,7 +644,7 @@
       }
       if (errors.size() == 0)
       {
-        Message confirmationMessage =
+        LocalizableMessage confirmationMessage =
           isLeaf ? INFO_CTRL_PANEL_DELETE_ENTRY_CONFIRMATION_DETAILS.get(
               searchResult.getDN()) :
                 INFO_CTRL_PANEL_DELETE_SUBTREE_CONFIRMATION_DETAILS.get(
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntrySelectionPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntrySelectionPanel.java
index c355b4f..b6c44f6 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntrySelectionPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDAPEntrySelectionPanel.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;
@@ -44,7 +44,7 @@
 
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A basic panel that contains a browser.  It is used in general in panels that
@@ -54,7 +54,7 @@
  */
 public class LDAPEntrySelectionPanel extends AbstractBrowseEntriesPanel
 {
-  private Message title;
+  private LocalizableMessage title;
   private Filter f;
 
   private String[] dns;
@@ -126,7 +126,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return title;
   }
@@ -270,7 +270,7 @@
    * Sets the title that will be displayed in the dialog containing this panel.
    * @param title the title.
    */
-  public void setTitle(Message title)
+  public void setTitle(LocalizableMessage title)
   {
     this.title = title;
     Window w = Utilities.getParentDialog(this);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java
index 65e74e1..c57495e 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LDIFViewEntryPanel.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.guitools.controlpanel.ui;
@@ -47,7 +47,7 @@
 import org.opends.guitools.controlpanel.datamodel.CustomSearchResult;
 import org.opends.guitools.controlpanel.task.OfflineUpdateException;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.Entry;
 import org.opends.server.types.LDIFImportConfig;
 import org.opends.server.types.OpenDsException;
@@ -106,7 +106,7 @@
     gbc.gridy ++;
     gbc.insets.top = 10;
 
-    editableAttributes = Utilities.createTextArea(Message.EMPTY, 20, 30);
+    editableAttributes = Utilities.createTextArea(LocalizableMessage.EMPTY, 20, 30);
     editableAttributes.getDocument().addDocumentListener(new DocumentListener()
     {
       @Override
@@ -141,7 +141,7 @@
     gbc.gridy ++;
     add(lReadOnly, gbc);
     gbc.insets.top = 5;
-    readOnlyAttributes = Utilities.createNonEditableTextArea(Message.EMPTY, 10,
+    readOnlyAttributes = Utilities.createNonEditableTextArea(LocalizableMessage.EMPTY, 10,
         30);
     gbc.weightx = 1.0;
     gbc.weighty = 0.4;
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
index 9345f94..2acf548 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LocalOrRemotePanel.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.guitools.controlpanel.ui;
@@ -68,7 +68,7 @@
 import org.opends.guitools.controlpanel.task.OnlineUpdateException;
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.UserData;
 import org.opends.quicksetup.UserDataCertificateException;
@@ -79,6 +79,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.OpenDsException;
 import org.opends.server.util.DynamicConstants;
+import org.opends.server.util.StaticUtils;
 
 /**
  * The panel that appears when the user is asked to provide authentication.
@@ -123,7 +124,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_LOCAL_OR_REMOTE_PANEL_TITLE.get();
   }
@@ -491,7 +492,7 @@
     setPrimaryValid(portLabel);
     setPrimaryValid(dnLabel);
     setPrimaryValid(pwdLabel);
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 
     boolean dnInvalid = false;
     boolean pwdInvalid = false;
@@ -680,7 +681,7 @@
               }
               else
               {
-                Message msg = Utils.getThrowableMsg(
+                LocalizableMessage msg = Utils.getThrowableMsg(
                     INFO_ERROR_CONNECTING_TO_LOCAL.get(), throwable);
                 errors.add(msg);
               }
@@ -774,7 +775,7 @@
             else
             {
               ArrayList<String> stringErrors = new ArrayList<String>();
-              for (Message err : errors)
+              for (LocalizableMessage err : errors)
               {
                 stringErrors.add(err.toString());
               }
@@ -948,7 +949,7 @@
 
   private void checkVersion(InitialLdapContext ctx) throws OpenDsException
   {
-    Message msg = null;
+    LocalizableMessage msg = null;
     try
     {
       /*
@@ -1029,12 +1030,10 @@
       OpenDsException oe = (OpenDsException)t;
       if (oe.getMessageObject() != null)
       {
-        if (oe.getMessageObject().getDescriptor().equals
-            (ERR_INCOMPATIBLE_VERSION_IN_REMOTE_SERVER) ||
-            oe.getMessageObject().getDescriptor().equals
-            (ERR_VERSION_IN_REMOTE_SERVER_NOT_FOUND) ||
-            oe.getMessageObject().getDescriptor().equals
-            (ERR_NOT_SAME_PRODUCT_IN_REMOTE_SERVER_NOT_FOUND))
+        LocalizableMessage msg = oe.getMessageObject();
+        if (StaticUtils.hasDescriptor(msg, ERR_INCOMPATIBLE_VERSION_IN_REMOTE_SERVER) ||
+            StaticUtils.hasDescriptor(msg, ERR_VERSION_IN_REMOTE_SERVER_NOT_FOUND) ||
+            StaticUtils.hasDescriptor(msg, ERR_NOT_SAME_PRODUCT_IN_REMOTE_SERVER_NOT_FOUND))
         {
           isVersionException = true;
         }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LoginPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LoginPanel.java
index b393dbd..081aa85 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LoginPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/LoginPanel.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;
@@ -51,7 +51,7 @@
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.UserDataCertificateException;
 import org.opends.quicksetup.ui.CertificateDialog;
 import org.opends.quicksetup.util.UIKeyStore;
@@ -87,7 +87,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_LOGIN_PANEL_TITLE.get();
   }
@@ -169,7 +169,7 @@
   {
     setPrimaryValid(dnLabel);
     setPrimaryValid(pwdLabel);
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 
     boolean dnInvalid = false;
     boolean pwdInvalid = false;
@@ -305,7 +305,7 @@
               }
               else
               {
-                Message msg = Utils.getThrowableMsg(
+                LocalizableMessage msg = Utils.getThrowableMsg(
                     INFO_ERROR_CONNECTING_TO_LOCAL.get(), throwable);
                 errors.add(msg);
               }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MainActionsPane.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MainActionsPane.java
index 255fe4b..17940c3 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MainActionsPane.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MainActionsPane.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -51,7 +52,7 @@
 import org.opends.guitools.controlpanel.ui.components.ActionButton;
 import org.opends.guitools.controlpanel.ui.components.CategoryPanel;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The panel on the left side of the main Control Center dialog.  It contains
@@ -188,10 +189,10 @@
   protected ArrayList<Category> createCategories()
   {
     ArrayList<Category> categories = new ArrayList<Category>();
-    Message[][] labels;
+    LocalizableMessage[][] labels;
     if (Utilities.isWindows())
     {
-      labels = new Message[][] {
+      labels = new LocalizableMessage[][] {
           {
             INFO_CTRL_PANEL_CATEGORY_DIRECTORY_DATA.get(),
             INFO_CTRL_PANEL_ACTION_MANAGE_ENTRIES.get(),
@@ -226,7 +227,7 @@
     }
     else
     {
-      labels = new Message[][] {
+      labels = new LocalizableMessage[][] {
           {
             INFO_CTRL_PANEL_CATEGORY_DIRECTORY_DATA.get(),
             INFO_CTRL_PANEL_ACTION_MANAGE_ENTRIES.get(),
@@ -400,7 +401,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return null;
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MainMenuBar.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MainMenuBar.java
index 2c3a95d..e87d5ca 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MainMenuBar.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MainMenuBar.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -43,7 +44,7 @@
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The menu bar that appears on the main panel.
@@ -103,8 +104,8 @@
     if (runningTasks.size() > 0)
     {
       String allTasks = Utilities.getStringFromCollection(runningTasks, "<br>");
-      Message title = INFO_CTRL_PANEL_CONFIRMATION_REQUIRED_SUMMARY.get();
-      Message msg =
+      LocalizableMessage title = INFO_CTRL_PANEL_CONFIRMATION_REQUIRED_SUMMARY.get();
+      LocalizableMessage msg =
         INFO_CTRL_PANEL_RUNNING_TASKS_CONFIRMATION_DETAILS.get(allTasks);
       confirmed = Utilities.displayConfirmationDialog(
           Utilities.getParentDialog(this), title, msg);
@@ -262,8 +263,8 @@
     if (runningTasks.size() > 0)
     {
       String allTasks = Utilities.getStringFromCollection(runningTasks, "<br>");
-      Message title = INFO_CTRL_PANEL_CONFIRMATION_REQUIRED_SUMMARY.get();
-      Message msg =
+      LocalizableMessage title = INFO_CTRL_PANEL_CONFIRMATION_REQUIRED_SUMMARY.get();
+      LocalizableMessage msg =
         INFO_CTRL_PANEL_RUNNING_TASKS_CHANGE_SERVER_CONFIRMATION_DETAILS.get(
             allTasks);
       confirmed = Utilities.displayConfirmationDialog(
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 eeaf71f..d2abae5 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
@@ -72,7 +72,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.TaskCellRenderer;
 import org.opends.guitools.controlpanel.util.ConfigFromFile;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.tools.tasks.TaskEntry;
@@ -117,7 +117,7 @@
 
   private ManageTasksMenuBar menuBar;
 
-  private MonitoringAttributesViewPanel<Message> operationViewPanel;
+  private MonitoringAttributesViewPanel<LocalizableMessage> operationViewPanel;
   private GenericDialog operationViewDlg;
 
   private JPanel detailsPanel;
@@ -145,7 +145,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_TASK_TO_SCHEDULE_LIST_TITLE.get();
   }
@@ -322,7 +322,7 @@
     logsLabel.setFont(ColorAndFontConstants.titleFont);
     add(logsLabel, gbc);
 
-    logs = Utilities.createNonEditableTextArea(Message.EMPTY, 5, 50);
+    logs = Utilities.createNonEditableTextArea(LocalizableMessage.EMPTY, 5, 50);
     logs.setFont(ColorAndFontConstants.defaultFont);
     gbc.fill = GridBagConstraints.BOTH;
     gbc.weightx = 1.0;
@@ -436,13 +436,13 @@
     else
     {
       TaskEntry taskEntry = tasks.iterator().next();
-      Map<Message,List<String>> taskSpecificAttrs =
+      Map<LocalizableMessage,List<String>> taskSpecificAttrs =
         taskEntry.getTaskSpecificAttributeValuePairs();
-      List<Message> lastLogMessages = taskEntry.getLogMessages();
+      List<LocalizableMessage> lastLogMessages = taskEntry.getLogMessages();
       if (!lastLogMessages.isEmpty())
       {
         StringBuilder sb = new StringBuilder();
-        for (Message msg : lastLogMessages)
+        for (LocalizableMessage msg : lastLogMessages)
         {
           if (sb.length() != 0)
           {
@@ -472,7 +472,7 @@
         gbc.fill = GridBagConstraints.NONE;
         gbc.anchor = GridBagConstraints.NORTHWEST;
         gbc.insets.top = 10;
-        for (Message label : taskSpecificAttrs.keySet())
+        for (LocalizableMessage label : taskSpecificAttrs.keySet())
         {
           List<String> values = taskSpecificAttrs.get(label);
           gbc.gridx = 0;
@@ -545,11 +545,11 @@
           "Completion Time",
           "Dependency ID",
           "Failed Dependency Action",
-          "Log Message.                              Should be pretty long"+
-          "Log Message.                              Should be pretty long"+
-          "Log Message.                              Should be pretty long"+
-          "Log Message.                              Should be pretty long"+
-          "Log Message.                              Should be pretty long",
+          "Log LocalizableMessage.                              Should be pretty long"+
+          "Log LocalizableMessage.                              Should be pretty long"+
+          "Log LocalizableMessage.                              Should be pretty long"+
+          "Log LocalizableMessage.                              Should be pretty long"+
+          "Log LocalizableMessage.                              Should be pretty long",
           "Notify On Error",
           "Notify On Completion",
           "Recurring Task Schedule"
@@ -612,11 +612,11 @@
           "Completion Time",
           "Dependency ID",
           "Failed Dependency Action",
-          "Log Message.                              Should be pretty long\n"+
-          "Log Message.                              Should be pretty long\n"+
-          "Log Message.                              Should be pretty long\n"+
-          "Log Message.                              Should be pretty long\n"+
-          "Log Message.                              Should be pretty long\n",
+          "Log LocalizableMessage.                              Should be pretty long\n"+
+          "Log LocalizableMessage.                              Should be pretty long\n"+
+          "Log LocalizableMessage.                              Should be pretty long\n"+
+          "Log LocalizableMessage.                              Should be pretty long\n"+
+          "Log LocalizableMessage.                              Should be pretty long\n",
           "Notify On Error",
           "Notify On Completion",
           "Recurring Task Schedule"
@@ -643,7 +643,7 @@
 
   private void cancelTaskClicked()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     ProgressDialog dlg = new ProgressDialog(
         Utilities.createFrame(),
         Utilities.getParentDialog(this),
@@ -896,7 +896,7 @@
     operationViewDlg.setVisible(true);
     if (!operationViewPanel.isCanceled())
     {
-      LinkedHashSet<Message> displayedAttributes =
+      LinkedHashSet<LocalizableMessage> displayedAttributes =
         operationViewPanel.getAttributes();
       setAttributesToDisplay(displayedAttributes);
       updateTableSizes();
@@ -964,7 +964,7 @@
     Utilities.updateScrollMode(tableScroll, taskTable);
   }
 
-  private void setAttributesToDisplay(LinkedHashSet<Message> attributes)
+  private void setAttributesToDisplay(LinkedHashSet<LocalizableMessage> attributes)
   {
     Set<String> selectedIds = getSelectedIds();
     tableModel.setAttributes(attributes);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MatchingRulePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MatchingRulePanel.java
index 0c1ee41..2899dde 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MatchingRulePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MatchingRulePanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -45,7 +46,7 @@
 import org.opends.guitools.controlpanel.ui.components.TitlePanel;
 import org.opends.guitools.controlpanel.util.LowerCaseComparator;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.ApproximateMatchingRule;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.api.EqualityMatchingRule;
@@ -62,8 +63,8 @@
 public class MatchingRulePanel extends SchemaElementPanel
 {
   private static final long serialVersionUID = 2440493955626646008L;
-  private TitlePanel titlePanel = new TitlePanel(Message.EMPTY,
-      Message.EMPTY);
+  private TitlePanel titlePanel = new TitlePanel(LocalizableMessage.EMPTY,
+      LocalizableMessage.EMPTY);
   private JLabel name = Utilities.createDefaultLabel();
   private JLabel oid = Utilities.createDefaultLabel();
   private JLabel description = Utilities.createDefaultLabel();
@@ -83,7 +84,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_MATCHING_RULE_PANEL_TITLE.get();
   }
@@ -128,7 +129,7 @@
 
     gbc.insets.bottom = 0;
     gbc.insets.top = 8;
-    Message[] labels = {
+    LocalizableMessage[] labels = {
         INFO_CTRL_PANEL_MATCHING_RULE_NAME.get(),
         INFO_CTRL_PANEL_MATCHING_RULE_OID.get(),
         INFO_CTRL_PANEL_MATCHING_RULE_DESCRIPTION.get(),
@@ -213,7 +214,7 @@
     {
       n = NOT_APPLICABLE.toString();
     }
-    titlePanel.setDetails(Message.raw(n));
+    titlePanel.setDetails(LocalizableMessage.raw(n));
     name.setText(n);
     oid.setText(matchingRule.getOID());
     AttributeSyntax<?> s = null;
@@ -269,9 +270,9 @@
    * @param matchingRule the matching rule.
    * @return the message for the type of the provided matching rule.
    */
-  static Message getTypeValue(MatchingRule matchingRule)
+  static LocalizableMessage getTypeValue(MatchingRule matchingRule)
   {
-    Message text;
+    LocalizableMessage text;
     if (matchingRule instanceof EqualityMatchingRule)
     {
       text = INFO_CTRL_PANEL_INDEX_EQUALITY.get();
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java
index 7dcd49a..ea7ff35 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/MonitoringAttributesViewPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.ui;
 
@@ -48,7 +49,7 @@
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.event.ScrollPaneBorderListener;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
 *
@@ -101,15 +102,15 @@
  }
 
  /**
-  * Creates an instance of this panel that uses Message as
+  * Creates an instance of this panel that uses LocalizableMessage as
   * attributes.
   * @param attributes the list of possible attributes.
-  * @return an instance of this panel that uses Message as attributes.
+  * @return an instance of this panel that uses LocalizableMessage as attributes.
   */
- public static MonitoringAttributesViewPanel<Message>
- createMessageInstance(LinkedHashSet<Message> attributes)
+ public static MonitoringAttributesViewPanel<LocalizableMessage>
+ createMessageInstance(LinkedHashSet<LocalizableMessage> attributes)
  {
-   return new MonitoringAttributesViewPanel<Message>(attributes);
+   return new MonitoringAttributesViewPanel<LocalizableMessage>(attributes);
  }
 
  /**
@@ -177,7 +178,7 @@
    int i = 0;
    for (T attribute : monitoringAttributes)
    {
-     Message m = getMessage(attribute);
+     LocalizableMessage m = getMessage(attribute);
      checkboxes[i] = Utilities.createCheckBox(m);
      i++;
    }
@@ -265,7 +266,7 @@
  /**
   * {@inheritDoc}
   */
- public Message getTitle()
+ public LocalizableMessage getTitle()
  {
    return INFO_CTRL_PANEL_ATTRIBUTE_VIEW_OPTIONS_TITLE.get();
  }
@@ -314,7 +315,7 @@
    }
    if (selectedAttributes.isEmpty())
    {
-     ArrayList<Message> errors = new ArrayList<Message>();
+     ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
      errors.add(INFO_CTRL_PANEL_NO_OPERATION_SELECTED.get());
      super.displayErrorDialog(errors);
    }
@@ -358,20 +359,20 @@
   * @param operation the operation.
   * @return the message for the provided operation.
   */
- protected Message getMessage(T operation)
+ protected LocalizableMessage getMessage(T operation)
  {
-   Message m;
+   LocalizableMessage m;
    if (operation instanceof MonitoringAttributes)
    {
      m = ((MonitoringAttributes)operation).getMessage();
    }
-   else if (operation instanceof Message)
+   else if (operation instanceof LocalizableMessage)
    {
-     m = (Message)operation;
+     m = (LocalizableMessage)operation;
    }
    else
    {
-     m = Message.raw(operation.toString());
+     m = LocalizableMessage.raw(operation.toString());
    }
    return m;
  }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewAttributePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewAttributePanel.java
index aadea02..bf17db4 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewAttributePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewAttributePanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -63,8 +64,8 @@
 org.opends.guitools.controlpanel.ui.renderer.SchemaElementComboBoxCellRenderer;
 import org.opends.guitools.controlpanel.util.LowerCaseComparator;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.ApproximateMatchingRule;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.api.EqualityMatchingRule;
@@ -146,8 +147,8 @@
 
   private Component relativeComponent;
 
-  private Message NO_PARENT = INFO_CTRL_PANEL_NO_PARENT_FOR_ATTRIBUTE.get();
-  private Message NO_MATCHING_RULE =
+  private LocalizableMessage NO_PARENT = INFO_CTRL_PANEL_NO_PARENT_FOR_ATTRIBUTE.get();
+  private LocalizableMessage NO_MATCHING_RULE =
     INFO_CTRL_PANEL_NO_MATCHING_RULE_FOR_ATTRIBUTE.get();
 
   /**
@@ -165,7 +166,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_NEW_ATTRIBUTE_PANEL_TITLE.get();
   }
@@ -377,13 +378,13 @@
    */
   public void okClicked()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     for (JLabel label : labels)
     {
       setPrimaryValid(label);
     }
     String n = getAttributeName();
-    MessageBuilder err = new MessageBuilder();
+    LocalizableMessageBuilder err = new LocalizableMessageBuilder();
     if (n.length() == 0)
     {
       errors.add(ERR_CTRL_PANEL_ATTRIBUTE_NAME_REQUIRED.get());
@@ -393,11 +394,11 @@
     {
       errors.add(ERR_CTRL_PANEL_INVALID_ATTRIBUTE_NAME.get(err.toString()));
       setPrimaryInvalid(lName);
-      err = new MessageBuilder();
+      err = new LocalizableMessageBuilder();
     }
     else
     {
-      Message elementType = getSchemaElementType(n, schema);
+      LocalizableMessage elementType = getSchemaElementType(n, schema);
       if (elementType != null)
       {
         errors.add(ERR_CTRL_PANEL_ATTRIBUTE_NAME_ALREADY_IN_USE.get(n,
@@ -413,11 +414,11 @@
       {
         errors.add(ERR_CTRL_PANEL_OID_NOT_VALID.get(err.toString()));
         setPrimaryInvalid(lOID);
-        err = new MessageBuilder();
+        err = new LocalizableMessageBuilder();
       }
       else
       {
-        Message elementType = getSchemaElementType(n, schema);
+        LocalizableMessage elementType = getSchemaElementType(n, schema);
         if (elementType != null)
         {
           errors.add(ERR_CTRL_PANEL_OID_ALREADY_IN_USE.get(n,
@@ -441,7 +442,7 @@
           }
           else
           {
-            Message elementType = getSchemaElementType(alias, schema);
+            LocalizableMessage elementType = getSchemaElementType(alias, schema);
             if (elementType != null)
             {
               errors.add(ERR_CTRL_PANEL_ALIAS_ALREADY_IN_USE.get(n,
@@ -516,7 +517,7 @@
    * @param schema the schema.
    * @return the message representing the schema element type.
    */
-  static Message getSchemaElementType(String name, Schema schema)
+  static LocalizableMessage getSchemaElementType(String name, Schema schema)
   {
     if (schema.getAttributeType(name.toLowerCase()) != null)
     {
@@ -592,7 +593,7 @@
 
     JComboBox[] comboBoxes = {parent, syntax, approximate,
         equality, ordering, substring};
-    Message[] defaultValues = {NO_PARENT, Message.EMPTY, NO_MATCHING_RULE,
+    LocalizableMessage[] defaultValues = {NO_PARENT, LocalizableMessage.EMPTY, NO_MATCHING_RULE,
         NO_MATCHING_RULE, NO_MATCHING_RULE, NO_MATCHING_RULE
     };
     SchemaElementComboBoxCellRenderer renderer = new
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 53d2acd..a16cfa5 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
@@ -83,7 +83,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.CustomListCellRenderer;
 import org.opends.guitools.controlpanel.util.ConfigReader;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.installer.InstallerHelper;
 import org.opends.quicksetup.util.Utils;
@@ -137,7 +137,7 @@
 
   private DocumentListener documentListener;
 
-  private final Message NEW_BACKEND = INFO_CTRL_PANEL_NEW_BACKEND_LABEL.get();
+  private final LocalizableMessage NEW_BACKEND = INFO_CTRL_PANEL_NEW_BACKEND_LABEL.get();
 
   /**
    * The default constructor.
@@ -152,7 +152,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_NEW_BASE_DN_TITLE.get();
   }
@@ -493,7 +493,7 @@
     setPrimaryValid(lDirectoryData);
     setSecondaryValid(lPath);
     setSecondaryValid(lNumberOfEntries);
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 
     ServerDescriptor desc = getInfo().getServerDescriptor();
 
@@ -610,7 +610,7 @@
       String nEntries = numberOfEntries.getText();
       int minValue = 1;
       int maxValue = isLocal() ? 20000 : 1000;
-      Message errMsg = ERR_NUMBER_OF_ENTRIES_INVALID.get(minValue, maxValue);
+      LocalizableMessage errMsg = ERR_NUMBER_OF_ENTRIES_INVALID.get(minValue, maxValue);
       checkIntValue(errors, nEntries, minValue, maxValue, errMsg);
     }
 
@@ -727,7 +727,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       return INFO_CTRL_PANEL_NEW_BASE_DN_TASK_DESCRIPTION.get(newBaseDN,
       backendSet.iterator().next());
@@ -737,7 +737,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
@@ -896,7 +896,7 @@
              */
             public void run()
             {
-              Message msg = INFO_CTRL_PANEL_CREATING_BACKEND_PROGRESS.get(
+              LocalizableMessage msg = INFO_CTRL_PANEL_CREATING_BACKEND_PROGRESS.get(
                   getBackendName(), newBaseDN);
               getProgressDialog().appendProgressHtml(
                   Utilities.getProgressWithPoints(msg,
@@ -923,7 +923,7 @@
              */
             public void run()
             {
-              Message msg = INFO_CTRL_PANEL_CREATING_BASE_DN_PROGRESS.get(
+              LocalizableMessage msg = INFO_CTRL_PANEL_CREATING_BASE_DN_PROGRESS.get(
                   newBaseDN, getBackendName());
               getProgressDialog().appendProgressHtml(
                   Utilities.getProgressWithPoints(msg,
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewDomainPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewDomainPanel.java
index 91444c2..47d1bcd 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewDomainPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewDomainPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -33,7 +34,7 @@
 import javax.swing.JTextField;
 
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The panel to create a domain.
@@ -46,7 +47,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_NEW_DOMAIN_PANEL_TITLE.get();
   }
@@ -54,7 +55,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getProgressDialogTitle()
+  protected LocalizableMessage getProgressDialogTitle()
   {
     return INFO_CTRL_NEW_DOMAIN_PANEL_TITLE.get();
   }
@@ -62,7 +63,7 @@
   /**
    * {@inheritDoc}
    */
-  protected void checkSyntax(ArrayList<Message> errors)
+  protected void checkSyntax(ArrayList<LocalizableMessage> errors)
   {
     for (JLabel label : labels)
     {
@@ -70,7 +71,7 @@
     }
 
     JTextField[] requiredFields = {name};
-    Message[] msgs = {ERR_CTRL_PANEL_NAME_OF_DOMAIN_REQUIRED.get()};
+    LocalizableMessage[] msgs = {ERR_CTRL_PANEL_NAME_OF_DOMAIN_REQUIRED.get()};
     for (int i=0; i<requiredFields.length; i++)
     {
       String v = requiredFields[i].getText().trim();
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewEntryFromLDIFPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewEntryFromLDIFPanel.java
index f481fc5..124f6f5 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewEntryFromLDIFPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewEntryFromLDIFPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -46,7 +47,7 @@
 import org.opends.guitools.controlpanel.browser.BrowserController;
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.util.LDIFException;
 
 /**
@@ -107,7 +108,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getProgressDialogTitle()
+  protected LocalizableMessage getProgressDialogTitle()
   {
     return INFO_CTRL_PANEL_NEW_ENTRY_FROM_LDIF_TITLE.get();
   }
@@ -115,7 +116,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_NEW_ENTRY_FROM_LDIF_TITLE.get();
   }
@@ -151,7 +152,7 @@
     lSyntaxCorrect.setIcon(Utilities.createImageIcon(
         "org/opends/quicksetup/images/info_small.gif"));
 
-    ldif = Utilities.createTextArea(Message.EMPTY, 20, 50);
+    ldif = Utilities.createTextArea(LocalizableMessage.EMPTY, 20, 50);
     ldif.getDocument().addDocumentListener(new DocumentListener()
     {
       /**
@@ -198,7 +199,7 @@
        */
       public void actionPerformed(ActionEvent ev)
       {
-        ArrayList<Message> errors = new ArrayList<Message>();
+        ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
         checkSyntax(errors);
         if (errors.size() > 0)
         {
@@ -239,7 +240,7 @@
   /**
    * {@inheritDoc}
    */
-  protected void checkSyntax(ArrayList<Message> errors)
+  protected void checkSyntax(ArrayList<LocalizableMessage> errors)
   {
     try
     {
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 b33e570..d67adcc 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
@@ -63,7 +63,7 @@
 import org.opends.guitools.controlpanel.ui.nodes.BrowserNodeInfo;
 import org.opends.guitools.controlpanel.ui.nodes.DndBrowserNodes;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.DN;
 import org.opends.server.types.LDAPURL;
 import org.opends.server.types.OpenDsException;
@@ -143,7 +143,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_NEW_GROUP_PANEL_TITLE.get();
   }
@@ -159,7 +159,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getProgressDialogTitle()
+  protected LocalizableMessage getProgressDialogTitle()
   {
     return INFO_CTRL_PANEL_NEW_GROUP_PANEL_TITLE.get();
   }
@@ -175,7 +175,7 @@
   /**
    * {@inheritDoc}
    */
-  protected void checkSyntax(ArrayList<Message> errors)
+  protected void checkSyntax(ArrayList<LocalizableMessage> errors)
   {
     Runnable runnable = new Runnable()
     {
@@ -203,7 +203,7 @@
     }
 
     JTextField[] requiredFields = {name};
-    Message[] msgs = {ERR_CTRL_PANEL_NAME_OF_GROUP_REQUIRED.get()};
+    LocalizableMessage[] msgs = {ERR_CTRL_PANEL_NAME_OF_GROUP_REQUIRED.get()};
     for (int i=0; i<requiredFields.length; i++)
     {
       String v = requiredFields[i].getText().trim();
@@ -327,14 +327,14 @@
   private void createLayout()
   {
     GridBagConstraints gbc = new GridBagConstraints();
-    Message[] ls = {
+    LocalizableMessage[] ls = {
         INFO_CTRL_PANEL_NEW_GROUP_NAME_LABEL.get(),
         INFO_CTRL_PANEL_NEW_GROUP_DESCRIPTION_LABEL.get(),
         INFO_CTRL_PANEL_NEW_GROUP_MEMBERS_LABEL.get(),
         INFO_CTRL_PANEL_NEW_GROUP_ENTRY_DN_LABEL.get()
         };
     int i = 0;
-    for (Message l : ls)
+    for (LocalizableMessage l : ls)
     {
       labels[i].setText(l.toString());
       i++;
@@ -415,7 +415,7 @@
         INFO_CTRL_PANEL_GROUP_MEMBER_DNS_LABEL.get());
     gbc.insets.left = 30;
     add(lMemberDNs, gbc);
-    staticMembers = Utilities.createTextArea(Message.EMPTY, 8, 40);
+    staticMembers = Utilities.createTextArea(LocalizableMessage.EMPTY, 8, 40);
     JScrollPane scroll = Utilities.createScrollPane(staticMembers);
     gbc.weighty = 1.0;
     gbc.fill = GridBagConstraints.BOTH;
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 da70d04..96eed2b 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
@@ -64,7 +64,7 @@
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.util.ConfigReader;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn.IndexType;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.Attribute;
@@ -110,7 +110,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_NEW_INDEX_TITLE.get();
   }
@@ -282,7 +282,7 @@
     setPrimaryValid(lAttribute);
     setPrimaryValid(lEntryLimit);
     setPrimaryValid(lType);
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     String attrName = getAttributeName();
     if (attrName == null)
     {
@@ -437,7 +437,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       return INFO_CTRL_PANEL_NEW_INDEX_TASK_DESCRIPTION.get(
           attributeName, backendName.getText());
@@ -447,7 +447,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java
index 5983b84..fa171a6 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewObjectClassPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -71,8 +72,8 @@
 import
 org.opends.guitools.controlpanel.ui.renderer.SchemaElementComboBoxCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.ObjectClass;
@@ -149,7 +150,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_NEW_OBJECTCLASS_PANEL_TITLE.get();
   }
@@ -244,13 +245,13 @@
    */
   public void okClicked()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     for (JLabel label : labels)
     {
       setPrimaryValid(label);
     }
     String n = getObjectClassName();
-    MessageBuilder err = new MessageBuilder();
+    LocalizableMessageBuilder err = new LocalizableMessageBuilder();
     if (n.length() == 0)
     {
       errors.add(ERR_CTRL_PANEL_OBJECTCLASS_NAME_REQUIRED.get());
@@ -258,11 +259,11 @@
     else if (!StaticUtils.isValidSchemaElement(n, 0, n.length(), err))
     {
       errors.add(ERR_CTRL_PANEL_INVALID_OBJECTCLASS_NAME.get(err.toString()));
-      err = new MessageBuilder();
+      err = new LocalizableMessageBuilder();
     }
     else
     {
-      Message elementType = NewAttributePanel.getSchemaElementType(n, schema);
+      LocalizableMessage elementType = NewAttributePanel.getSchemaElementType(n, schema);
       if (elementType != null)
       {
         errors.add(ERR_CTRL_PANEL_OBJECTCLASS_NAME_ALREADY_IN_USE.get(n,
@@ -276,11 +277,11 @@
       if (!StaticUtils.isValidSchemaElement(n, 0, n.length(), err))
       {
         errors.add(ERR_CTRL_PANEL_OID_NOT_VALID.get(err.toString()));
-        err = new MessageBuilder();
+        err = new LocalizableMessageBuilder();
       }
       else
       {
-        Message elementType = NewAttributePanel.getSchemaElementType(n, schema);
+        LocalizableMessage elementType = NewAttributePanel.getSchemaElementType(n, schema);
         if (elementType != null)
         {
           errors.add(ERR_CTRL_PANEL_OID_ALREADY_IN_USE.get(n,
@@ -302,7 +303,7 @@
           }
           else
           {
-            Message elementType = NewAttributePanel.getSchemaElementType(
+            LocalizableMessage elementType = NewAttributePanel.getSchemaElementType(
                 alias, schema);
             if (elementType != null)
             {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewOrganizationPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewOrganizationPanel.java
index 67e69c1..61a1727 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewOrganizationPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewOrganizationPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 /*
@@ -48,6 +49,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -65,7 +67,7 @@
 import org.opends.guitools.controlpanel.browser.BrowserController;
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The panel used to create a new organization.
@@ -139,7 +141,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_NEW_ORGANIZATION_PANEL_TITLE.get();
   }
@@ -156,7 +158,7 @@
    * Returns the title of the progress dialog.
    * @return the title of the progress dialog.
    */
-  protected Message getProgressDialogTitle()
+  protected LocalizableMessage getProgressDialogTitle()
   {
     return INFO_CTRL_NEW_ORGANIZATION_PANEL_TITLE.get();
   }
@@ -164,7 +166,7 @@
   /**
    * {@inheritDoc}
    */
-  protected void checkSyntax(ArrayList<Message> errors)
+  protected void checkSyntax(ArrayList<LocalizableMessage> errors)
   {
     for (JLabel label : labels)
     {
@@ -172,7 +174,7 @@
     }
 
     JTextField[] requiredFields = {name};
-    Message[] msgs = {ERR_CTRL_PANEL_NAME_OF_ORGANIZATION_REQUIRED.get()};
+    LocalizableMessage[] msgs = {ERR_CTRL_PANEL_NAME_OF_ORGANIZATION_REQUIRED.get()};
     for (int i=0; i<requiredFields.length; i++)
     {
       String v = requiredFields[i].getText().trim();
@@ -190,12 +192,12 @@
   private void createLayout()
   {
     GridBagConstraints gbc = new GridBagConstraints();
-    Message[] ls = {
+    LocalizableMessage[] ls = {
         INFO_CTRL_PANEL_NEW_ORGANIZATION_NAME_LABEL.get(),
         INFO_CTRL_PANEL_NEW_ORGANIZATION_DESCRIPTION_LABEL.get(),
         INFO_CTRL_PANEL_NEW_ORGANIZATION_ENTRY_DN_LABEL.get()};
     int i = 0;
-    for (Message l : ls)
+    for (LocalizableMessage l : ls)
     {
       labels[i].setText(l.toString());
       i++;
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewOrganizationalUnitPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewOrganizationalUnitPanel.java
index a1c293a..2d2a99d 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewOrganizationalUnitPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewOrganizationalUnitPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -39,7 +40,7 @@
 import org.opends.guitools.controlpanel.browser.BrowserController;
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -105,7 +106,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_NEW_OU_PANEL_TITLE.get();
   }
@@ -121,7 +122,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getProgressDialogTitle()
+  protected LocalizableMessage getProgressDialogTitle()
   {
     return INFO_CTRL_PANEL_NEW_OU_PANEL_TITLE.get();
   }
@@ -129,7 +130,7 @@
   /**
    * {@inheritDoc}
    */
-  protected void checkSyntax(ArrayList<Message> errors)
+  protected void checkSyntax(ArrayList<LocalizableMessage> errors)
   {
     for (JLabel label : labels)
     {
@@ -137,7 +138,7 @@
     }
 
     JTextField[] requiredFields = {name};
-    Message[] msgs = {ERR_CTRL_PANEL_NAME_OF_OU_REQUIRED.get()};
+    LocalizableMessage[] msgs = {ERR_CTRL_PANEL_NAME_OF_OU_REQUIRED.get()};
     for (int i=0; i<requiredFields.length; i++)
     {
       String v = requiredFields[i].getText().trim();
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewUserPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewUserPanel.java
index 9179482..b4198ae 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewUserPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NewUserPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -46,7 +47,7 @@
 import org.opends.guitools.controlpanel.browser.BrowserController;
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -133,7 +134,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_NEW_USER_PANEL_TITLE.get();
   }
@@ -149,7 +150,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getProgressDialogTitle()
+  protected LocalizableMessage getProgressDialogTitle()
   {
     return INFO_CTRL_PANEL_NEW_USER_PANEL_TITLE.get();
   }
@@ -157,7 +158,7 @@
   /**
    * {@inheritDoc}
    */
-  protected void checkSyntax(ArrayList<Message> errors)
+  protected void checkSyntax(ArrayList<LocalizableMessage> errors)
   {
     for (JLabel label : labels)
     {
@@ -165,7 +166,7 @@
     }
 
     JTextField[] requiredFields = {lastName, commonName};
-    Message[] msgs = {ERR_CTRL_PANEL_USER_LAST_NAME_REQUIRED.get(),
+    LocalizableMessage[] msgs = {ERR_CTRL_PANEL_USER_LAST_NAME_REQUIRED.get(),
         ERR_CTRL_PANEL_USER_COMMON_NAME_REQUIRED.get()
     };
     for (int i=0; i<requiredFields.length; i++)
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 a450f8d..39b64cd 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
@@ -52,7 +52,7 @@
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.util.ConfigReader;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.client.ManagementContext;
 import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor;
 import org.opends.server.admin.client.ldap.LDAPManagementContext;
@@ -91,7 +91,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_NEW_VLV_INDEX_TITLE.get();
   }
@@ -133,7 +133,7 @@
    */
   public void okClicked()
   {
-    List<Message> errors = checkErrors(true);
+    List<LocalizableMessage> errors = checkErrors(true);
     if (errors.isEmpty())
     {
       ProgressDialog dlg = new ProgressDialog(
@@ -230,7 +230,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       return INFO_CTRL_PANEL_NEW_VLV_INDEX_TASK_DESCRIPTION.get(
           indexName, backendID);
@@ -240,7 +240,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NoItemSelectedPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NoItemSelectedPanel.java
index b665c77..5367078 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NoItemSelectedPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/NoItemSelectedPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -35,7 +36,7 @@
 import javax.swing.JPanel;
 
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A simple panel containing a message.
@@ -44,7 +45,7 @@
 public class NoItemSelectedPanel extends JPanel
 {
   private JLabel l;
-  private Message msg;
+  private LocalizableMessage msg;
   private static final long serialVersionUID = -8288525745479095426L;
 
   /**
@@ -65,7 +66,7 @@
    * Sets the message to be displayed.
    * @param text the message to be displayed.
    */
-  public void setMessage(Message text)
+  public void setMessage(LocalizableMessage text)
   {
     msg = text;
     l.setText(text.toString());
@@ -75,7 +76,7 @@
    * Returns the displayed message.
    * @return the displayed message.
    */
-  public Message getMessage()
+  public LocalizableMessage getMessage()
   {
     return msg;
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ObjectClassEditorPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ObjectClassEditorPanel.java
index aadbee8..d9f8bbd 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ObjectClassEditorPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ObjectClassEditorPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -43,7 +44,7 @@
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.ui.components.AddRemovePanel;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.ObjectClass;
 import org.opends.server.types.ObjectClassType;
 import org.opends.server.types.Schema;
@@ -169,7 +170,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_EDIT_OBJECTCLASS_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ProgressDialog.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ProgressDialog.java
index 6c01ba4..295713b 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ProgressDialog.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ProgressDialog.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -56,7 +57,7 @@
 import org.opends.guitools.controlpanel.ui.components.BasicExpander;
 import org.opends.guitools.controlpanel.util.ApplicationPrintStream;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The dialog that is used to display progress in a task.
@@ -76,7 +77,7 @@
    * @param info the control panel information.
    */
   public ProgressDialog(JFrame parentFrame, Component relativeTo,
-      Message title, ControlPanelInfo info)
+      LocalizableMessage title, ControlPanelInfo info)
   {
     super(parentFrame, getPanel(info));
     Utilities.centerGoldenMean(this, relativeTo);
@@ -171,7 +172,7 @@
    * dialog.
    * @param text the text to be displayed.
    */
-  public void setSummary(Message text)
+  public void setSummary(LocalizableMessage text)
   {
     progressPanel.setSummary(text);
   }
@@ -239,7 +240,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTitle()
+    public LocalizableMessage getTitle()
     {
       return null;
     }
@@ -285,13 +286,13 @@
      * dialog.
      * @param msg the text to be displayed.
      */
-    public void setSummary(Message msg)
+    public void setSummary(LocalizableMessage msg)
     {
       errorPane.setText(msg.toString());
 
       if (!details.isSelected() && isVisible())
       {
-        Message wrappedText = Utilities.wrapHTML(msg, 70);
+        LocalizableMessage wrappedText = Utilities.wrapHTML(msg, 70);
         JEditorPane pane = new JEditorPane();
         pane.setContentType("text/html");
         pane.setText(wrappedText.toString());
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java
index b4aa838..632b951 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RebuildIndexPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -62,7 +63,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.IndexCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.guitools.controlpanel.util.ViewPositions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The panel that appears when the user wants to rebuild indexes.
@@ -203,7 +204,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_REBUILD_INDEXES_TITLE.get();
   }
@@ -315,7 +316,7 @@
     setPrimaryValid(lBaseDN);
     setSecondaryValid(addRemove.getSelectedLabel());
 
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 
     String baseDN = getSelectedBaseDN();
 
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RefreshOptionsPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RefreshOptionsPanel.java
index 6cfe4b8..7a82852 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RefreshOptionsPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RefreshOptionsPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.ui;
 
@@ -37,7 +38,7 @@
 
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The panel that displays the refresh options of the control panel.  Basically
@@ -67,7 +68,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_REFRESH_PANEL_TITLE.get();
   }
@@ -145,7 +146,7 @@
     isCanceled = true;
 
     setPrimaryValid(lPeriod);
-    LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
     long t = -1;
     try
     {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ResetUserPasswordPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ResetUserPasswordPanel.java
index 55bff09..ae3708a 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ResetUserPasswordPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/ResetUserPasswordPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -41,7 +42,7 @@
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Panel that appears when the user wants to change the password of a user.
@@ -105,7 +106,7 @@
    */
   public void okClicked()
   {
-    final ArrayList<Message> errors = new ArrayList<Message>();
+    final ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
 
     setPrimaryValid(lPassword);
     setPrimaryValid(lConfirmPassword);
@@ -160,7 +161,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_RESET_USER_PASSWORD_TITLE.get();
   }
@@ -184,7 +185,7 @@
     gbc.weighty = 0.0;
     gbc.fill = GridBagConstraints.HORIZONTAL;
 
-    Message[] strings =
+    LocalizableMessage[] strings =
     {
         INFO_CTRL_PANEL_RESET_USER_PASSWORD_DN_LABEL.get(),
         INFO_CTRL_PANEL_RESET_USER_PASSWORD_NAME_LABEL.get(),
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RestorePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RestorePanel.java
index ba33c12..280a67e 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RestorePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RestorePanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -52,7 +53,7 @@
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.RestoreDB;
 
 /**
@@ -80,7 +81,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_RESTORE_PANEL_TITLE.get();
   }
@@ -167,7 +168,7 @@
    */
   protected void verifyBackupClicked()
   {
-    LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 //  Launch the task in another progress dialog.
     ProgressDialog dlg = new ProgressDialog(
         Utilities.createFrame(),
@@ -259,7 +260,7 @@
     setPrimaryValid(lAvailableBackups);
     setPrimaryValid(lBackupID);
 
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 
     BackupDescriptor backup = getSelectedBackup();
 
@@ -402,7 +403,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       if (verify)
       {
@@ -418,7 +419,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RootMonitoringPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RootMonitoringPanel.java
index 169826a..bdc75a9 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RootMonitoringPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/RootMonitoringPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.ui;
 
@@ -40,7 +41,7 @@
 import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
 import org.opends.guitools.controlpanel.util.ConfigFromDirContext;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The panel displaying the root monitor panel.
@@ -92,7 +93,7 @@
 
     gbc.insets.bottom = 0;
     gbc.insets.top = 10;
-    Message[] labels = {
+    LocalizableMessage[] labels = {
         INFO_CTRL_PANEL_OPEN_CONNECTIONS_LABEL.get(),
         INFO_CTRL_PANEL_MAX_CONNECTIONS_LABEL.get(),
         INFO_CTRL_PANEL_TOTAL_CONNECTIONS_LABEL.get(),
@@ -187,7 +188,7 @@
         upSeconds %= 3600;
         long upMinutes = (upSeconds / 60);
         upSeconds %= 60;
-        Message upTimeStr =
+        LocalizableMessage upTimeStr =
           INFO_MONITOR_UPTIME.get(upDays, upHours, upMinutes, upSeconds);
 
         upTime.setText(upTimeStr.toString());
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SchemaBrowserRightPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SchemaBrowserRightPanel.java
index 205bf1d..ea71104 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SchemaBrowserRightPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SchemaBrowserRightPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -40,7 +41,7 @@
  ConfigurationElementCreatedListener;
 import org.opends.guitools.controlpanel.event.SchemaElementSelectionListener;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.api.MatchingRule;
 import org.opends.server.types.AttributeType;
@@ -101,7 +102,7 @@
    * @param msg the message.
    *
    */
-  public void displayMessage(Message msg)
+  public void displayMessage(LocalizableMessage msg)
   {
     schemaElementPanel = null;
     noEntryPanel.setMessage(msg);
@@ -343,7 +344,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_SCHEMA_BROWSER_RIGHT_PANEL_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SelectObjectClassesPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SelectObjectClassesPanel.java
index 9d37863..535c78e 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SelectObjectClassesPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/SelectObjectClassesPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.guitools.controlpanel.ui;
 
@@ -42,7 +43,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.
  SchemaElementComboBoxCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.ObjectClass;
 import org.opends.server.types.Schema;
 
@@ -124,7 +125,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_SUPERIOR_OBJECTCLASSES_TITLE.get();
   }
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 2931716..4265f69 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
@@ -87,8 +87,8 @@
 import org.opends.guitools.controlpanel.ui.nodes.BrowserNodeInfo;
 import org.opends.guitools.controlpanel.ui.nodes.DndBrowserNodes;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.schema.SchemaConstants;
 import org.opends.server.types.*;
 import org.opends.server.util.Base64;
@@ -139,8 +139,8 @@
 
   // Map containing as key the attribute name and as value a localizable
   // message.
-  static Map<String, Message> hmFriendlyAttrNames =
-    new HashMap<String, Message>();
+  static Map<String, LocalizableMessage> hmFriendlyAttrNames =
+    new HashMap<String, LocalizableMessage>();
   // Map containing as key an object class and as value the preferred naming
   // attribute for the objectclass.
   static Map<String, String> hmNameAttrNames = new HashMap<String, String>();
@@ -248,7 +248,7 @@
     hmOrdereredAttrNames.put("domain", new String[]{"dc", "description"});
   };
 
-  private Message NAME = INFO_CTRL_PANEL_NAME_LABEL.get();
+  private LocalizableMessage NAME = INFO_CTRL_PANEL_NAME_LABEL.get();
 
   /**
    * Default constructor.
@@ -652,7 +652,7 @@
 
   private JLabel getLabelForAttribute(String attrName, CustomSearchResult sr)
   {
-    MessageBuilder l = new MessageBuilder();
+    LocalizableMessageBuilder l = new LocalizableMessageBuilder();
     int index = attrName.indexOf(";");
     String basicAttrName;
     String subType;
@@ -685,7 +685,7 @@
     }
     else
     {
-      Message friendly = hmFriendlyAttrNames.get(basicAttrName.toLowerCase());
+      LocalizableMessage friendly = hmFriendlyAttrNames.get(basicAttrName.toLowerCase());
       if (friendly == null)
       {
         l.append(attrName);
@@ -934,7 +934,7 @@
       {
         panel.add(
             Utilities.createDefaultLabel(
-                Message.raw(Utilities.OBFUSCATED_VALUE)), gbc);
+                LocalizableMessage.raw(Utilities.OBFUSCATED_VALUE)), gbc);
       }
       else if (!isBinary)
       {
@@ -948,14 +948,14 @@
         if (values.size() > 15)
         {
           ta = Utilities.createNonEditableTextArea(
-              Message.raw(Utilities.getStringFromCollection(sValues, "\n")),
+              LocalizableMessage.raw(Utilities.getStringFromCollection(sValues, "\n")),
               15, 20);
           toAdd = Utilities.createScrollPane(ta);
         }
         else
         {
           ta = Utilities.createNonEditableTextArea(
-              Message.raw(Utilities.getStringFromCollection(sValues, "\n")),
+              LocalizableMessage.raw(Utilities.getStringFromCollection(sValues, "\n")),
               values.size(), 20);
           toAdd = ta;
         }
@@ -1133,14 +1133,14 @@
           if (values.size() > 15)
           {
             ta = Utilities.createTextArea(
-                Message.raw(Utilities.getStringFromCollection(sValues, "\n")),
+                LocalizableMessage.raw(Utilities.getStringFromCollection(sValues, "\n")),
                 15, 20);
             toAdd = Utilities.createScrollPane(ta);
           }
           else
           {
             ta = Utilities.createTextAreaWithBorder(
-                Message.raw(Utilities.getStringFromCollection(sValues, "\n")),
+                LocalizableMessage.raw(Utilities.getStringFromCollection(sValues, "\n")),
                 values.size(), 20);
             toAdd = ta;
           }
@@ -1325,7 +1325,7 @@
   {
     Entry entry = null;
 
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
 
     try
     {
@@ -1351,7 +1351,7 @@
       {
         setPrimaryInvalid(hmLabels.get(attrName));
         setPrimaryInvalid(hmLabels.get(getConfirmPasswordKey(attrName)));
-        Message msg = ERR_CTRL_PANEL_PASSWORD_DO_NOT_MATCH.get();
+        LocalizableMessage msg = ERR_CTRL_PANEL_PASSWORD_DO_NOT_MATCH.get();
         if (!errors.contains(msg))
         {
           errors.add(msg);
@@ -1728,9 +1728,9 @@
 
   private void addBrowseClicked(String attrName, JTextComponent textComponent)
   {
-    Message previousTitle = null;
+    LocalizableMessage previousTitle = null;
     LDAPEntrySelectionPanel.Filter previousFilter = null;
-    Message title;
+    LocalizableMessage title;
     LDAPEntrySelectionPanel.Filter filter;
     if (browseEntriesDlg == null)
     {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java
index 39bbafd..6a9cc90 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StandardAttributePanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -48,8 +49,8 @@
 import org.opends.guitools.controlpanel.ui.components.TitlePanel;
 import org.opends.guitools.controlpanel.util.LowerCaseComparator;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.MatchingRule;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.ObjectClass;
@@ -62,8 +63,8 @@
 public class StandardAttributePanel extends SchemaElementPanel
 {
   private static final long serialVersionUID = -7922968631524763675L;
-  private TitlePanel titlePanel = new TitlePanel(Message.EMPTY,
-      Message.EMPTY);
+  private TitlePanel titlePanel = new TitlePanel(LocalizableMessage.EMPTY,
+      LocalizableMessage.EMPTY);
   private JLabel name = Utilities.createDefaultLabel();
   private JLabel parent = Utilities.createDefaultLabel();
   private JLabel oid = Utilities.createDefaultLabel();
@@ -93,7 +94,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_STANDARD_ATTRIBUTE_TITLE.get();
   }
@@ -157,7 +158,7 @@
     gbc.gridwidth = 1;
     gbc.fill = GridBagConstraints.HORIZONTAL;
 
-    Message[] labels = {
+    LocalizableMessage[] labels = {
         INFO_CTRL_PANEL_ATTRIBUTE_NAME_LABEL.get(),
         INFO_CTRL_PANEL_ATTRIBUTE_PARENT_LABEL.get(),
         INFO_CTRL_PANEL_ATTRIBUTE_OID_LABEL.get(),
@@ -186,7 +187,7 @@
       c.add(values[i], gbc);
       gbc.gridy ++;
     }
-    labels = new Message[] {
+    labels = new LocalizableMessage[] {
         INFO_CTRL_PANEL_REQUIRED_BY_LABEL.get(),
         INFO_CTRL_PANEL_ALLOWED_BY_LABEL.get()
         };
@@ -262,7 +263,7 @@
     {
       n = NOT_APPLICABLE.toString();
     }
-    titlePanel.setDetails(Message.raw(n));
+    titlePanel.setDetails(LocalizableMessage.raw(n));
     name.setText(n);
     AttributeType superior = attr.getSuperiorType();
     if (superior == null)
@@ -366,13 +367,13 @@
    * @return the message describing the attribute type (operational, single
    * valued, etc.).
    */
-  static Message getTypeValue(AttributeType attr)
+  static LocalizableMessage getTypeValue(AttributeType attr)
   {
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     Boolean[] props = {attr.isOperational(), attr.isSingleValue(),
         attr.isNoUserModification(), attr.isCollective(),
         attr.isObsolete()};
-    Message[][] values = {
+    LocalizableMessage[][] values = {
         {INFO_CTRL_PANEL_ATTRIBUTE_OPERATIONAL_LABEL.get(), null},
         {INFO_CTRL_PANEL_ATTRIBUTE_SINGLE_VALUED_LABEL.get(),
           INFO_CTRL_PANEL_ATTRIBUTE_MULTI_VALUED_LABEL.get()},
@@ -382,7 +383,7 @@
     int i = 0;
     for (Boolean prop : props)
     {
-      Message value = prop ? values[i][0] : values[i][1];
+      LocalizableMessage value = prop ? values[i][0] : values[i][1];
       if (value != null)
       {
         if (mb.length() > 0)
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StandardObjectClassPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StandardObjectClassPanel.java
index bf3d7bf..4f1a7e5 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StandardObjectClassPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StandardObjectClassPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -52,8 +53,8 @@
 import org.opends.guitools.controlpanel.ui.components.TitlePanel;
 import org.opends.guitools.controlpanel.util.LowerCaseComparator;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.CommonSchemaElements;
 import org.opends.server.types.ObjectClass;
@@ -66,7 +67,7 @@
 public class StandardObjectClassPanel extends SchemaElementPanel
 {
   private static final long serialVersionUID = 5561268287795223026L;
-  private TitlePanel titlePanel = new TitlePanel(Message.EMPTY, Message.EMPTY);
+  private TitlePanel titlePanel = new TitlePanel(LocalizableMessage.EMPTY, LocalizableMessage.EMPTY);
 
   private JLabel lParent;
 
@@ -80,13 +81,13 @@
   private JList requiredAttributes = new JList(new DefaultListModel());
   private JList optionalAttributes = new JList(new DefaultListModel());
 
-  private static Message ABSTRACT_VALUE =
+  private static LocalizableMessage ABSTRACT_VALUE =
     INFO_CTRL_PANEL_OBJECTCLASS_ABSTRACT_LABEL.get();
-  private static Message STRUCTURAL_VALUE =
+  private static LocalizableMessage STRUCTURAL_VALUE =
     INFO_CTRL_PANEL_OBJECTCLASS_STRUCTURAL_LABEL.get();
-  private static Message AUXILIARY_VALUE =
+  private static LocalizableMessage AUXILIARY_VALUE =
     INFO_CTRL_PANEL_OBJECTCLASS_AUXILIARY_LABEL.get();
-  private static Message OBSOLETE_VALUE =
+  private static LocalizableMessage OBSOLETE_VALUE =
     INFO_CTRL_PANEL_OBJECTCLASS_OBSOLETE_LABEL.get();
 
   private Map<String, AttributeType> hmAttrs =
@@ -105,7 +106,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_STANDARD_OBJECTCLASS_TITLE.get();
   }
@@ -152,7 +153,7 @@
     requiredAttributes.setVisibleRowCount(5);
     optionalAttributes.setVisibleRowCount(9);
 
-    Message[] labels = {
+    LocalizableMessage[] labels = {
         INFO_CTRL_PANEL_OBJECTCLASS_NAME_LABEL.get(),
         INFO_CTRL_PANEL_OBJECTCLASS_PARENT_LABEL.get(),
         INFO_CTRL_PANEL_OBJECTCLASS_OID_LABEL.get(),
@@ -194,7 +195,7 @@
       c.add(values[i], gbc);
       gbc.gridy ++;
     }
-    labels = new Message[] {
+    labels = new LocalizableMessage[] {
         INFO_CTRL_PANEL_REQUIRED_ATTRIBUTES_LABEL.get(),
         INFO_CTRL_PANEL_OPTIONAL_ATTRIBUTES_LABEL.get()
         };
@@ -269,9 +270,9 @@
    * @param element the schema element.
    * @return the message describing the schema element origin (file, RFC, etc.).
    */
-  static Message getOrigin(CommonSchemaElements element)
+  static LocalizableMessage getOrigin(CommonSchemaElements element)
   {
-    MessageBuilder returnValue = new MessageBuilder();
+    LocalizableMessageBuilder returnValue = new LocalizableMessageBuilder();
     String fileName = element.getSchemaFile();
     String xOrigin = Utilities.getOrigin(element);
     if (xOrigin != null)
@@ -313,7 +314,7 @@
     {
       n = NOT_APPLICABLE.toString();
     }
-    titlePanel.setDetails(Message.raw(n));
+    titlePanel.setDetails(LocalizableMessage.raw(n));
     name.setText(n);
     parent.setText(getSuperiorText(oc));
     oid.setText(oc.getOID());
@@ -477,9 +478,9 @@
    * @return the message describing the object class type (structural, obsolete,
    * etc.) of the provided object class.
    */
-  static Message getTypeValue(ObjectClass oc)
+  static LocalizableMessage getTypeValue(ObjectClass oc)
   {
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     switch (oc.getObjectClassType())
     {
     case ABSTRACT:
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
index 745db96..105839f 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StatusGenericPanel.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;
 
@@ -94,9 +94,9 @@
 import org.opends.guitools.controlpanel.util.BackgroundTask;
 import org.opends.guitools.controlpanel.util.LowerCaseComparator;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.MessageDescriptor;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
+import org.forgerock.i18n.LocalizableMessageDescriptor;
 import org.opends.quicksetup.ui.CustomHTMLEditorKit;
 import org.opends.server.schema.SchemaConstants;
 import org.opends.server.types.ObjectClass;
@@ -124,11 +124,11 @@
   /**
    * The not applicable message.
    */
-  protected final static Message NOT_APPLICABLE =
+  protected final static LocalizableMessage NOT_APPLICABLE =
     INFO_NOT_APPLICABLE_LABEL.get();
 
-  private Message AUTHENTICATE = INFO_AUTHENTICATE_BUTTON_LABEL.get();
-  private Message START = INFO_START_BUTTON_LABEL.get();
+  private LocalizableMessage AUTHENTICATE = INFO_AUTHENTICATE_BUTTON_LABEL.get();
+  private LocalizableMessage START = INFO_START_BUTTON_LABEL.get();
 
   private ControlPanelInfo info;
 
@@ -173,7 +173,7 @@
    * Returns the title that will be used as title of the dialog.
    * @return the title that will be used as title of the dialog.
    */
-  public abstract Message getTitle();
+  public abstract LocalizableMessage getTitle();
 
   /**
    * Returns the buttons that the dialog where this panel is contained should
@@ -637,7 +637,7 @@
    * Displays a dialog with the provided list of error messages.
    * @param errors the error messages.
    */
-  protected void displayErrorDialog(Collection<Message> errors)
+  protected void displayErrorDialog(Collection<LocalizableMessage> errors)
   {
     Utilities.displayErrorDialog(Utilities.getParentDialog(this), errors);
   }
@@ -649,7 +649,7 @@
    * @return <CODE>true</CODE> if the user confirms and <CODE>false</CODE>
    * otherwise.
    */
-  protected boolean displayConfirmationDialog(Message title, Message msg)
+  protected boolean displayConfirmationDialog(LocalizableMessage title, LocalizableMessage msg)
   {
     return Utilities.displayConfirmationDialog(Utilities.getParentDialog(this),
         title, msg);
@@ -708,7 +708,7 @@
 
       RebuildIndexTask newTask = new RebuildIndexTask(getInfo(),
           progressDialog, baseDNs, indexes);
-      ArrayList<Message> errors = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
       for (Task task : getInfo().getTasks())
       {
         task.canLaunch(newTask, errors);
@@ -843,14 +843,14 @@
    * provided and the server is running.
    */
   protected void updateErrorPaneAndOKButtonIfAuthRequired(ServerDescriptor desc,
-      Message details)
+      LocalizableMessage details)
   {
     if (authenticationRequired(desc))
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(details);
       mb.append("<br><br>"+getAuthenticateHTML());
-      Message title = INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_SUMMARY.get();
+      LocalizableMessage title = INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_SUMMARY.get();
       updateErrorPane(errorPane, title, ColorAndFontConstants.errorTitleFont,
           mb.toMessage(), ColorAndFontConstants.defaultFont);
       SwingUtilities.invokeLater(new Runnable()
@@ -913,12 +913,12 @@
    * provided and the server is running.
    */
   protected void updateErrorPaneIfAuthRequired(ServerDescriptor desc,
-      Message details)
+      LocalizableMessage details)
   {
     if (authenticationRequired(desc))
     {
-      Message title = INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_SUMMARY.get();
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessage title = INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_SUMMARY.get();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(details);
       mb.append("<br><br>"+getAuthenticateHTML());
       updateErrorPane(errorPane, title, ColorAndFontConstants.errorTitleFont,
@@ -962,15 +962,15 @@
    * been provided and the server is running.
    */
   protected void updateErrorPaneIfServerRunningAndAuthRequired(
-      ServerDescriptor desc, Message detailsServerNotRunning,
-      Message authRequired)
+      ServerDescriptor desc, LocalizableMessage detailsServerNotRunning,
+      LocalizableMessage authRequired)
   {
     ServerDescriptor.ServerStatus status = desc.getStatus();
     if ((status != ServerDescriptor.ServerStatus.STARTED) &&
         (status != ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE))
     {
-      Message title = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessage title = INFO_CTRL_PANEL_SERVER_NOT_RUNNING_SUMMARY.get();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(detailsServerNotRunning);
       mb.append("<br><br>"+getStartServerHTML());
       updateErrorPane(errorPane, title, ColorAndFontConstants.errorTitleFont,
@@ -990,8 +990,8 @@
     }
     else if (authenticationRequired(desc))
     {
-      Message title = INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_SUMMARY.get();
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessage title = INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_SUMMARY.get();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(authRequired);
       mb.append("<br><br>"+getAuthenticateHTML());
       updateErrorPane(errorPane, title, ColorAndFontConstants.errorTitleFont,
@@ -1152,7 +1152,7 @@
    * Displays a message and hides the main panel.
    * @param msg the message to be displayed.
    */
-  protected void displayMessage(Message msg)
+  protected void displayMessage(LocalizableMessage msg)
   {
     message.setText(Utilities.applyFont(msg.toString(),
         ColorAndFontConstants.defaultFont));
@@ -1165,7 +1165,7 @@
    * @param title the title of the message to be displayed.
    * @param msg the message to be displayed.
    */
-  protected void displayErrorMessage(Message title, Message msg)
+  protected void displayErrorMessage(LocalizableMessage title, LocalizableMessage msg)
   {
     updateErrorPane(message, title, ColorAndFontConstants.errorTitleFont,
         msg, ColorAndFontConstants.defaultFont);
@@ -1190,8 +1190,8 @@
    * @param details the details message.
    * @param detailsFont the font to be used for the details.
    */
-  protected void updateErrorPane(JEditorPane pane, Message title,
-      Font titleFont, Message details, Font detailsFont)
+  protected void updateErrorPane(JEditorPane pane, LocalizableMessage title,
+      Font titleFont, LocalizableMessage details, Font detailsFont)
   {
     updatePane(pane, title, titleFont, details, detailsFont, PanelType.ERROR);
   }
@@ -1204,8 +1204,8 @@
    * @param details the details message.
    * @param detailsFont the font to be used for the details.
    */
-  protected void updateWarningPane(JEditorPane pane, Message title,
-      Font titleFont, Message details, Font detailsFont)
+  protected void updateWarningPane(JEditorPane pane, LocalizableMessage title,
+      Font titleFont, LocalizableMessage details, Font detailsFont)
   {
     updatePane(pane, title, titleFont, details, detailsFont, PanelType.WARNING);
   }
@@ -1218,8 +1218,8 @@
    * @param details the details message.
    * @param detailsFont the font to be used for the details.
    */
-  protected void updateConfirmationPane(JEditorPane pane, Message title,
-      Font titleFont, Message details, Font detailsFont)
+  protected void updateConfirmationPane(JEditorPane pane, LocalizableMessage title,
+      Font titleFont, LocalizableMessage details, Font detailsFont)
   {
     updatePane(pane, title, titleFont, details, detailsFont,
         PanelType.CONFIRMATION);
@@ -1258,8 +1258,8 @@
    * @param detailsFont the font to be used for the details.
    * @param type the type of panel.
    */
-  private void updatePane(final JEditorPane pane, Message title,
-      Font titleFont, Message details, Font detailsFont, PanelType type)
+  private void updatePane(final JEditorPane pane, LocalizableMessage title,
+      Font titleFont, LocalizableMessage details, Font detailsFont, PanelType type)
   {
     String text;
     switch (type)
@@ -1283,8 +1283,8 @@
     }
     if (!text.equals(lastDisplayedError))
     {
-      Message wrappedTitle = Utilities.wrapHTML(title, 80);
-      Message wrappedDetails = Utilities.wrapHTML(details, 90);
+      LocalizableMessage wrappedTitle = Utilities.wrapHTML(title, 80);
+      LocalizableMessage wrappedDetails = Utilities.wrapHTML(details, 90);
 
       JEditorPane wrappedPane = Utilities.makeHtmlPane(null, pane.getFont());
       String wrappedText;
@@ -1655,11 +1655,11 @@
    * error code).
    * @param dialog the progress dialog.
    */
-  protected void launchOperation(final Task task, Message initialSummary,
-      final Message successSummary, final Message successDetail,
-      final Message errorSummary,
-      final Message errorDetail,
-      final MessageDescriptor.Arg1<Number> errorDetailCode,
+  protected void launchOperation(final Task task, LocalizableMessage initialSummary,
+      final LocalizableMessage successSummary, final LocalizableMessage successDetail,
+      final LocalizableMessage errorSummary,
+      final LocalizableMessage errorDetail,
+      final LocalizableMessageDescriptor.Arg1<Number> errorDetailCode,
       final ProgressDialog dialog)
   {
     launchOperation(task, initialSummary, successSummary, successDetail,
@@ -1687,11 +1687,11 @@
    * @param resetLogs whether the contents of the progress dialog should be
    * reset or not.
    */
-  protected void launchOperation(final Task task, Message initialSummary,
-      final Message successSummary, final Message successDetail,
-      final Message errorSummary,
-      final Message errorDetail,
-      final MessageDescriptor.Arg1<Number> errorDetailCode,
+  protected void launchOperation(final Task task, LocalizableMessage initialSummary,
+      final LocalizableMessage successSummary, final LocalizableMessage successDetail,
+      final LocalizableMessage errorSummary,
+      final LocalizableMessage errorDetail,
+      final LocalizableMessageDescriptor.Arg1<Number> errorDetailCode,
       final ProgressDialog dialog, boolean resetLogs)
   {
     launchOperation(task, initialSummary, successSummary, successDetail,
@@ -1721,11 +1721,11 @@
    * reset or not.
    * @param info the ControlPanelInfo.
    */
-  public static void launchOperation(final Task task, Message initialSummary,
-      final Message successSummary, final Message successDetail,
-      final Message errorSummary,
-      final Message errorDetail,
-      final MessageDescriptor.Arg1<Number> errorDetailCode,
+  public static void launchOperation(final Task task, LocalizableMessage initialSummary,
+      final LocalizableMessage successSummary, final LocalizableMessage successDetail,
+      final LocalizableMessage errorSummary,
+      final LocalizableMessage errorDetail,
+      final LocalizableMessageDescriptor.Arg1<Number> errorDetailCode,
       final ProgressDialog dialog, boolean resetLogs,
       final ControlPanelInfo info)
   {
@@ -1746,7 +1746,7 @@
           ColorAndFontConstants.progressFont));
     }
     dialog.setEnabledClose(false);
-    dialog.setSummary(Message.raw(
+    dialog.setSummary(LocalizableMessage.raw(
         Utilities.applyFont(initialSummary.toString(),
             ColorAndFontConstants.defaultFont)));
     dialog.getProgressBar().setVisible(true);
@@ -1806,7 +1806,7 @@
                   sThrowable = t.toString();
                 }
               }
-              MessageBuilder mb = new MessageBuilder();
+              LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
               mb.append(errorDetailCode.get(task.getReturnCode()));
               mb.append(
                   "  "+INFO_CTRL_PANEL_DETAILS_THROWABLE.get(sThrowable));
@@ -1816,7 +1816,7 @@
             }
             else if (errorDetail != null)
             {
-              MessageBuilder mb = new MessageBuilder();
+              LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
               mb.append(errorDetail);
               mb.append(
                   "  "+INFO_CTRL_PANEL_DETAILS_THROWABLE.get(t.toString()));
@@ -1850,7 +1850,7 @@
         }
         if (summaryMsg != null)
         {
-          dialog.setSummary(Message.raw(summaryMsg));
+          dialog.setSummary(LocalizableMessage.raw(summaryMsg));
         }
         dialog.setEnabledClose(true);
         dialog.getProgressBar().setVisible(false);
@@ -1875,8 +1875,8 @@
    * @param errMsg the error message to use to update the error list if the
    * provided value is not valid.
    */
-  protected void checkIntValue(Collection<Message> errors, String stringValue,
-      int minValue, int maxValue, Message errMsg)
+  protected void checkIntValue(Collection<LocalizableMessage> errors, String stringValue,
+      int minValue, int maxValue, LocalizableMessage errMsg)
   {
     try
     {
@@ -1900,7 +1900,7 @@
    */
   protected void startServer()
   {
-    LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
     ProgressDialog progressDialog = new ProgressDialog(
         Utilities.createFrame(),
         Utilities.getParentDialog(this),
@@ -1936,7 +1936,7 @@
    */
   protected void stopServer()
   {
-    LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
     ProgressDialog progressDialog = new ProgressDialog(
         Utilities.createFrame(),
         Utilities.getParentDialog(this),
@@ -1979,7 +1979,7 @@
    */
   protected void restartServer()
   {
-    LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
     ProgressDialog progressDialog = new ProgressDialog(
         Utilities.createFrame(),
         Utilities.getParentDialog(this),
@@ -2214,7 +2214,7 @@
    * @return the label to be used in panels (with ':') based on the definition
    * of the monitoring attribute.
    */
-  protected static Message getLabel(MonitoringAttributes attr)
+  protected static LocalizableMessage getLabel(MonitoringAttributes attr)
   {
     return INFO_CTRL_PANEL_OPERATION_NAME_AS_LABEL.get(
         attr.getMessage().toString());
@@ -2250,7 +2250,7 @@
    * @param label the label to be marked as invalid if errors where encountered.
    */
   protected void addScheduleErrors(ScheduleType schedule,
-      Collection<Message> errors, JLabel label)
+      Collection<LocalizableMessage> errors, JLabel label)
   {
     if (!isServerRunning())
     {
@@ -2285,7 +2285,7 @@
    * @param errors the list of error messages.
    */
   protected void checkCompatibleSuperiors(Set<ObjectClass> objectClassSuperiors,
-      ObjectClassType objectClassType, List<Message> errors)
+      ObjectClassType objectClassType, List<LocalizableMessage> errors)
   {
     SortedSet<String> notCompatibleClasses =
       new TreeSet<String>(new LowerCaseComparator());
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
index 2df294b..1bd82d4 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/StatusPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -65,8 +66,8 @@
 import org.opends.guitools.controlpanel.ui.renderer.CustomCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.guitools.controlpanel.util.ViewPositions;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.DN;
 import org.opends.server.types.OpenDsException;
 
@@ -190,7 +191,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_STATUS_PANEL_TITLE.get();
   }
@@ -252,12 +253,12 @@
         if (!desc.isAuthenticated())
         {
           errorPaneVisible = true;
-          MessageBuilder mb = new MessageBuilder();
+          LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
           mb.append(
               INFO_CTRL_PANEL_AUTH_REQUIRED_TO_BROWSE_MONITORING_SUMMARY.
               get());
           mb.append("<br><br>"+getAuthenticateHTML());
-          Message title =
+          LocalizableMessage title =
             INFO_CTRL_PANEL_AUTHENTICATION_REQUIRED_SUMMARY.get();
           updateErrorPane(errorPane, title,
               ColorAndFontConstants.errorTitleFont,
@@ -268,11 +269,11 @@
         ServerDescriptor.ServerStatus.NOT_CONNECTED_TO_REMOTE)
       {
         errorPaneVisible = true;
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         mb.append(INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_DETAILS.get(
             desc.getHostname()));
         mb.append("<br><br>"+getAuthenticateHTML());
-        Message title =
+        LocalizableMessage title =
           INFO_CTRL_PANEL_CANNOT_CONNECT_TO_REMOTE_SUMMARY.get();
         updateErrorPane(errorPane, title,
             ColorAndFontConstants.errorTitleFont,
@@ -285,14 +286,14 @@
     }
     else
     {
-      ArrayList<Message> msgs = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> msgs = new ArrayList<LocalizableMessage>();
       for (OpenDsException oe : exceptions)
       {
         msgs.add(oe.getMessageObject());
       }
-      Message title = ERR_CTRL_PANEL_ERROR_READING_CONFIGURATION_SUMMARY.get();
-      MessageBuilder mb = new MessageBuilder();
-      for (Message error : msgs)
+      LocalizableMessage title = ERR_CTRL_PANEL_ERROR_READING_CONFIGURATION_SUMMARY.get();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
+      for (LocalizableMessage error : msgs)
       {
         if (mb.length() > 0)
         {
@@ -626,7 +627,7 @@
     l = Utilities.createPrimaryLabel(
         INFO_CTRL_PANEL_OPEN_CONNECTIONS_LABEL.get());
     auxPanel.add(l, gbc);
-    currentConnections = new SelectableLabelWithHelpIcon(Message.EMPTY, null);
+    currentConnections = new SelectableLabelWithHelpIcon(LocalizableMessage.EMPTY, null);
 
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = 5;
@@ -696,7 +697,7 @@
         ColorAndFontConstants.defaultFont);
     opendsVersion = Utilities.makeHtmlPane("",
         ColorAndFontConstants.defaultFont);
-    javaVersion = new SelectableLabelWithHelpIcon(Message.EMPTY, null);
+    javaVersion = new SelectableLabelWithHelpIcon(LocalizableMessage.EMPTY, null);
     adminConnector = Utilities.makeHtmlPane("",
         ColorAndFontConstants.defaultFont);
 
@@ -866,7 +867,7 @@
 
   private String getStatusLabel(ServerDescriptor desc)
   {
-    Message status;
+    LocalizableMessage status;
     switch (desc.getStatus())
     {
     case STARTED:
@@ -899,7 +900,7 @@
     return status.toString();
   }
 
-  private void setTitleBorder(JPanel p, Message title)
+  private void setTitleBorder(JPanel p, LocalizableMessage title)
   {
     p.setBorder(Utilities.makeTitledBorder(title));
     p.getAccessibleContext().setAccessibleName(title.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 327df66..013bfa4 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
@@ -63,7 +63,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.AttributeCellEditor;
 import org.opends.guitools.controlpanel.ui.renderer.LDAPEntryTableCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.*;
 import org.opends.server.util.LDIFReader;
 import org.opends.server.util.ServerConstants;
@@ -456,8 +456,8 @@
       new TreeSet<AttributeValuePair>(this);
     Set<String> requiredAttrs = new HashSet<String>();
     private final String[] COLUMN_NAMES = new String[] {
-        getHeader(Message.raw("Attribute"), 40),
-        getHeader(Message.raw("Value", 40))};
+        getHeader(LocalizableMessage.raw("Attribute"), 40),
+        getHeader(LocalizableMessage.raw("Value", 40))};
     private int sortColumn = 0;
     private boolean sortAscending = true;
 
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TaskToSchedulePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TaskToSchedulePanel.java
index 481c510..f263693 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TaskToSchedulePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/TaskToSchedulePanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -60,7 +61,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.
  NoLeftInsetCategoryComboBoxRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.backends.task.RecurringTask;
 
 /**
@@ -139,13 +140,13 @@
   private Component monthlyPanel;
   private Component cronPanel;
 
-  private Message LAUNCH_NOW = INFO_CTRL_PANEL_LAUNCH_NOW.get();
-  private Message LAUNCH_LATER = INFO_CTRL_PANEL_LAUNCH_LATER.get();
-  private Message LAUNCH_DAILY = INFO_CTRL_PANEL_TASK_TO_SCHEDULE_DAILY.get();
-  private Message LAUNCH_WEEKLY = INFO_CTRL_PANEL_TASK_TO_SCHEDULE_WEEKLY.get();
-  private Message LAUNCH_MONTHLY =
+  private LocalizableMessage LAUNCH_NOW = INFO_CTRL_PANEL_LAUNCH_NOW.get();
+  private LocalizableMessage LAUNCH_LATER = INFO_CTRL_PANEL_LAUNCH_LATER.get();
+  private LocalizableMessage LAUNCH_DAILY = INFO_CTRL_PANEL_TASK_TO_SCHEDULE_DAILY.get();
+  private LocalizableMessage LAUNCH_WEEKLY = INFO_CTRL_PANEL_TASK_TO_SCHEDULE_WEEKLY.get();
+  private LocalizableMessage LAUNCH_MONTHLY =
     INFO_CTRL_PANEL_TASK_TO_SCHEDULE_MONTHLY.get();
-  private Message CRON = INFO_CTRL_PANEL_TASK_TO_SCHEDULE_CRON.get();
+  private LocalizableMessage CRON = INFO_CTRL_PANEL_TASK_TO_SCHEDULE_CRON.get();
 
   private ScheduleType schedule;
 
@@ -302,7 +303,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_TASK_TO_SCHEDULE_TITLE.get(taskName);
   }
@@ -313,7 +314,7 @@
   public void okClicked()
   {
     schedule = null;
-    ArrayList<Message> errorMessages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>();
 
     updateErrorMessages(errorMessages);
 
@@ -333,7 +334,7 @@
    * collection of messages with the errors that have been found.
    * @param errorMessages the collection of messages to be updated.
    */
-  private void updateErrorMessages(Collection<Message> errorMessages)
+  private void updateErrorMessages(Collection<LocalizableMessage> errorMessages)
   {
     Object type =
       ((CategorizedComboBoxElement)scheduleType.getSelectedItem()).getValue();
@@ -365,7 +366,7 @@
    * The associated labels are also updated.
    * @param errorMessages the collection of messages to be updated.
    */
-  private void updateLaunchLaterErrorMessages(Collection<Message> errorMessages)
+  private void updateLaunchLaterErrorMessages(Collection<LocalizableMessage> errorMessages)
   {
     setPrimaryValid(lTime);
     setPrimaryValid(lDay);
@@ -426,7 +427,7 @@
    * The associated labels are also updated.
    * @param errorMessages the collection of messages to be updated.
    */
-  private void updateLaunchDailyErrorMessages(Collection<Message> errorMessages)
+  private void updateLaunchDailyErrorMessages(Collection<LocalizableMessage> errorMessages)
   {
     setPrimaryValid(lDailyTime);
 
@@ -442,7 +443,7 @@
    * @param errorMessages the collection of messages to be updated.
    */
   private void updateLaunchWeeklyErrorMessages(
-      Collection<Message> errorMessages)
+      Collection<LocalizableMessage> errorMessages)
   {
     setPrimaryValid(lWeeklyTime);
     setPrimaryValid(lWeeklyDays);
@@ -474,7 +475,7 @@
    * @param errorMessages the collection of messages to be updated.
    */
   private void updateLaunchMonthlyErrorMessages(
-      Collection<Message> errorMessages)
+      Collection<LocalizableMessage> errorMessages)
   {
     setPrimaryValid(lMonthlyTime);
     setPrimaryValid(lMonthlyDays);
@@ -505,7 +506,7 @@
    * The associated labels are also updated.
    * @param errorMessages the collection of messages to be updated.
    */
-  private void updateCronErrorMessages(Collection<Message> errorMessages)
+  private void updateCronErrorMessages(Collection<LocalizableMessage> errorMessages)
   {
     setPrimaryValid(lCronMinute);
     setPrimaryValid(lCronHour);
@@ -560,8 +561,8 @@
    * @param errorMessages the collection of messages to be updated.
    */
   private void updateCronErrorMessages(String value, JLabel label,
-      Message errorIfEmpty, Message contentError, int minValue, int maxValue,
-      Collection<Message> errorMessages)
+      LocalizableMessage errorIfEmpty, LocalizableMessage contentError, int minValue, int maxValue,
+      Collection<LocalizableMessage> errorMessages)
   {
     if (value.length() == 0)
     {
@@ -694,7 +695,7 @@
    * with the encountered problems.
    */
   private void checkTime(JTextField time, JLabel lTime, int[] h, int[] m,
-      Collection<Message> errorMessages)
+      Collection<LocalizableMessage> errorMessages)
   {
     String sTime = time.getText().trim();
     int index = sTime.indexOf(':');
@@ -845,7 +846,7 @@
     DefaultComboBoxModel model = new DefaultComboBoxModel();
     month.setModel(model);
 
-    Message[] monthMessages =
+    LocalizableMessage[] monthMessages =
     {
         INFO_CTRL_PANEL_JANUARY.get(),
         INFO_CTRL_PANEL_FEBRUARY.get(),
@@ -860,7 +861,7 @@
         INFO_CTRL_PANEL_NOVEMBER.get(),
         INFO_CTRL_PANEL_DECEMBER.get(),
     };
-    for (Message msg : monthMessages)
+    for (LocalizableMessage msg : monthMessages)
     {
       model.addElement(msg.toString());
     }
@@ -880,7 +881,7 @@
 
     JLabel[] labels = {lTime, lDay, lMonth, lYear};
     JComponent[] comps = {time, day, month, year};
-    Message[] inlineHelp =
+    LocalizableMessage[] inlineHelp =
     {
         INFO_CTRL_PANEL_TASK_TO_SCHEDULE_TIME_TOOLTIP.get(),
         null,
@@ -1090,7 +1091,7 @@
     gbc.gridwidth = 1;
     for (int i=0 ; i<monthDays.length; i++)
     {
-      monthDays[i] = Utilities.createCheckBox(Message.raw(String.valueOf(i+1)));
+      monthDays[i] = Utilities.createCheckBox(LocalizableMessage.raw(String.valueOf(i+1)));
       monthDays[i].setFont(ColorAndFontConstants.inlineHelpFont);
       int x = i % 7;
       if (x == 0 && i != 0)
@@ -1167,7 +1168,7 @@
         lCronMonth};
     Component[] comps = {cronMinute, cronHour, cronWeekDay, cronMonthDay,
         cronMonth};
-    Message[] help =
+    LocalizableMessage[] help =
     {
       INFO_CTRL_PANEL_CRON_MINUTE_HELP.get(),
       INFO_CTRL_PANEL_CRON_HOUR_HELP.get(),
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/UnsavedChangesDialog.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/UnsavedChangesDialog.java
index 8503470..bf95a8d 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/UnsavedChangesDialog.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/UnsavedChangesDialog.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -43,7 +44,7 @@
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Dialog used to inform the user that there are unsaved changes in a panel.
@@ -95,7 +96,7 @@
    * @param title the title of the message.
    * @param details the details of the message.
    */
-  public void setMessage(Message title, Message details)
+  public void setMessage(LocalizableMessage title, LocalizableMessage details)
   {
     panel.updateConfirmationPane(panel.errorPane, title,
         ColorAndFontConstants.errorTitleFont, details,
@@ -284,7 +285,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTitle()
+    public LocalizableMessage getTitle()
     {
       return INFO_CTRL_PANEL_UNSAVED_CHANGES_DIALOG_TITLE.get();
     }
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 5f6ee34..c0f977d 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
@@ -72,7 +72,7 @@
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.util.ConfigReader;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.client.ManagementContext;
 import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor;
 import org.opends.server.admin.client.ldap.LDAPManagementContext;
@@ -108,7 +108,7 @@
 
   private boolean ignoreCheckSave;
 
-  private Message INDEX_MODIFIED =
+  private LocalizableMessage INDEX_MODIFIED =
     INFO_CTRL_PANEL_INDEX_MODIFIED_MESSAGE.get();
 
 
@@ -127,7 +127,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_VLV_INDEX_PANEL_TITLE.get();
   }
@@ -397,7 +397,7 @@
 
   private void deleteIndex()
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     ProgressDialog dlg = new ProgressDialog(
         Utilities.createFrame(),
         Utilities.getParentDialog(this),
@@ -445,7 +445,7 @@
     {
       return;
     }
-    List<Message> errors = checkErrors(false);
+    List<LocalizableMessage> errors = checkErrors(false);
 
     if (errors.isEmpty())
     {
@@ -496,7 +496,7 @@
   {
     ignoreCheckSave = true;
     readOnlyName.setText(index.getName());
-    titlePanel.setDetails(Message.raw(index.getName()));
+    titlePanel.setDetails(LocalizableMessage.raw(index.getName()));
     if (index.getBackend() != null)
     {
       updateBaseDNCombo(index.getBackend());
@@ -662,7 +662,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       return INFO_CTRL_PANEL_MODIFY_VLV_INDEX_TASK_DESCRIPTION.get(
           indexName, backendID);
@@ -672,7 +672,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VerifyIndexPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VerifyIndexPanel.java
index 11dffad..aec1e7c 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VerifyIndexPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/VerifyIndexPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -68,7 +69,7 @@
 import org.opends.guitools.controlpanel.ui.renderer.IndexComboBoxCellRenderer;
 import org.opends.guitools.controlpanel.util.Utilities;
 import org.opends.guitools.controlpanel.util.ViewPositions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The panel that appears when the user wants to verify an index.
@@ -273,7 +274,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_VERIFY_INDEXES_PANEL_TITLE.get();
   }
@@ -363,7 +364,7 @@
     setSecondaryValid(addRemove.getSelectedLabel());
     setSecondaryValid(lIndex);
 
-    final LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    final LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
 
     String baseDN = getSelectedBaseDN();
 
@@ -573,7 +574,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       return INFO_CTRL_PANEL_VERIFY_INDEX_TASK_DESCRIPTION.get(baseDN);
     }
@@ -582,7 +583,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
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 9d4600a..c6ebe41 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
@@ -51,7 +51,7 @@
 import org.opends.guitools.controlpanel.event.LDAPEntryChangedListener;
 import org.opends.guitools.controlpanel.ui.nodes.BasicNode;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.replication.plugin.EntryHistorical;
 import org.opends.server.schema.SchemaConstants;
@@ -385,7 +385,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_EDIT_LDAP_ENTRY_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/WindowsServicePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/WindowsServicePanel.java
index f3dd92f..75fd5f5 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/WindowsServicePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/WindowsServicePanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui;
@@ -49,7 +50,7 @@
 import org.opends.guitools.controlpanel.event.ConfigurationChangeEvent;
 import org.opends.guitools.controlpanel.task.Task;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.ConfigureWindowsService;
 
 /**
@@ -81,7 +82,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return INFO_CTRL_PANEL_WINDOWS_SERVICE_TITLE.get();
   }
@@ -239,7 +240,7 @@
 
   private void updateWindowsService()
   {
-    LinkedHashSet<Message> errors = new LinkedHashSet<Message>();
+    LinkedHashSet<LocalizableMessage> errors = new LinkedHashSet<LocalizableMessage>();
     ProgressDialog progressDialog = new ProgressDialog(
         Utilities.createFrame(), Utilities.getParentDialog(this), getTitle(),
         getInfo());
@@ -322,7 +323,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getTaskDescription()
+    public LocalizableMessage getTaskDescription()
     {
       if (enableService)
       {
@@ -338,7 +339,7 @@
      * {@inheritDoc}
      */
     public boolean canLaunch(Task taskToBeLaunched,
-        Collection<Message> incompatibilityReasons)
+        Collection<LocalizableMessage> incompatibilityReasons)
     {
       boolean canLaunch = true;
       if (state == State.RUNNING && runningOnSameServer(taskToBeLaunched))
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/ActionButton.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/ActionButton.java
index 74ffe05..0b65078 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/ActionButton.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/ActionButton.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 
@@ -45,7 +46,7 @@
 import org.opends.guitools.controlpanel.datamodel.Action;
 import org.opends.guitools.controlpanel.datamodel.Category;
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A basic extension of a button that changes its rendering so that the looks
@@ -67,7 +68,7 @@
   {
     //Calculate border based on category settings
     Category cat = new Category();
-    cat.setName(Message.EMPTY);
+    cat.setName(LocalizableMessage.EMPTY);
     CategoryButton b = new CategoryButton(cat);
     int n = b.getIconTextGap() + b.getIcon().getIconWidth() +
     b.getBorder().getBorderInsets(b).left;
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/BasicExpander.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/BasicExpander.java
index 802a8d7..dd82938 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/BasicExpander.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/BasicExpander.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.components;
@@ -32,7 +33,7 @@
 import org.opends.guitools.controlpanel.browser.IconPool;
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A component that acts as a checkbox but uses some customized buttons to
@@ -48,7 +49,7 @@
    * Constructor of the BasicExpander.
    * @param text the text to be displayed in the label of the BasicExpander.
    */
-  public BasicExpander(Message text)
+  public BasicExpander(LocalizableMessage text)
   {
     super(text.toString());
     setHorizontalTextPosition(SwingConstants.TRAILING);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/BinaryCellPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/BinaryCellPanel.java
index 952463d..daa73f6 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/BinaryCellPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/BinaryCellPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.components;
@@ -48,7 +49,7 @@
 import org.opends.guitools.controlpanel.datamodel.BinaryValue;
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A simple panel used in the LDAP entry viewers to display a binary value.
@@ -88,7 +89,7 @@
     gbc.fill = GridBagConstraints.HORIZONTAL;
     gbc.gridx = 0;
     gbc.gridy = 0;
-    iconButton = Utilities.createButton(Message.EMPTY);
+    iconButton = Utilities.createButton(LocalizableMessage.EMPTY);
     label = Utilities.createDefaultLabel(
         INFO_CTRL_PANEL_NO_VALUE_SPECIFIED.get());
     add(iconButton);
@@ -125,7 +126,7 @@
    * @param isImage whether the array of bytes represents an image or not.
    * @return the message describing the provided array of bytes.
    */
-  public Message getString(byte[] value, boolean isImage)
+  public LocalizableMessage getString(byte[] value, boolean isImage)
   {
     if (value == null)
     {
@@ -133,7 +134,7 @@
     }
     else if (isImage)
     {
-      return Message.EMPTY;
+      return LocalizableMessage.EMPTY;
     }
     else
     {
@@ -165,7 +166,7 @@
    * a viewer).
    * @param text the text of the button.
    */
-  public void setEditButtonText(Message text)
+  public void setEditButtonText(LocalizableMessage text)
   {
     editButton.setText(text.toString());
   }
@@ -176,16 +177,16 @@
    * @param isImage whether the binary value represents an image or not.
    * @return the message describing the provided binary value.
    */
-  public Message getMessage(BinaryValue value, boolean isImage)
+  public LocalizableMessage getMessage(BinaryValue value, boolean isImage)
   {
-    Message returnValue;
+    LocalizableMessage returnValue;
     if (value == null)
     {
       returnValue = INFO_CTRL_PANEL_NO_VALUE_SPECIFIED.get();
     }
     else if (isImage)
     {
-      returnValue = Message.EMPTY;
+      returnValue = LocalizableMessage.EMPTY;
     }
     else if (value.getType() == BinaryValue.Type.BASE64_STRING)
     {
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/CellEditorButton.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/CellEditorButton.java
index a19340a..5a821d1 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/CellEditorButton.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/CellEditorButton.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.components;
@@ -31,7 +32,7 @@
 import javax.swing.JButton;
 import javax.swing.KeyStroke;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This is a simple extension of the JButton class used to be able to invoke
@@ -46,7 +47,7 @@
    * The constructor of the cell editor button.
    * @param label the label of the button.
    */
-  public CellEditorButton(Message label)
+  public CellEditorButton(LocalizableMessage label)
   {
     super(label.toString());
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java
index 8af7e0c..3d0c693 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/LabelWithHelpIcon.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.components;
@@ -40,7 +41,7 @@
 
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A panel containing a label an a help icon.  A customized tool tip is used,
@@ -72,7 +73,7 @@
    * @param text the text of the panel.
    * @param tooltipIcon the tool tip of the help icon.
    */
-  public LabelWithHelpIcon(Message text, Message tooltipIcon)
+  public LabelWithHelpIcon(LocalizableMessage text, LocalizableMessage tooltipIcon)
   {
     super(new GridBagLayout());
     setOpaque(false);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/ObjectClassCellPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/ObjectClassCellPanel.java
index 51d1c37..a58a2d3 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/ObjectClassCellPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/ObjectClassCellPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.components;
@@ -44,8 +45,8 @@
 import org.opends.guitools.controlpanel.datamodel.ObjectClassValue;
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 /**
  * A simple panel used in the LDAP entry viewers to display the object class
@@ -186,9 +187,9 @@
    * @param value the object class value.
    * @return the message describing the provided object class value.
    */
-  public Message getMessage(ObjectClassValue value)
+  public LocalizableMessage getMessage(ObjectClassValue value)
   {
-    MessageBuilder sb = new MessageBuilder();
+    LocalizableMessageBuilder sb = new LocalizableMessageBuilder();
     if (value != null)
     {
       Set<String> aux = new TreeSet<String>();
@@ -210,7 +211,7 @@
     }
     if (sb.length() > 0)
     {
-      return Message.raw("<html>"+Utilities.applyFont(sb.toString(),
+      return LocalizableMessage.raw("<html>"+Utilities.applyFont(sb.toString(),
           ColorAndFontConstants.defaultFont));
     }
     else
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/SelectableLabelWithHelpIcon.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/SelectableLabelWithHelpIcon.java
index 52e9208..df876f9 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/SelectableLabelWithHelpIcon.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/SelectableLabelWithHelpIcon.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.components;
@@ -40,7 +41,7 @@
 
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A panel containing a label an a help icon.  A customized tool tip is used,
@@ -74,7 +75,7 @@
    * @param text the text of the panel.
    * @param tooltipIcon the tool tip of the help icon.
    */
-  public SelectableLabelWithHelpIcon(Message text, Message tooltipIcon)
+  public SelectableLabelWithHelpIcon(LocalizableMessage text, LocalizableMessage tooltipIcon)
   {
     super(new GridBagLayout());
     setOpaque(false);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/TitlePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/TitlePanel.java
index cf24530..e113ccb 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/TitlePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/TitlePanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.components;
@@ -33,8 +34,8 @@
 import javax.swing.JPanel;
 
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 /**
  * This is a panel containing two labels with different fonts.  It is used
@@ -48,20 +49,20 @@
   private JLabel lTitle;
   private JLabel lDetails;
 
-  private Message title;
-  private Message details;
+  private LocalizableMessage title;
+  private LocalizableMessage details;
 
   /**
    * Constructor of the panel.
    * @param title the title of the panel.
    * @param details the details of the panel.
    */
-  public TitlePanel(Message title, Message details)
+  public TitlePanel(LocalizableMessage title, LocalizableMessage details)
   {
     super(new GridBagLayout());
     setOpaque(false);
     GridBagConstraints gbc = new GridBagConstraints();
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     mb.append(title);
     mb.append(" - ");
     lTitle = Utilities.createTitleLabel(mb.toMessage());
@@ -81,7 +82,7 @@
    * Sets the title of this panel.
    * @param title the title of this panel.
    */
-  public void setTitle(Message title)
+  public void setTitle(LocalizableMessage title)
   {
     lTitle.setText(title+" - ");
     this.title = title;
@@ -91,7 +92,7 @@
    * Sets the details of this panel.
    * @param details the details of this panel.
    */
-  public void setDetails(Message details)
+  public void setDetails(LocalizableMessage details)
   {
     lDetails.setText(details.toString());
     this.details = details;
@@ -101,7 +102,7 @@
    * Returns the title of this panel.
    * @return the title of this panel.
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return title;
   }
@@ -110,7 +111,7 @@
    * Returns the details of this panel.
    * @return the details of this panel.
    */
-  public Message getDetails()
+  public LocalizableMessage getDetails()
   {
     return details;
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/TreePanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/TreePanel.java
index d0a3a38..9a29d0f 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/TreePanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/components/TreePanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.components;
@@ -37,7 +38,7 @@
 import org.opends.guitools.controlpanel.ui.GenericDialog;
 import org.opends.guitools.controlpanel.ui.StatusGenericPanel;
 import org.opends.guitools.controlpanel.ui.renderer.TreeCellRenderer;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A basic panel containing a CustomTree.
@@ -107,7 +108,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getTitle()
+  public LocalizableMessage getTitle()
   {
     return null;
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/nodes/CategoryTreeNode.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/nodes/CategoryTreeNode.java
index f1c6911..89a6b4e 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/nodes/CategoryTreeNode.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/nodes/CategoryTreeNode.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.nodes;
 
 import javax.swing.tree.DefaultMutableTreeNode;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * The tree node that is used to represent a category.  It is used for instance
@@ -44,7 +45,7 @@
    * Constructor.
    * @param name the name of the node (the one that be used to display).
    */
-  public CategoryTreeNode(Message name)
+  public CategoryTreeNode(LocalizableMessage name)
   {
     super(name);
   }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java
index e217022..1392da9 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/ui/renderer/CustomCellRenderer.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.controlpanel.ui.renderer;
@@ -38,7 +39,7 @@
 import org.opends.guitools.controlpanel.ui.ColorAndFontConstants;
 import org.opends.guitools.controlpanel.ui.components.LabelWithHelpIcon;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Class used to render the tables.
@@ -67,7 +68,7 @@
    */
   public CustomCellRenderer()
   {
-    super(Message.EMPTY, null);
+    super(LocalizableMessage.EMPTY, null);
     setHelpIconVisible(false);
     setFont(ColorAndFontConstants.tableFont);
     setOpaque(true);
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 bf1edde..d49cfbd 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
@@ -34,7 +34,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.api.ConfigHandler;
 import org.opends.server.config.ConfigEntry;
@@ -149,14 +149,14 @@
       }
       catch (Throwable t)
       {
-        Message message = ERR_CONFIG_FILE_CANNOT_OPEN_FOR_READ.get(
+        LocalizableMessage message = ERR_CONFIG_FILE_CANNOT_OPEN_FOR_READ.get(
             f.getAbsolutePath(), String.valueOf(t));
         throw new InitializationException(message, t);
       }
 
       if (! f.exists())
       {
-        Message message =
+        LocalizableMessage message =
           ERR_CONFIG_FILE_DOES_NOT_EXIST.get(f.getAbsolutePath());
         throw new InitializationException(message);
       }
@@ -170,7 +170,7 @@
         entry = reader.readEntry(checkSchema);
         if (entry == null)
         {
-          Message message = ERR_CONFIG_FILE_EMPTY.get(f.getAbsolutePath());
+          LocalizableMessage message = ERR_CONFIG_FILE_EMPTY.get(f.getAbsolutePath());
           throw new InitializationException(message);
         }
         configRootEntry = new ConfigEntry(entry, null);
@@ -197,7 +197,7 @@
             {
               if (parentDN == null)
               {
-                Message message = ERR_CONFIG_FILE_UNKNOWN_PARENT.get(
+                LocalizableMessage message = ERR_CONFIG_FILE_UNKNOWN_PARENT.get(
                     entryDN.toString(),
                     reader.getLastEntryLineNumber(),
                     f.getAbsolutePath());
@@ -205,7 +205,7 @@
               }
               else
               {
-                Message message =
+                LocalizableMessage message =
                   ERR_CONFIG_FILE_NO_PARENT.get(entryDN.toString(),
                     reader.getLastEntryLineNumber(),
                     f.getAbsolutePath(), parentDN.toString());
@@ -227,14 +227,14 @@
       }
       catch (LDIFException le)
       {
-        Message message = ERR_CONFIG_FILE_INVALID_LDIF_ENTRY.get(
+        LocalizableMessage message = ERR_CONFIG_FILE_INVALID_LDIF_ENTRY.get(
             le.getLineNumber(), f.getAbsolutePath(),
             String.valueOf(le));
         throw new InitializationException(message, le);
       }
       catch (Throwable t)
       {
-        Message message = ERR_CONFIG_FILE_READ_ERROR.get(f.getAbsolutePath(),
+        LocalizableMessage message = ERR_CONFIG_FILE_READ_ERROR.get(f.getAbsolutePath(),
             String.valueOf(t));
         throw new InitializationException(message, t);
       }
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java
index 4fe7d69..68deb1e 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/SchemaLoader.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.util;
@@ -34,7 +34,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.api.MatchingRule;
@@ -141,12 +141,12 @@
       File schemaDir = new File(schemaDirPath);
       if (schemaDirPath == null || !schemaDir.exists())
       {
-        Message message = ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR.get(schemaDirPath);
+        LocalizableMessage message = ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR.get(schemaDirPath);
         throw new InitializationException(message);
       }
       else if (!schemaDir.isDirectory())
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY.get(schemaDirPath);
         throw new InitializationException(message);
       }
@@ -198,7 +198,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES
               .get(schemaDirPath, e.getMessage());
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
index d480f80..709bc08 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/Utilities.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/controlpanel/util/Utilities.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.guitools.controlpanel.util;
 
@@ -111,7 +111,7 @@
  SelectableLabelWithHelpIcon;
 import org.opends.guitools.controlpanel.ui.renderer.
  AccessibleTableHeaderRenderer;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.util.Utils;
@@ -148,9 +148,9 @@
   private static ImageIcon requiredIcon;
 
 
-  private static Message NO_VALUE_SET =
+  private static LocalizableMessage NO_VALUE_SET =
     INFO_CTRL_PANEL_NO_MONITORING_VALUE.get();
-  private static Message NOT_IMPLEMENTED =
+  private static LocalizableMessage NOT_IMPLEMENTED =
     INFO_CTRL_PANEL_NOT_IMPLEMENTED.get();
 
   /**
@@ -267,7 +267,7 @@
    * @param errors the set of error messages that the dialog must display.
    */
   public static void displayErrorDialog(Component parentComponent,
-      Collection<Message> errors)
+      Collection<LocalizableMessage> errors)
   {
     /*
     ErrorPanel panel = new ErrorPanel("Error", errors);
@@ -277,7 +277,7 @@
     dlg.setVisible(true);
     */
     ArrayList<String> stringErrors = new ArrayList<String>();
-    for (Message err : errors)
+    for (LocalizableMessage err : errors)
     {
       stringErrors.add(err.toString());
     }
@@ -303,7 +303,7 @@
    *
    */
   public static boolean displayConfirmationDialog(Component parentComponent,
-      Message title, Message msg)
+      LocalizableMessage title, LocalizableMessage msg)
   {
     String plainText = msg.toString().replaceAll("<br>", ServerConstants.EOL);
     String wrappedText = StaticUtils.wrapText(plainText, 70);
@@ -326,7 +326,7 @@
    * @param msg the message to be displayed.
    */
   public static void displayWarningDialog(Component parentComponent,
-      Message title, Message msg)
+      LocalizableMessage title, LocalizableMessage msg)
   {
     String plainText = msg.toString().replaceAll("<br>", ServerConstants.EOL);
     String wrappedText = StaticUtils.wrapText(plainText, 70);
@@ -412,7 +412,7 @@
    * @param msg the message to be displayed in the titled border.
    * @return the created titled border.
    */
-  public static Border makeTitledBorder(Message msg)
+  public static Border makeTitledBorder(LocalizableMessage msg)
   {
     TitledBorder border = new TitledBorder(new EtchedBorder(),
         " "+msg+" ");
@@ -462,7 +462,7 @@
    * @param text the message to be displayed by the button.
    * @return the created button.
    */
-  public static JButton createButton(Message text)
+  public static JButton createButton(LocalizableMessage text)
   {
     JButton button = new JButton(text.toString());
     button.setOpaque(false);
@@ -476,7 +476,7 @@
    * @param text the message to be displayed by the radio button.
    * @return the created radio button.
    */
-  public static JRadioButton createRadioButton(Message text)
+  public static JRadioButton createRadioButton(LocalizableMessage text)
   {
     JRadioButton button = new JRadioButton(text.toString());
     button.setOpaque(false);
@@ -490,7 +490,7 @@
    * @param text the message to be displayed by the check box.
    * @return the created check box.
    */
-  public static JCheckBox createCheckBox(Message text)
+  public static JCheckBox createCheckBox(LocalizableMessage text)
   {
     JCheckBox cb = new JCheckBox(text.toString());
     cb.setOpaque(false);
@@ -504,7 +504,7 @@
    * @param msg the text.
    * @return a menu item with the provided text.
    */
-  public static JMenuItem createMenuItem(Message msg)
+  public static JMenuItem createMenuItem(LocalizableMessage msg)
   {
     return new JMenuItem(msg.toString());
   }
@@ -515,7 +515,7 @@
    * @param description the accessible description.
    * @return a menu with the provided text.
    */
-  public static JMenu createMenu(Message msg, Message description)
+  public static JMenu createMenu(LocalizableMessage msg, LocalizableMessage description)
   {
     JMenu menu = new JMenu(msg.toString());
     menu.getAccessibleContext().setAccessibleDescription(
@@ -531,7 +531,7 @@
    */
   public static JLabel createPrimaryLabel()
   {
-    return createPrimaryLabel(Message.EMPTY);
+    return createPrimaryLabel(LocalizableMessage.EMPTY);
   }
 
   /**
@@ -539,7 +539,7 @@
    * @param text the message to be displayed by the label.
    * @return the label of type 'primary' (with bigger font than usual).
    */
-  public static JLabel createPrimaryLabel(Message text)
+  public static JLabel createPrimaryLabel(LocalizableMessage text)
   {
     JLabel label = new JLabel(text.toString());
     label.setFont(ColorAndFontConstants.primaryFont);
@@ -552,7 +552,7 @@
    * @param text the message to be displayed by the label.
    * @return the label of type 'inline help' (with smaller font).
    */
-  public static JLabel createInlineHelpLabel(Message text)
+  public static JLabel createInlineHelpLabel(LocalizableMessage text)
   {
     JLabel label = new JLabel(text.toString());
     label.setFont(ColorAndFontConstants.inlineHelpFont);
@@ -565,7 +565,7 @@
    * @param text the message to be displayed by the label.
    * @return the label of type 'title' (with bigger font).
    */
-  public static JLabel createTitleLabel(Message text)
+  public static JLabel createTitleLabel(LocalizableMessage text)
   {
     JLabel label = new JLabel(text.toString());
     label.setFont(ColorAndFontConstants.titleFont);
@@ -579,7 +579,7 @@
    */
   public static JLabel createDefaultLabel()
   {
-    return createDefaultLabel(Message.EMPTY);
+    return createDefaultLabel(LocalizableMessage.EMPTY);
   }
 
   /**
@@ -587,7 +587,7 @@
    * @param text the message to be displayed by the label.
    * @return the label (with default font).
    */
-  public static JLabel createDefaultLabel(Message text)
+  public static JLabel createDefaultLabel(LocalizableMessage text)
   {
     JLabel label = new JLabel(text.toString());
     label.setFont(ColorAndFontConstants.defaultFont);
@@ -655,7 +655,7 @@
    * @param cols the columns of the text area.
    * @return a text area with borders similar to the ones of a text field.
    */
-  public static JTextArea createTextAreaWithBorder(Message text, int rows,
+  public static JTextArea createTextAreaWithBorder(LocalizableMessage text, int rows,
       int cols)
   {
     JTextArea ta = createTextArea(text, rows, cols);
@@ -673,7 +673,7 @@
    * @param cols the columns of the text area.
    * @return a non-editable text area.
    */
-  public static JTextArea createNonEditableTextArea(Message text, int rows,
+  public static JTextArea createNonEditableTextArea(LocalizableMessage text, int rows,
       int cols)
   {
     JTextArea ta = createTextArea(text, rows, cols);
@@ -690,7 +690,7 @@
    * @param cols the columns of the text area.
    * @return a text area.
    */
-  public static JTextArea createTextArea(Message text, int rows,
+  public static JTextArea createTextArea(LocalizableMessage text, int rows,
       int cols)
   {
     JTextArea ta = new JTextArea(text.toString(), rows, cols);
@@ -1011,7 +1011,7 @@
    * specifying the maximum height of the image.
    */
   public static ImageIcon createImageIcon(byte[] bytes, int maxHeight,
-      Message description, boolean useFast)
+      LocalizableMessage description, boolean useFast)
   {
     ImageIcon icon = new ImageIcon(bytes, description.toString());
     if ((maxHeight > icon.getIconHeight()) || (icon.getIconHeight() <= 0))
@@ -1088,7 +1088,7 @@
    * @param nCols the number of columns.
    * @return the wrapped message.
    */
-  public static Message wrapHTML(Message msg, int nCols)
+  public static LocalizableMessage wrapHTML(LocalizableMessage msg, int nCols)
   {
     String s = msg.toString();
     StringBuilder sb = new StringBuilder();
@@ -1234,7 +1234,7 @@
     {
       sb.append(lastLine);
     }
-    return Message.raw(sb.toString());
+    return LocalizableMessage.raw(sb.toString());
   }
 
   private static boolean isLineBreakTag(String tag)
@@ -1670,7 +1670,7 @@
    * @return the HTML representation of a message to which some points have
    * been appended.
    */
-  public static String getProgressWithPoints(Message plainText,
+  public static String getProgressWithPoints(LocalizableMessage plainText,
       Font progressFont)
   {
     return applyFont(plainText.toString(), progressFont)+
@@ -1686,8 +1686,8 @@
    * @param detailsFont the font to be used for the details.
    * @return the HTML representation of an error for the given text.
    */
-  public static String getFormattedError(Message title, Font titleFont,
-      Message details, Font detailsFont)
+  public static String getFormattedError(LocalizableMessage title, Font titleFont,
+      LocalizableMessage details, Font detailsFont)
   {
     StringBuilder buf = new StringBuilder();
     buf.append(UIFactory.getIconHtml(UIFactory.IconType.ERROR_LARGE))
@@ -1710,8 +1710,8 @@
    * @param detailsFont the font to be used for the details.
    * @return the HTML representation of a success for the given text.
    */
-  public static String getFormattedSuccess(Message title, Font titleFont,
-      Message details, Font detailsFont)
+  public static String getFormattedSuccess(LocalizableMessage title, Font titleFont,
+      LocalizableMessage details, Font detailsFont)
   {
     StringBuilder buf = new StringBuilder();
     buf.append(UIFactory.getIconHtml(UIFactory.IconType.INFORMATION_LARGE))
@@ -1734,8 +1734,8 @@
    * @param detailsFont the font to be used for the details.
    * @return the HTML representation of a confirmation for the given text.
    */
-  public static String getFormattedConfirmation(Message title, Font titleFont,
-      Message details, Font detailsFont)
+  public static String getFormattedConfirmation(LocalizableMessage title, Font titleFont,
+      LocalizableMessage details, Font detailsFont)
   {
     StringBuilder buf = new StringBuilder();
     buf.append(UIFactory.getIconHtml(UIFactory.IconType.WARNING_LARGE))
@@ -1758,8 +1758,8 @@
    * @param detailsFont the font to be used for the details.
    * @return the HTML representation of a success for the given text.
    */
-  public static String getFormattedWarning(Message title, Font titleFont,
-      Message details, Font detailsFont)
+  public static String getFormattedWarning(LocalizableMessage title, Font titleFont,
+      LocalizableMessage details, Font detailsFont)
   {
     StringBuilder buf = new StringBuilder();
     buf.append(UIFactory.getIconHtml(UIFactory.IconType.WARNING_LARGE))
@@ -1838,7 +1838,7 @@
    * @param l the label to be updated.
    * @param text the text to be set on the label.
    */
-  public static void setWarningLabel(JLabel l, Message text)
+  public static void setWarningLabel(JLabel l, LocalizableMessage text)
   {
     l.setText(text.toString());
     if (warningIcon == null)
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
index 78ff124..15b2b02 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallCliHelper.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.uninstaller;
@@ -36,8 +37,8 @@
 import org.opends.admin.ads.util.ApplicationTrustManager;
 import org.opends.guitools.controlpanel.datamodel.ConnectionProtocolPolicy;
 import org.opends.guitools.controlpanel.datamodel.ControlPanelInfo;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.messages.QuickSetupMessages.*;
@@ -159,7 +160,7 @@
       /*
        * Step 2: check that the provided parameters are compatible.
        */
-      MessageBuilder buf = new MessageBuilder();
+      LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
       int v = args.validateGlobalOptions(buf);
       if (v != DsFrameworkCliReturnCode.SUCCESSFUL_NOP.getReturnCode())
       {
@@ -262,7 +263,7 @@
         "Error retrieving a valid LDAP URL in conf file.");
         if (!parser.isInteractive())
         {
-          Message msg = ERR_COULD_NOT_FIND_VALID_LDAPURL.get();
+          LocalizableMessage msg = ERR_COULD_NOT_FIND_VALID_LDAPURL.get();
           throw new ApplicationException(ReturnCode.APPLICATION_ERROR, msg,
               null);
         }
@@ -330,7 +331,7 @@
     final int REMOVE_ALL = 1;
     final int SPECIFY_TO_REMOVE = 2;
     int[] indexes = {REMOVE_ALL, SPECIFY_TO_REMOVE};
-    Message[] msgs = new Message[] {
+    LocalizableMessage[] msgs = new LocalizableMessage[] {
         INFO_CLI_UNINSTALL_REMOVE_ALL.get(),
         INFO_CLI_UNINSTALL_SPECIFY_WHAT_REMOVE.get()
       };
@@ -345,7 +346,7 @@
 
     builder.addQuitOption();
 
-    builder.setDefault(Message.raw(String.valueOf(REMOVE_ALL)),
+    builder.setDefault(LocalizableMessage.raw(String.valueOf(REMOVE_ALL)),
         MenuResult.success(REMOVE_ALL));
 
     builder.setMaxTries(CONFIRMATION_MAX_TRIES);
@@ -399,7 +400,7 @@
       {
         println();
 //      Ask for confirmation for the different items
-        msgs = new Message [] {
+        msgs = new LocalizableMessage [] {
                 INFO_CLI_UNINSTALL_CONFIRM_LIBRARIES_BINARIES.get(),
                 INFO_CLI_UNINSTALL_CONFIRM_DATABASES.get(),
                 INFO_CLI_UNINSTALL_CONFIRM_LOGS.get(),
@@ -860,7 +861,7 @@
         {
           LOG.log(Level.WARNING,
          "Error retrieving a valid Administration Connector URL in conf file.");
-          Message msg = ERR_COULD_NOT_FIND_VALID_LDAPURL.get();
+          LocalizableMessage msg = ERR_COULD_NOT_FIND_VALID_LDAPURL.get();
             throw new ApplicationException(ReturnCode.APPLICATION_ERROR, msg,
                 null);
         }
@@ -889,7 +890,7 @@
         {
           LOG.log(Level.WARNING,
          "Error retrieving a valid Administration Connector URL in conf file.");
-          Message msg = ERR_COULD_NOT_FIND_VALID_LDAPURL.get();
+          LocalizableMessage msg = ERR_COULD_NOT_FIND_VALID_LDAPURL.get();
           throw new ApplicationException(ReturnCode.APPLICATION_ERROR, msg,
               null);
         }
@@ -1054,7 +1055,7 @@
       /**
        * {@inheritDoc}
        */
-      public Message getSummary(ProgressStep step)
+      public LocalizableMessage getSummary(ProgressStep step)
       {
         return null;
       }
@@ -1155,7 +1156,7 @@
 
     boolean exceptionOccurred = true;
 
-    Message exceptionMsg = null;
+    LocalizableMessage exceptionMsg = null;
 
     LOG.log(Level.INFO, "Updating user data with remote servers.");
 
@@ -1334,7 +1335,7 @@
         exceptions.add(e);
       }
     }
-    Set<Message> exceptionMsgs = new LinkedHashSet<Message>();
+    Set<LocalizableMessage> exceptionMsgs = new LinkedHashSet<LocalizableMessage>();
     /* Check the exceptions and see if we throw them or not. */
     for (TopologyCacheException e : exceptions)
     {
@@ -1418,7 +1419,7 @@
       {
         if (parser.isForceOnError())
         {
-          Message msg = Utils.getMessageFromCollection(exceptionMsgs,
+          LocalizableMessage msg = Utils.getMessageFromCollection(exceptionMsgs,
               Constants.LINE_SEPARATOR);
           println();
           printErrorMessage(msg);
@@ -1426,7 +1427,7 @@
         }
         else
         {
-          Message msg =
+          LocalizableMessage msg =
             ERR_UNINSTALL_ERROR_UPDATING_REMOTE_NO_FORCE.get(
               "--"+
               parser.getSecureArgsList().adminUidArg.getLongIdentifier(),
@@ -1554,7 +1555,7 @@
      forceNonInteractive = false;
    }
 
-   private void printErrorMessage(Message msg)
+   private void printErrorMessage(LocalizableMessage msg)
    {
      super.println(msg);
      LOG.log(Level.WARNING, msg.toString());
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallLauncher.java b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallLauncher.java
index 2cba5c1..ad77fe3 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallLauncher.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallLauncher.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.guitools.uninstaller;
@@ -30,7 +30,7 @@
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.messages.ToolMessages.ERR_ERROR_PARSING_ARGS;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.ToolMessages;
 
 import java.io.File;
@@ -127,7 +127,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       System.err.println(message);
       System.err.println();
       System.err.println(argParser.getUsage());
@@ -149,7 +149,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message =
+      LocalizableMessage message =
         ToolMessages.ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       System.err.println(org.opends.server.util.StaticUtils.wrapText(message,
           Utils.getCommandLineMaxLineWidth()));
@@ -197,10 +197,10 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getFrameTitle() {
-    Message title = Utils.getCustomizedObject("INFO_FRAME_UNINSTALL_TITLE",
+  protected LocalizableMessage getFrameTitle() {
+    LocalizableMessage title = Utils.getCustomizedObject("INFO_FRAME_UNINSTALL_TITLE",
         INFO_FRAME_UNINSTALL_TITLE.get(
-        DynamicConstants.PRODUCT_NAME), Message.class);
+        DynamicConstants.PRODUCT_NAME), LocalizableMessage.class);
     return title;
   }
 
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
index 267cfa8..b15e471 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/Uninstaller.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.uninstaller;
@@ -65,8 +66,8 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.tools.ConfigureWindowsService;
 import org.opends.server.tools.ToolConstants;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.messages.QuickSetupMessages.*;
 
@@ -101,8 +102,8 @@
   private HashMap<ProgressStep, Integer> hmRatio =
           new HashMap<ProgressStep, Integer>();
 
-  private HashMap<ProgressStep, Message> hmSummary =
-          new HashMap<ProgressStep, Message>();
+  private HashMap<ProgressStep, LocalizableMessage> hmSummary =
+          new HashMap<ProgressStep, LocalizableMessage>();
 
   private ApplicationException ue;
 
@@ -115,7 +116,7 @@
 
   private LoginDialog loginDialog;
   private ProgressDialog startProgressDlg;
-  private MessageBuilder startProgressDetails = new MessageBuilder();
+  private LocalizableMessageBuilder startProgressDetails = new LocalizableMessageBuilder();
   private UninstallData conf;
   /**
    * Default constructor.
@@ -155,10 +156,10 @@
   /**
    * {@inheritDoc}
    */
-  public Message getFrameTitle() {
-    Message title = Utils.getCustomizedObject("INFO_FRAME_UNINSTALL_TITLE",
+  public LocalizableMessage getFrameTitle() {
+    LocalizableMessage title = Utils.getCustomizedObject("INFO_FRAME_UNINSTALL_TITLE",
         INFO_FRAME_UNINSTALL_TITLE.get(
-        DynamicConstants.PRODUCT_NAME), Message.class);
+        DynamicConstants.PRODUCT_NAME), LocalizableMessage.class);
     return title;
   }
 
@@ -357,21 +358,21 @@
   /**
    * {@inheritDoc}
    */
-  public Message getCloseButtonToolTip() {
+  public LocalizableMessage getCloseButtonToolTip() {
     return INFO_CLOSE_BUTTON_UNINSTALL_TOOLTIP.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  public Message getFinishButtonToolTip() {
+  public LocalizableMessage getFinishButtonToolTip() {
     return INFO_FINISH_BUTTON_UNINSTALL_TOOLTIP.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  public Message getFinishButtonLabel() {
+  public LocalizableMessage getFinishButtonLabel() {
     return INFO_FINISH_BUTTON_UNINSTALL_LABEL.get();
   }
 
@@ -392,8 +393,8 @@
   /**
    * {@inheritDoc}
    */
-  public void notifyListeners(Integer ratio, Message currentPhaseSummary,
-      final Message newLogDetail)
+  public void notifyListeners(Integer ratio, LocalizableMessage currentPhaseSummary,
+      final LocalizableMessage newLogDetail)
   {
     if (runStarted)
     {
@@ -445,14 +446,14 @@
           if (throwable != null) {
             if (throwable instanceof UserDataException)
             {
-              qs.displayError(Message.raw(throwable.getLocalizedMessage()),
+              qs.displayError(LocalizableMessage.raw(throwable.getLocalizedMessage()),
                     INFO_ERROR_TITLE.get());
             }
             else
             {
               LOG.log(Level.WARNING, "Error processing task: "+throwable,
                   throwable);
-              qs.displayError(Message.raw(throwable.toString()),
+              qs.displayError(LocalizableMessage.raw(throwable.toString()),
                       INFO_ERROR_TITLE.get());
             }
           } else {
@@ -648,7 +649,7 @@
             getFormattedSummary(
                     INFO_SUMMARY_DELETING_INSTALLATION_FILES.get()));
 
-    Message successMsg;
+    LocalizableMessage successMsg;
     Installation installation = getInstallation();
     String libPath = getPath(installation.getLibrariesDirectory());
     String resourcesPath = getPath(installation.getResourcesDirectory());
@@ -698,7 +699,7 @@
     hmSummary.put(UninstallProgressStep.FINISHED_SUCCESSFULLY,
             getFormattedSuccess(successMsg));
 
-    Message nonCriticalMsg;
+    LocalizableMessage nonCriticalMsg;
     if (!isCli())
     {
       nonCriticalMsg =
@@ -868,7 +869,7 @@
           if (ae.getType() == ReturnCode.FILE_SYSTEM_ACCESS_ERROR)
           {
             errorDeletingOccurred = true;
-            Message msg = getFormattedWarning(ae.getMessageObject());
+            LocalizableMessage msg = getFormattedWarning(ae.getMessageObject());
             notifyListeners(msg);
           }
           else
@@ -897,7 +898,7 @@
           if (ae.getType() == ReturnCode.FILE_SYSTEM_ACCESS_ERROR)
           {
             errorDeletingOccurred = true;
-            Message msg = getFormattedWarning(ae.getMessageObject());
+            LocalizableMessage msg = getFormattedWarning(ae.getMessageObject());
             notifyListeners(msg);
           }
           else
@@ -930,7 +931,7 @@
           if (ae.getType() == ReturnCode.FILE_SYSTEM_ACCESS_ERROR)
           {
             errorDeletingOccurred = true;
-            Message msg = getFormattedWarning(ae.getMessageObject());
+            LocalizableMessage msg = getFormattedWarning(ae.getMessageObject());
             notifyListeners(msg);
           }
           else
@@ -952,7 +953,7 @@
         status = UninstallProgressStep.FINISHED_SUCCESSFULLY;
       }
       if (isCli()) {
-        notifyListeners(new MessageBuilder(getLineBreak())
+        notifyListeners(new LocalizableMessageBuilder(getLineBreak())
                 .append(getLineBreak()).append(getSummary(status))
                 .toMessage());
       } else {
@@ -963,7 +964,7 @@
       LOG.log(Level.SEVERE, "Error: "+ex, ex);
       ue = ex;
       status = UninstallProgressStep.FINISHED_WITH_ERROR;
-      Message msg = getFormattedError(ex, true);
+      LocalizableMessage msg = getFormattedError(ex, true);
       notifyListeners(msg);
     }
     catch (Throwable t) {
@@ -972,7 +973,7 @@
               ReturnCode.BUG,
               getThrowableMsg(INFO_BUG_MSG.get(), t), t);
       status = UninstallProgressStep.FINISHED_WITH_ERROR;
-      Message msg = getFormattedError(ue, true);
+      LocalizableMessage msg = getFormattedError(ue, true);
       notifyListeners(msg);
     }
     if (!isCli()) {
@@ -1008,7 +1009,7 @@
    * @return an formatted representation of the summary for the specified
    *         UninstallProgressStep.
    */
-  public Message getSummary(ProgressStep step) {
+  public LocalizableMessage getSummary(ProgressStep step) {
     return hmSummary.get(step);
   }
 
@@ -1372,7 +1373,7 @@
     }
 
     if (!delete) {
-      Message errMsg;
+      LocalizableMessage errMsg;
       if (isFile) {
         errMsg = INFO_ERROR_DELETING_FILE.get(file.getAbsolutePath());
       } else {
@@ -1506,7 +1507,7 @@
             INFO_PROGRESS_DISABLING_WINDOWS_SERVICE.get()));
     int code = ConfigureWindowsService.disableService(System.out, System.err);
 
-    Message errorMessage = INFO_ERROR_DISABLING_WINDOWS_SERVICE.get(
+    LocalizableMessage errorMessage = INFO_ERROR_DISABLING_WINDOWS_SERVICE.get(
             getInstallationPath());
 
     switch (code) {
@@ -1535,11 +1536,11 @@
    */
   private boolean startServer(JFrame frame)
   {
-    startProgressDetails = new MessageBuilder();
+    startProgressDetails = new LocalizableMessageBuilder();
     startProgressDlg = new ProgressDialog(frame);
     startProgressDlg.setSummary(
         getFormattedSummary(INFO_SUMMARY_STARTING.get()));
-    startProgressDlg.setDetails(Message.EMPTY);
+    startProgressDlg.setDetails(LocalizableMessage.EMPTY);
     startProgressDlg.setCloseButtonEnabled(false);
     final Boolean[] returnValue = new Boolean[] {Boolean.FALSE};
     Thread t = new Thread(new Runnable()
@@ -1572,7 +1573,7 @@
         }
         catch (Throwable t)
         {
-          Message msg = getFormattedError(t, true);
+          LocalizableMessage msg = getFormattedError(t, true);
           notifyListeners(msg);
         }
       }
@@ -1711,7 +1712,7 @@
         exceptions.add(e);
       }
     }
-    Set<Message> exceptionMsgs = new LinkedHashSet<Message>();
+    Set<LocalizableMessage> exceptionMsgs = new LinkedHashSet<LocalizableMessage>();
     /* Check the exceptions and see if we throw them or not. */
     for (TopologyCacheException e : exceptions)
     {
@@ -1723,7 +1724,7 @@
       switch (e.getType())
       {
       case NOT_GLOBAL_ADMINISTRATOR:
-        Message errorMsg = INFO_NOT_GLOBAL_ADMINISTRATOR_PROVIDED.get();
+        LocalizableMessage errorMsg = INFO_NOT_GLOBAL_ADMINISTRATOR_PROVIDED.get();
         qs.displayError(errorMsg, INFO_ERROR_TITLE.get());
         stopProcessing = true;
         break;
@@ -1782,7 +1783,7 @@
     }
     if (!stopProcessing && (exceptionMsgs.size() > 0))
     {
-      Message confirmationMsg =
+      LocalizableMessage confirmationMsg =
         ERR_UNINSTALL_READING_REGISTERED_SERVERS_CONFIRM_UPDATE_REMOTE.get(
                 getMessageFromCollection(exceptionMsgs, "\n").toString());
       stopProcessing = !qs.displayConfirmation(confirmationMsg,
@@ -2033,7 +2034,7 @@
 
         if (!getUninstallUserData().isForceOnError())
         {
-          Message msg =
+          LocalizableMessage msg =
             ERR_UNINSTALL_ERROR_UPDATING_REMOTE_NO_FORCE.get(
               "--"+
               parser.getSecureArgsList().adminUidArg.getLongIdentifier(),
@@ -2045,7 +2046,7 @@
         }
         else
         {
-          Message html = getFormattedError(ae, true);
+          LocalizableMessage html = getFormattedError(ae, true);
           notifyListeners(html);
         }
       }
@@ -2177,7 +2178,7 @@
       LOG.log(Level.WARNING,
           "Error removing references in replication server on "+
           serverDisplay+": "+t, t);
-      Message errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
+      LocalizableMessage errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
               serverDisplay, t.toString());
       throw new ApplicationException(
           ReturnCode.CONFIGURATION_ERROR, errorMessage,
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallerArgumentParser.java b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallerArgumentParser.java
index 79a3b6b..c872576 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallerArgumentParser.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/UninstallerArgumentParser.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.uninstaller;
@@ -35,8 +36,8 @@
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.quicksetup.UserData;
 import org.opends.server.admin.client.cli.SecureConnectionCliArgs;
 import org.opends.server.admin.client.cli.SecureConnectionCliParser;
@@ -84,7 +85,7 @@
    *          should be treated in a case-sensitive manner.
    */
   public UninstallerArgumentParser(String mainClassName,
-      Message toolDescription, boolean longArgumentsCaseSensitive)
+      LocalizableMessage toolDescription, boolean longArgumentsCaseSensitive)
   {
     super(mainClassName, toolDescription, longArgumentsCaseSensitive);
   }
@@ -369,15 +370,15 @@
   /**
    * Indication if provided global options are validate.
    *
-   * @param buf the MessageBuilder to write the error messages.
+   * @param buf the LocalizableMessageBuilder to write the error messages.
    * @return return code.
    */
-  public int validateGlobalOptions(MessageBuilder buf)
+  public int validateGlobalOptions(LocalizableMessageBuilder buf)
   {
     int returnValue;
     if (!noPromptArg.isPresent() && forceOnErrorArg.isPresent())
     {
-      Message message = ERR_UNINSTALL_FORCE_REQUIRES_NO_PROMPT.get(
+      LocalizableMessage message = ERR_UNINSTALL_FORCE_REQUIRES_NO_PROMPT.get(
           "--"+forceOnErrorArg.getLongIdentifier(),
           "--"+noPromptArg.getLongIdentifier());
       if (buf.length() > 0)
@@ -400,7 +401,7 @@
       {
         if (removeArgs[i].isPresent())
         {
-          Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+          LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               removeAllArg.getLongIdentifier(),
               removeArgs[i].getLongIdentifier());
           if (buf.length() > 0)
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/ui/ConfirmUninstallPanel.java b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/ui/ConfirmUninstallPanel.java
index 153045e..1b124b5 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/ui/ConfirmUninstallPanel.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/ui/ConfirmUninstallPanel.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.guitools.uninstaller.ui;
@@ -46,7 +46,7 @@
 import java.util.logging.Logger;
 import java.io.IOException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.AdminToolMessages.*;
 
 /**
@@ -124,7 +124,7 @@
    * {@inheritDoc}
    */
   @Override
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_CONFIRM_UNINSTALL_PANEL_TITLE.get();
   }
@@ -144,7 +144,7 @@
         FieldName.REMOVE_LDIFS,
     };
 
-    Message[] labels = {
+    LocalizableMessage[] labels = {
         INFO_REMOVE_LIBRARIES_AND_TOOLS_LABEL.get(),
         INFO_REMOVE_DATABASES_LABEL.get(),
         INFO_REMOVE_LOGS_LABEL.get(),
@@ -153,7 +153,7 @@
         INFO_REMOVE_LDIFS_LABEL.get()
     };
 
-    Message[] tooltips = {
+    LocalizableMessage[] tooltips = {
         INFO_REMOVE_LIBRARIES_AND_TOOLS_TOOLTIP.get(),
         INFO_REMOVE_DATABASES_TOOLTIP.get(),
         INFO_REMOVE_LOGS_TOOLTIP.get(),
@@ -188,7 +188,7 @@
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = UIFactory.LEFT_INSET_SECONDARY_FIELD;
     p.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        Message.raw(Utils.getInstallPathFromClasspath()),
+        LocalizableMessage.raw(Utils.getInstallPathFromClasspath()),
         UIFactory.TextStyle.INSTRUCTIONS),
         gbc);
 
@@ -258,7 +258,7 @@
    * {@inheritDoc}
    */
   @Override
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     return INFO_CONFIRM_UNINSTALL_PANEL_INSTRUCTIONS.get();
   }
@@ -302,7 +302,7 @@
   }
 
   private JPanel createOutsidePathPanel(JCheckBox cb, Set<String> paths,
-      Message msg)
+      LocalizableMessage msg)
   {
     JPanel panel = new JPanel(new GridBagLayout());
     panel.setOpaque(false);
diff --git a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/ui/LoginDialog.java b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/ui/LoginDialog.java
index 6c1c41d..e2be57e 100644
--- a/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/ui/LoginDialog.java
+++ b/opendj3-server-dev/src/guitools/org/opends/guitools/uninstaller/ui/LoginDialog.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.guitools.uninstaller.ui;
@@ -69,7 +70,7 @@
 import org.opends.quicksetup.util.UIKeyStore;
 import org.opends.quicksetup.util.Utils;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.messages.QuickSetupMessages.*;
 
@@ -226,7 +227,7 @@
     gbc.fill = GridBagConstraints.BOTH;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = 0;
-    Message msg = INFO_UNINSTALL_LOGIN_DIALOG_MSG.get();
+    LocalizableMessage msg = INFO_UNINSTALL_LOGIN_DIALOG_MSG.get();
 
     JTextComponent textPane =
       UIFactory.makeHtmlPane(msg, UIFactory.INSTRUCTIONS_FONT);
@@ -250,7 +251,7 @@
     gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     tfHostName = UIFactory.makeJTextField(
-        Message.raw(UserData.getDefaultHostName()),
+        LocalizableMessage.raw(UserData.getDefaultHostName()),
         INFO_UNINSTALL_LOGIN_HOST_NAME_TOOLTIP.get(),
         UIFactory.HOST_FIELD_SIZE, UIFactory.TextStyle.TEXTFIELD);
     p2.add(tfHostName, gbc);
@@ -268,7 +269,7 @@
     gbc.weightx = 1.0;
     gbc.insets.left = UIFactory.LEFT_INSET_PRIMARY_FIELD;
     gbc.gridwidth = GridBagConstraints.REMAINDER;
-    tfUid = UIFactory.makeJTextField(Message.raw(Constants.GLOBAL_ADMIN_UID),
+    tfUid = UIFactory.makeJTextField(LocalizableMessage.raw(Constants.GLOBAL_ADMIN_UID),
         INFO_UNINSTALL_LOGIN_UID_TOOLTIP.get(),
         UIFactory.DN_FIELD_SIZE, UIFactory.TextStyle.TEXTFIELD);
     p2.add(tfUid, gbc);
@@ -455,7 +456,7 @@
             }
             else
             {
-              Message msg = Utils.getThrowableMsg(
+              LocalizableMessage msg = Utils.getThrowableMsg(
                   INFO_ERROR_CONNECTING_TO_LOCAL.get(), throwable);
               displayError(msg, INFO_ERROR_TITLE.get());
             }
@@ -493,7 +494,7 @@
             boolean pwdInvalid = false;
 
             String uid = tfUid.getText();
-            ArrayList<Message> possibleCauses = new ArrayList<Message>();
+            ArrayList<LocalizableMessage> possibleCauses = new ArrayList<LocalizableMessage>();
             if ("".equals(uid.trim()))
             {
               uidInvalid = true;
@@ -528,7 +529,7 @@
             }
             if (possibleCauses.size() > 0)
             {
-              // Message with causes
+              // LocalizableMessage with causes
               displayError(
                   ERR_CANNOT_CONNECT_TO_LOGIN_WITH_CAUSE.get(
                           Utils.getMessageFromCollection(possibleCauses, "\n")),
@@ -607,7 +608,7 @@
    * @param title
    *          the title for the dialog.
    */
-  private void displayError(Message msg, Message title)
+  private void displayError(LocalizableMessage msg, LocalizableMessage title)
   {
     Utilities.displayError(parent, msg, title);
     toFront();
@@ -622,7 +623,7 @@
    * @param title
    *          the title for the dialog.
    */
-  private void displayInformationMessage(Message msg, Message title)
+  private void displayInformationMessage(LocalizableMessage msg, LocalizableMessage title)
   {
     Utilities.displayInformationMessage(parent, msg, title);
     toFront();
diff --git a/opendj3-server-dev/src/messages/src/org/opends/messages/Message.java b/opendj3-server-dev/src/messages/src/org/opends/messages/Message.java
deleted file mode 100644
index c5c0c7f..0000000
--- a/opendj3-server-dev/src/messages/src/org/opends/messages/Message.java
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
- */
-
-package org.opends.messages;
-
-import java.util.Locale;
-import java.util.Formatter;
-import java.util.Formattable;
-import java.util.IllegalFormatException;
-
-/**
- * Renders sensitive textural strings.  In most cases message are intended
- * to render textural strings in a locale-sensitive manner although this
- * class defines convenience methods for creating uninternationalized
- * <code>Message</code> objects that render the same text regardless of
- * the requested locale.
- *
- * This class implements <code>CharSequence</code> so that messages can
- * be supplied as arguments to other messages.  This way messages can
- * be composed of fragments of other messages if necessary.
- *
- * @see org.opends.messages.MessageDescriptor
- */
-@org.opends.server.types.PublicAPI(
-    stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-    mayInstantiate=true,
-    mayExtend=false,
-    mayInvoke=true)
-public final class Message implements CharSequence, Formattable,
-    Comparable<Message> {
-
-  /** Represents an empty message string. */
-  public static final Message EMPTY = Message.raw("");
-
-  // Variable used to workaround a bug in AIX Java 1.6
-  // TODO: remove this code once the JDK issue referenced in 3077 is closed.
-  private final boolean isAIX = isAIX();
-
-  /**
-   * Creates an uninternationalized message that will render itself
-   * the same way regardless of the locale requested in
-   * <code>toString(Locale)</code>.  The message will have a
-   * category of <code>Category.USER_DEFINED</code> and a severity
-   * of <code>Severity.INFORMATION</code>
-   *
-   * Note that the types for <code>args</code> must be consistent with any
-   * argument specifiers appearing in <code>formatString</code> according
-   * to the rules of java.util.Formatter.  A mismatch in type information
-   * will cause this message to render without argument substitution.
-   *
-   * Before using this method you should be sure that the message you
-   * are creating is locale sensitive.  If so you should instead create
-   * a formal message.
-   *
-   * @param formatString of the message or the message itself if not
-   *        arguments are necessary
-   * @param args any arguments for the format string
-   * @return a message object that will render the same in all locales;
-   *         null if <code>formatString</code> is null
-   */
-  static public Message raw(CharSequence formatString, Object... args) {
-    return raw(Category.USER_DEFINED, Severity.INFORMATION, formatString, args);
-  }
-
-  /**
-   * Creates an uninternationalized message that will render itself
-   * the same way regardless of the locale requested in
-   * <code>toString(Locale)</code>.
-   *
-   * Note that the types for <code>args</code> must be consistent with any
-   * argument specifiers appearing in <code>formatString</code> according
-   * to the rules of java.util.Formatter.  A mismatch in type information
-   * will cause this message to render without argument substitution.
-   *
-   * Before using this method you should be sure that the message you
-   * are creating is locale sensitive.  If so you should instead create
-   * a formal message.
-   *
-   * @param category of this message
-   * @param severity of this message
-   * @param formatString of the message or the message itself if not
-   *        arguments are necessary
-   * @param args any arguments for the format string
-   * @return a message object that will render the same in all locales;
-   *         null if <code>formatString</code> is null
-   */
-  static public Message raw(Category category, Severity severity,
-                            CharSequence formatString, Object... args) {
-    Message message = null;
-    if (formatString != null) {
-      if (args == null || args.length == 0)
-      {
-        MessageDescriptor.Raw md = new MessageDescriptor.Raw(
-            "%s", category, severity);
-        message = md.get(formatString);
-      }
-      else
-      {
-        MessageDescriptor.Raw md = new MessageDescriptor.Raw(
-            formatString, category, severity);
-        message = md.get(args);
-      }
-    }
-    return message;
-  }
-
-  /**
-   * Creates an uninternationalized message from the string representation
-   * of an object.
-   *
-   * Note that the types for <code>args</code> must be consistent with any
-   * argument specifiers appearing in <code>formatString</code> according
-   * to the rules of java.util.Formatter.  A mismatch in type information
-   * will cause this message to render without argument substitution.
-   *
-   * @param object from which the message will be created
-   * @param args for message
-   * @return a message object that will render the same in all locales;
-   *         null if <code>object</code> is null
-   */
-  static public Message fromObject(Object object, Object... args) {
-    return (object != null) ? raw(object.toString(), args) : null;
-  }
-
-  /**
-   * Returns the string representation of the message in the default locale.
-   * @param message to stringify
-   * @return String representation of of <code>message</code> of null if
-   *         <code>message</code> is null
-   */
-  static public String toString(Message message) {
-    return message != null ? message.toString() : null;
-  }
-
-  /** Descriptor of this message. */
-  private final MessageDescriptor descriptor;
-
-  /** Values used to replace argument specifiers in the format string. */
-  private final Object[] args;
-
-  /**
-   * Gets the string representation of this message.
-   * @return String representation of this message
-   */
-  @Override
-  public String toString() {
-    return toString(Locale.getDefault());
-  }
-
-  /**
-   * Gets the string representation of this message appropriate for
-   * <code>locale</code>.
-   * @param locale for which the string representation
-   *        will be returned
-   * @return String representation of this message
-   */
-  public String toString(Locale locale) {
-    String s;
-    String fmt = descriptor.getFormatString(locale);
-    if (descriptor.requiresFormatter()) {
-      try {
-        // TODO: remove this code once the JDK issue referenced in 3077 is
-        // closed.
-        if (isAIX)
-        {
-          // Java 6 in AIX Formatter does not handle properly Formattable
-          // arguments; this code is a workaround for the problem.
-          boolean changeType = false;
-          for (Object o : args)
-          {
-            if (o instanceof Formattable)
-            {
-              changeType = true;
-              break;
-            }
-          }
-          if (changeType)
-          {
-            Object[] newArgs = new Object[args.length];
-            for (int i=0; i<args.length; i++)
-            {
-              if (args[i] instanceof Formattable)
-              {
-                newArgs[i] = args[i].toString();
-              }
-              else
-              {
-                newArgs[i] = args[i];
-              }
-            }
-            s = new Formatter(locale).format(locale, fmt, newArgs).toString();
-          }
-          else
-          {
-            s = new Formatter(locale).format(locale, fmt, args).toString();
-          }
-        }
-        else
-        {
-          s = new Formatter(locale).format(locale, fmt, args).toString();
-        }
-      } catch (IllegalFormatException e) {
-        // This should not happend with any of our internal messages.
-        // However, this may happen for raw messages that have a
-        // mismatch between argument specifier type and argument type.
-        s = fmt;
-      }
-    } else {
-      s = fmt;
-    }
-    if (s == null) s = "";
-    return s;
-  }
-
-  /**
-   * Gets the descriptor that holds descriptive information
-   * about this message.
-   * @return MessageDescriptor information
-   */
-  public MessageDescriptor getDescriptor() {
-    return this.descriptor;
-  }
-
-  /**
-   * Returns the length of this message as rendered using the default
-   * locale.
-   *
-   * @return  the number of <code>char</code>s in this message
-   */
-  public int length() {
-    return length(Locale.getDefault());
-  }
-
-  /**
-   * Returns the byte representation of this messages in the default
-   * locale.
-   *
-   * @return bytes for this message
-   */
-  public byte[] getBytes() {
-    return toString().getBytes();
-  }
-
-  /**
-   * Returns the <code>char</code> value at the specified index of
-   * this message rendered using the default locale.
-   *
-   * @param   index   the index of the <code>char</code> value to be returned
-   *
-   * @return  the specified <code>char</code> value
-   *
-   * @throws  IndexOutOfBoundsException
-   *          if the <tt>index</tt> argument is negative or not less than
-   *          <tt>length()</tt>
-   */
-  public char charAt(int index) throws IndexOutOfBoundsException {
-    return charAt(Locale.getDefault(), index);
-  }
-
-  /**
-   * Returns a new <code>CharSequence</code> that is a subsequence
-   * of this message rendered using the default locale.
-   * The subsequence starts with the <code>char</code>
-   * value at the specified index and ends with the <code>char</code>
-   * value at index <tt>end - 1</tt>.  The length (in <code>char</code>s)
-   * of the returned sequence is <tt>end - start</tt>, so if
-   * <tt>start == end</tt> then an empty sequence is returned.
-   *
-   * @param   start   the start index, inclusive
-   * @param   end     the end index, exclusive
-   *
-   * @return  the specified subsequence
-   *
-   * @throws  IndexOutOfBoundsException
-   *          if <tt>start</tt> or <tt>end</tt> are negative,
-   *          if <tt>end</tt> is greater than <tt>length()</tt>,
-   *          or if <tt>start</tt> is greater than <tt>end</tt>
-   */
-  public CharSequence subSequence(int start, int end)
-          throws IndexOutOfBoundsException
-  {
-    return subSequence(Locale.getDefault(), start, end);
-  }
-
-  /**
-   * Returns the length of this message as rendered using a specific
-   * locale.
-   *
-   * @param   locale for which the rendering of this message will be
-   *          used in determining the length
-   * @return  the number of <code>char</code>s in this message
-   */
-  public int length(Locale locale) {
-    return toString(locale).length();
-  }
-
-  /**
-   * Returns the <code>char</code> value at the specified index of
-   * this message rendered using a specific.
-   *
-   * @param   locale for which the rendering of this message will be
-   *          used in determining the character
-   * @param   index   the index of the <code>char</code> value to be returned
-   *
-   * @return  the specified <code>char</code> value
-   *
-   * @throws  IndexOutOfBoundsException
-   *          if the <tt>index</tt> argument is negative or not less than
-   *          <tt>length()</tt>
-   */
-  public char charAt(Locale locale, int index)
-          throws IndexOutOfBoundsException
-  {
-    return toString(locale).charAt(index);
-  }
-
-  /**
-   * Returns a new <code>CharSequence</code> that is a subsequence
-   * of this message rendered using a specific locale.
-   * The subsequence starts with the <code>char</code>
-   * value at the specified index and ends with the <code>char</code>
-   * value at index <tt>end - 1</tt>.  The length (in <code>char</code>s)
-   * of the returned sequence is <tt>end - start</tt>, so if
-   * <tt>start == end</tt> then an empty sequence is returned.
-   *
-   * @param   locale for which the rendering of this message will be
-   *          used in determining the character
-   * @param   start   the start index, inclusive
-   * @param   end     the end index, exclusive
-   *
-   * @return  the specified subsequence
-   *
-   * @throws  IndexOutOfBoundsException
-   *          if <tt>start</tt> or <tt>end</tt> are negative,
-   *          if <tt>end</tt> is greater than <tt>length()</tt>,
-   *          or if <tt>start</tt> is greater than <tt>end</tt>
-   */
-  public CharSequence subSequence(Locale locale, int start, int end)
-    throws IndexOutOfBoundsException
-  {
-    return toString(locale).subSequence(start, end);
-  }
-
-  /**
-   * Formats the object using the provided {@link Formatter formatter}.
-   *
-   * @param  formatter
-   *         The {@link Formatter formatter}.
-   *
-   * @param  flags
-   *         The flags modify the output format.  The value is interpreted as
-   *         a bitmask.  Any combination of the following flags may be set:
-   *         {@link java.util.FormattableFlags#LEFT_JUSTIFY}, {@link
-   *         java.util.FormattableFlags#UPPERCASE}, and {@link
-   *         java.util.FormattableFlags#ALTERNATE}.  If no flags are set, the
-   *         default formatting of the implementing class will apply.
-   *
-   * @param  width
-   *         The minimum number of characters to be written to the output.
-   *         If the length of the converted value is less than the
-   *         <tt>width</tt> then the output will be padded by
-   *         <tt>'&nbsp;&nbsp;'</tt> until the total number of characters
-   *         equals width.  The padding is at the beginning by default.  If
-   *         the {@link java.util.FormattableFlags#LEFT_JUSTIFY} flag is set
-   *         then the padding will be at the end.  If <tt>width</tt> is
-   *         <tt>-1</tt> then there is no minimum.
-   *
-   * @param  precision
-   *         The maximum number of characters to be written to the output.
-   *         The precision is applied before the width, thus the output will
-   *         be truncated to <tt>precision</tt> characters even if the
-   *         <tt>width</tt> is greater than the <tt>precision</tt>.  If
-   *         <tt>precision</tt> is <tt>-1</tt> then there is no explicit
-   *         limit on the number of characters.
-   *
-   * @throws  IllegalFormatException
-   *          If any of the parameters are invalid.  For specification of all
-   *          possible formatting errors, see the <a
-   *          href="../util/Formatter.html#detail">Details</a> section of the
-   *          formatter class specification.
-   */
-  public void formatTo(Formatter formatter, int flags,
-                       int width, int precision)
-    throws IllegalFormatException
-  {
-    // Ignores flags, width and precission for now.
-    // see javadoc for Formattable
-    Locale l = formatter.locale();
-    formatter.format(l, descriptor.getFormatString(l), args);
-  }
-
-
-  /**
-   * Creates a parameterized instance.  See the class header
-   * for instructions on how to create messages outside this
-   * package.
-   * @param descriptor for this message
-   * @param args arguments for replacing specifiers in the
-   *        message's format string
-   */
-  Message(MessageDescriptor descriptor, Object... args) {
-    this.descriptor = descriptor;
-    this.args = args;
-  }
-
-  /**
-   * Compares this object with the specified object for order.  Returns a
-   * negative integer, zero, or a positive integer as this object is less
-   * than, equal to, or greater than the specified object.
-   *
-   * @param   o the object to be compared.
-   * @return  a negative integer, zero, or a positive integer as this object
-   *          is less than, equal to, or greater than the specified object.
-   */
-  public int compareTo(Message o) {
-    return toString().compareTo(o.toString());
-  }
-
-  /**
-   * Indicates whether some other message is "equal to" this one.  Messages
-   * are considered equal if their string representation in the default
-   * locale are equal.
-   *
-   * @param   o   the reference object with which to compare.
-   * @return  <code>true</code> if this object is the same as the obj
-   *          argument; <code>false</code> otherwise.
-   * @see     #hashCode()
-   * @see     java.util.Hashtable
-   */
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-
-    Message message = (Message) o;
-
-    return toString().equals(message.toString());
-  }
-
-  /**
-   * Returns a hash code value for the object.
-   *
-   * @return  a hash code value for this object.
-   * @see     java.lang.Object#equals(java.lang.Object)
-   * @see     java.util.Hashtable
-   */
-  @Override
-  public int hashCode() {
-    int result;
-    result = 31 * toString().hashCode();
-    return result;
-  }
-
-
-  // TODO: remove this code once the JDK issue referenced in 3077 is closed.
-  /**
-   * Returns whether we are running on AIX or not.
-   * @return <CODE>true</CODE> if we are running on AIX and
-   * <CODE>false</CODE> otherwise.
-   */
-  private boolean isAIX()
-  {
-    return "aix".equalsIgnoreCase(System.getProperty("os.name"));
-  }
-
-}
diff --git a/opendj3-server-dev/src/messages/src/org/opends/messages/MessageBuilder.java b/opendj3-server-dev/src/messages/src/org/opends/messages/MessageBuilder.java
deleted file mode 100644
index 4a6c769..0000000
--- a/opendj3-server-dev/src/messages/src/org/opends/messages/MessageBuilder.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2007-2009 Sun Microsystems, Inc.
- */
-
-package org.opends.messages;
-
-import java.util.Locale;
-import java.util.List;
-import java.util.LinkedList;
-import java.io.Serializable;
-
-/**
- * A builder used specifically for messages.  As messages are
- * appended they are translated to their string representation
- * for storage using the locale specified in the constructor.
- *
- * Note that before you use this class you should consider whether
- * it is appropriate.  In general composing messages by appending
- * message to each other may not produce a message that is
- * formatted appropriately for all locales.  It is usually better
- * to create messages by composition.  In other words you should
- * create a base message that contains one or more string argument
- * specifiers (%s) and define other message objects to use as
- * replacement variables.  In this way language translators have
- * a change to reformat the message for a particular locale if
- * necessary.
- */
-@org.opends.server.types.PublicAPI(
-    stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-    mayInstantiate=true,
-    mayExtend=false,
-    mayInvoke=true)
-public final class MessageBuilder implements Appendable, CharSequence,
-    Serializable
-{
-
-  private static final long serialVersionUID = -3292823563904285315L;
-
-  /** Used internally to store appended messages. */
-  private final StringBuilder sb = new StringBuilder();
-
-  /** Used internally to store appended messages. */
-  private final List<Message> messages = new LinkedList<Message>();
-
-  /** Used to render the string representation of appended messages. */
-  private final Locale locale;
-
-  /**
-   * Constructs an instance that will build messages
-   * in the default locale.
-   */
-  public MessageBuilder() {
-    this(Locale.getDefault());
-  }
-
-  /**
-   * Constructs an instance that will build messages
-   * in the default locale having an initial message.
-   *
-   * @param message initial message
-   */
-  public MessageBuilder(Message message) {
-    this(Locale.getDefault());
-    append(message);
-  }
-
-  /**
-   * Constructs an instance that will build messages
-   * in the default locale having an initial message.
-   *
-   * @param message initial message
-   */
-  public MessageBuilder(String message) {
-    this(Locale.getDefault());
-    append(message);
-  }
-
-  /**
-   * Constructs an instance from another <code>MessageBuilder</code>.
-   *
-   * @param mb from which to construct a new message builder
-   */
-  public MessageBuilder(MessageBuilder mb) {
-    for (Message msg : mb.messages) {
-      this.messages.add(msg);
-    }
-    this.sb.append(sb);
-    this.locale = mb.locale;
-  }
-
-  /**
-   * Constructs an instance that will build messages
-   * in a specified locale.
-   *
-   * @param locale used for translating appended messages
-   */
-  public MessageBuilder(Locale locale) {
-    this.locale = locale;
-  }
-
-  /**
-   * Append a message to this builder.  The string
-   * representation of the locale specifed in the
-   * constructor will be stored in this builder.
-   *
-   * @param message to be appended
-   * @return reference to this builder
-   */
-  public MessageBuilder append(Message message) {
-    if (message != null) {
-      sb.append(message.toString(locale));
-      messages.add(message);
-    }
-    return this;
-  }
-
-  /**
-   * Append an integer to this builder.
-   *
-   * @param number to append
-   * @return reference to this builder
-   */
-  public MessageBuilder append(int number) {
-    append(String.valueOf(number));
-    return this;
-  }
-
-  /**
-   * Append an object to this builder.
-   *
-   * @param object to append
-   * @return reference to this builder
-   */
-  public MessageBuilder append(Object object) {
-    if (object != null) {
-      append(String.valueOf(object));
-    }
-    return this;
-  }
-
-
-  /**
-   * Append a string to this builder.
-   *
-   * @param cs to append
-   * @return reference to this builder
-   */
-  public MessageBuilder append(CharSequence cs) {
-    if (cs != null) {
-      sb.append(cs);
-      if (cs instanceof Message) {
-        messages.add((Message)cs);
-      } else {
-        messages.add(Message.raw(cs));
-      }
-    }
-    return this;
-  }
-
-  /**
-   * Appends a subsequence of the specified character sequence to this
-   * <tt>Appendable</tt>.
-   *
-   * <p> An invocation of this method of the form <tt>out.append(csq, start,
-   * end)</tt> when <tt>csq</tt> is not <tt>null</tt>, behaves in
-   * exactly the same way as the invocation
-   *
-   * <pre>
-   *     out.append(csq.subSequence(start, end)) </pre>
-   *
-   * @param  csq
-   *         The character sequence from which a subsequence will be
-   *         appended.  If <tt>csq</tt> is <tt>null</tt>, then characters
-   *         will be appended as if <tt>csq</tt> contained the four
-   *         characters <tt>"null"</tt>.
-   *
-   * @param  start
-   *         The index of the first character in the subsequence
-   *
-   * @param  end
-   *         The index of the character following the last character in the
-   *         subsequence
-   *
-   * @return  A reference to this <tt>Appendable</tt>
-   *
-   * @throws  IndexOutOfBoundsException
-   *          If <tt>start</tt> or <tt>end</tt> are negative, <tt>start</tt>
-   *          is greater than <tt>end</tt>, or <tt>end</tt> is greater than
-   *          <tt>csq.length()</tt>
-   */
-  public MessageBuilder append(CharSequence csq, int start, int end)
-    throws IndexOutOfBoundsException
-  {
-    return append(csq.subSequence(start, end));
-  }
-
-  /**
-   * Appends the specified character to this <tt>Appendable</tt>.
-   *
-   * @param  c
-   *         The character to append
-   *
-   * @return  A reference to this <tt>Appendable</tt>
-   */
-  public MessageBuilder append(char c) {
-    return append(String.valueOf(c));
-  }
-
-  /**
-   * Returns a string containing the characters in this sequence in the same
-   * order as this sequence.  The length of the string will be the length of
-   * this sequence.
-   *
-   * @return  a string consisting of exactly this sequence of characters
-   */
-  public String toString() {
-    return sb.toString();
-  }
-
-  /**
-   * Returns a string representation of the appended content
-   * in the specific locale.  Only <code>Message</code>s
-   * appended to this builder are rendered in the requested
-   * locale.  Raw strings appended to this buffer are not
-   * translated to different locale.
-   *
-   * @param locale requested
-   * @return String representation
-   */
-  public String toString(Locale locale) {
-    StringBuilder sb = new StringBuilder();
-    for (Message m : messages) {
-      sb.append(m.toString(locale));
-    }
-    return sb.toString();
-  }
-
-  /**
-   * Returns a raw message representation of the appended content.
-   * <p>
-   * If the first object appended to this <code>MessageBuilder</code>
-   * was a <code>Message</code> then the returned message will
-   * inherit its category and severity. Otherwise the returned message
-   * will have category {@link org.opends.messages.Category#USER_DEFINED}
-   *  and severity {@link org.opends.messages.Severity#INFORMATION}.
-   *
-   * @return Message raw message representing builder content
-   */
-  public Message toMessage() {
-    if(messages.isEmpty())
-    {
-      return Message.EMPTY;
-    }
-
-    StringBuffer fmtString = new StringBuffer();
-    for (int i = 0; i < messages.size(); i++) {
-      fmtString.append("%s");
-    }
-
-    // Inherit the category and severity of the first message.
-    MessageDescriptor md = messages.get(0).getDescriptor();
-    return Message.raw(md.getCategory(), md.getSeverity(), fmtString,
-        messages.toArray());
-  }
-
-  /**
-   * Returns the length of the string representation of this builder
-   * using the default locale.
-   *
-   * @return  the number of <code>char</code>s in this message
-   */
-  public int length() {
-    return length(Locale.getDefault());
-  }
-
-  /**
-   * Returns the <code>char</code> value at the specified index of
-   * the string representation of this builder using the default locale.
-   *
-   * @param   index   the index of the <code>char</code> value to be returned
-   *
-   * @return  the specified <code>char</code> value
-   *
-   * @throws  IndexOutOfBoundsException
-   *          if the <tt>index</tt> argument is negative or not less than
-   *          <tt>length()</tt>
-   */
-  public char charAt(int index) throws IndexOutOfBoundsException {
-    return charAt(Locale.getDefault(), index);
-  }
-
-  /**
-   * Returns a new <code>CharSequence</code> that is a subsequence of
-   * the string representation of this builder using the default locale.
-   * The subsequence starts with the <code>char</code>
-   * value at the specified index and ends with the <code>char</code>
-   * value at index <tt>end - 1</tt>.  The length (in <code>char</code>s)
-   * of the returned sequence is <tt>end - start</tt>, so if
-   * <tt>start == end</tt> then an empty sequence is returned.
-   *
-   * @param   start   the start index, inclusive
-   * @param   end     the end index, exclusive
-   *
-   * @return  the specified subsequence
-   *
-   * @throws  IndexOutOfBoundsException
-   *          if <tt>start</tt> or <tt>end</tt> are negative,
-   *          if <tt>end</tt> is greater than <tt>length()</tt>,
-   *          or if <tt>start</tt> is greater than <tt>end</tt>
-   */
-  public CharSequence subSequence(int start, int end)
-          throws IndexOutOfBoundsException
-  {
-    return subSequence(Locale.getDefault(), start, end);
-  }
-
-  /**
-   * Returns the length of the string representation of this builder
-   * using a specific locale.
-   *
-   * @param   locale for which the rendering of this message will be
-   *          used in determining the length
-   * @return  the number of <code>char</code>s in this message
-   */
-  public int length(Locale locale) {
-    return toString(locale).length();
-  }
-
-  /**
-   * Returns the <code>char</code> value at the specified index of
-   * the string representation of this builder using a specific locale.
-   *
-   * @param   locale for which the rendering of this message will be
-   *          used in determining the character
-   * @param   index   the index of the <code>char</code> value to be returned
-   *
-   * @return  the specified <code>char</code> value
-   *
-   * @throws  IndexOutOfBoundsException
-   *          if the <tt>index</tt> argument is negative or not less than
-   *          <tt>length()</tt>
-   */
-  public char charAt(Locale locale, int index)
-          throws IndexOutOfBoundsException
-  {
-    return toString(locale).charAt(index);
-  }
-
-  /**
-   * Returns a new <code>CharSequence</code> that is a subsequence of
-   * the string representation of this builder using a specific locale.
-   * The subsequence starts with the <code>char</code>
-   * value at the specified index and ends with the <code>char</code>
-   * value at index <tt>end - 1</tt>.  The length (in <code>char</code>s)
-   * of the returned sequence is <tt>end - start</tt>, so if
-   * <tt>start == end</tt> then an empty sequence is returned.
-   *
-   * @param   locale for which the rendering of this message will be
-   *          used in determining the character
-   * @param   start   the start index, inclusive
-   * @param   end     the end index, exclusive
-   *
-   * @return  the specified subsequence
-   *
-   * @throws  IndexOutOfBoundsException
-   *          if <tt>start</tt> or <tt>end</tt> are negative,
-   *          if <tt>end</tt> is greater than <tt>length()</tt>,
-   *          or if <tt>start</tt> is greater than <tt>end</tt>
-   */
-  public CharSequence subSequence(Locale locale, int start, int end)
-    throws IndexOutOfBoundsException
-  {
-    return toString(locale).subSequence(start, end);
-  }
-
-
-}
diff --git a/opendj3-server-dev/src/messages/src/org/opends/messages/MessageDescriptor.java b/opendj3-server-dev/src/messages/src/org/opends/messages/MessageDescriptor.java
deleted file mode 100644
index 110aa14..0000000
--- a/opendj3-server-dev/src/messages/src/org/opends/messages/MessageDescriptor.java
+++ /dev/null
@@ -1,1266 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
- */
-package org.opends.messages;
-
-import java.util.HashMap;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-
-/**
- * Base class for all Message descriptor classes.
- */
-@org.opends.server.types.PublicAPI(
-    stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-    mayInstantiate=false,
-    mayExtend=false,
-    mayInvoke=true)
-public abstract class MessageDescriptor {
-
-  /**
-   * ID for messages that don't have a real ID.
-   */
-  public static final int NULL_ID = -1;
-
-  /**
-   * The maximum number of arguments that can be handled by
-   * a specific subclass.  If you define more subclasses be
-   * sure to increment this number appropriately.
-   */
-  static public final int DESCRIPTOR_MAX_ARG_HANDLER = 11;
-
-  /**
-   * The base name of the specific argument handling subclasses
-   * defined below.  The class names consist of the base name
-   * followed by a number indicating the number of arguments
-   * that they handle when creating messages or the letter "N"
-   * meaning any number of arguments.
-   */
-  public static final String DESCRIPTOR_CLASS_BASE_NAME = "Arg";
-
-  /**
-   * Subclass for creating messages with no arguments.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg0 extends MessageDescriptor {
-
-    /**
-     * Cached copy of the message created by this descriptor.  We can
-     * get away with this for the zero argument message because it is
-     * immutable.
-     */
-    private Message message;
-
-    private boolean requiresFormat;
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg0(String rbBase, String key, Category category,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-      message = new Message(this);
-      requiresFormat = containsArgumentLiterals(getFormatString());
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg0(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-      message = new Message(this);
-      requiresFormat = containsArgumentLiterals(getFormatString());
-    }
-
-    /**
-     * Creates a message.
-     * @return Message object
-     */
-    public Message get() {
-      return message;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return requiresFormat;
-    }
-  }
-
-  /**
-   * Subclass for creating messages with one argument.
-   * @param <T1> The type of the first message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg1<T1> extends MessageDescriptor {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg1(String rbBase, String key, Category category,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg1(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     */
-    public Message get(T1 a1) {
-      return new Message(this, a1);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with two arguments.
-   * @param <T1> The type of the first message argument.
-   * @param <T2> The type of the second message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg2<T1, T2> extends MessageDescriptor {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg2(String rbBase, String key, Category category,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg2(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     * @param a2 message argument
-     */
-    public Message get(T1 a1, T2 a2) {
-      return new Message(this, a1, a2);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with three arguments.
-   * @param <T1> The type of the first message argument.
-   * @param <T2> The type of the second message argument.
-   * @param <T3> The type of the third message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg3<T1, T2, T3> extends MessageDescriptor {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg3(String rbBase, String key, Category category,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg3(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     * @param a2 message argument
-     * @param a3 message argument
-     */
-    public Message get(T1 a1, T2 a2, T3 a3) {
-      return new Message(this, a1, a2, a3);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with four arguments.
-   * @param <T1> The type of the first message argument.
-   * @param <T2> The type of the second message argument.
-   * @param <T3> The type of the third message argument.
-   * @param <T4> The type of the fourth message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg4<T1, T2, T3, T4> extends MessageDescriptor {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg4(String rbBase, String key, Category category,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg4(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     * @param a2 message argument
-     * @param a3 message argument
-     * @param a4 message argument
-     */
-    public Message get(T1 a1, T2 a2, T3 a3, T4 a4) {
-      return new Message(this, a1, a2, a3, a4);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with five arguments.
-   * @param <T1> The type of the first message argument.
-   * @param <T2> The type of the second message argument.
-   * @param <T3> The type of the third message argument.
-   * @param <T4> The type of the fourth message argument.
-   * @param <T5> The type of the fifth message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg5<T1, T2, T3, T4, T5> extends MessageDescriptor {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg5(String rbBase, String key, Category category,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg5(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     * @param a2 message argument
-     * @param a3 message argument
-     * @param a4 message argument
-     * @param a5 message argument
-     */
-    public Message get(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5) {
-      return new Message(this, a1, a2, a3, a4, a5);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with six arguments.
-   * @param <T1> The type of the first message argument.
-   * @param <T2> The type of the second message argument.
-   * @param <T3> The type of the third message argument.
-   * @param <T4> The type of the fourth message argument.
-   * @param <T5> The type of the fifth message argument.
-   * @param <T6> The type of the sixth message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg6<T1, T2, T3, T4, T5, T6> extends
-      MessageDescriptor {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg6(String rbBase, String key, Category category,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg6(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     * @param a2 message argument
-     * @param a3 message argument
-     * @param a4 message argument
-     * @param a5 message argument
-     * @param a6 message argument
-     */
-    public Message get(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6) {
-      return new Message(this, a1, a2, a3, a4, a5, a6);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with seven arguments.
-   * @param <T1> The type of the first message argument.
-   * @param <T2> The type of the second message argument.
-   * @param <T3> The type of the third message argument.
-   * @param <T4> The type of the fourth message argument.
-   * @param <T5> The type of the fifth message argument.
-   * @param <T6> The type of the sixth message argument.
-   * @param <T7> The type of the seventh message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg7<T1, T2, T3, T4, T5, T6, T7>
-          extends MessageDescriptor
-  {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg7(String rbBase, String key, Category category,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg7(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     * @param a2 message argument
-     * @param a3 message argument
-     * @param a4 message argument
-     * @param a5 message argument
-     * @param a6 message argument
-     * @param a7 message argument
-     */
-    public Message get(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6, T7 a7) {
-      return new Message(this, a1, a2, a3, a4, a5, a6, a7);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with eight arguments.
-   * @param <T1> The type of the first message argument.
-   * @param <T2> The type of the second message argument.
-   * @param <T3> The type of the third message argument.
-   * @param <T4> The type of the fourth message argument.
-   * @param <T5> The type of the fifth message argument.
-   * @param <T6> The type of the sixth message argument.
-   * @param <T7> The type of the seventh message argument.
-   * @param <T8> The type of the eighth message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg8<T1, T2, T3, T4, T5, T6, T7, T8>
-          extends MessageDescriptor
-  {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg8(String rbBase, String key, Category category,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg8(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     * @param a2 message argument
-     * @param a3 message argument
-     * @param a4 message argument
-     * @param a5 message argument
-     * @param a6 message argument
-     * @param a7 message argument
-     * @param a8 message argument
-     */
-    public Message get(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6,
-                          T7 a7, T8 a8) {
-      return new Message(this, a1, a2, a3, a4, a5, a6, a7, a8);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with nine arguments.
-   * @param <T1> The type of the first message argument.
-   * @param <T2> The type of the second message argument.
-   * @param <T3> The type of the third message argument.
-   * @param <T4> The type of the fourth message argument.
-   * @param <T5> The type of the fifth message argument.
-   * @param <T6> The type of the sixth message argument.
-   * @param <T7> The type of the seventh message argument.
-   * @param <T8> The type of the eighth message argument.
-   * @param <T9> The type of the ninth message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg9<T1, T2, T3, T4, T5, T6, T7, T8, T9>
-          extends MessageDescriptor {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg9(String rbBase, String key, Category category,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg9(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     * @param a2 message argument
-     * @param a3 message argument
-     * @param a4 message argument
-     * @param a5 message argument
-     * @param a6 message argument
-     * @param a7 message argument
-     * @param a8 message argument
-     * @param a9 message argument
-     */
-    public Message get(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6,
-                          T7 a7, T8 a8, T9 a9) {
-      return new Message(this, a1, a2, a3, a4, a5, a6, a7, a8, a9);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with ten arguments.
-   * @param <T1> The type of the first message argument.
-   * @param <T2> The type of the second message argument.
-   * @param <T3> The type of the third message argument.
-   * @param <T4> The type of the fourth message argument.
-   * @param <T5> The type of the fifth message argument.
-   * @param <T6> The type of the sixth message argument.
-   * @param <T7> The type of the seventh message argument.
-   * @param <T8> The type of the eighth message argument.
-   * @param <T9> The type of the ninth message argument.
-   * @param <T10> The type of the tenth message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg10<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>
-          extends MessageDescriptor {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg10(String rbBase, String key, Category category,
-               Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg10(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     * @param a2 message argument
-     * @param a3 message argument
-     * @param a4 message argument
-     * @param a5 message argument
-     * @param a6 message argument
-     * @param a7 message argument
-     * @param a8 message argument
-     * @param a9 message argument
-     * @param a10 message argument
-     */
-    public Message get(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6,
-                          T7 a7, T8 a8, T9 a9, T10 a10) {
-      return new Message(this, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with eleven arguments.
-   * @param <T1> The type of the first message argument.
-   * @param <T2> The type of the second message argument.
-   * @param <T3> The type of the third message argument.
-   * @param <T4> The type of the fourth message argument.
-   * @param <T5> The type of the fifth message argument.
-   * @param <T6> The type of the sixth message argument.
-   * @param <T7> The type of the seventh message argument.
-   * @param <T8> The type of the eighth message argument.
-   * @param <T9> The type of the ninth message argument.
-   * @param <T10> The type of the tenth message argument.
-   * @param <T11> The type of the eleventh message argument.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class Arg11<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>
-          extends MessageDescriptor
-  {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg11(String rbBase, String key, Category category,
-               Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public Arg11(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param a1 message argument
-     * @param a2 message argument
-     * @param a3 message argument
-     * @param a4 message argument
-     * @param a5 message argument
-     * @param a6 message argument
-     * @param a7 message argument
-     * @param a8 message argument
-     * @param a9 message argument
-     * @param a10 message argument
-     * @param a11 message argument
-     */
-    public Message get(T1 a1, T2 a2, T3 a3, T4 a4, T5 a5, T6 a6,
-                          T7 a7, T8 a8, T9 a9, T10 a10, T11 a11) {
-      return new Message(this, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * Subclass for creating messages with an any number of arguments.
-   * In general this class should be used when a message needs to be
-   * defined with more arguments that can be handled with the current
-   * number of subclasses
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.UNCOMMITTED,
-      mayInstantiate=true,
-      mayExtend=false,
-      mayInvoke=true)
-  static public final class ArgN extends MessageDescriptor {
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param category of created messages
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public ArgN(String rbBase, String key, Category category,
-               Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, category, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a parameterized instance.
-     * @param rbBase base of the backing resource bundle
-     * @param key for accessing the format string from the resource bundle
-     * @param mask to apply to the USER_DEFINED category
-     * @param severity of created messages
-     * @param ordinal of created messages
-     * @param classLoader the class loader to be used to get the ResourceBundle
-     */
-    public ArgN(String rbBase, String key, int mask,
-              Severity severity, int ordinal, ClassLoader classLoader) {
-      super(rbBase, key, mask, severity, ordinal, classLoader);
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param args message arguments
-     */
-    public Message get(Object... args) {
-      return new Message(this, args);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return true;
-    }
-
-  }
-
-  /**
-   * A descriptor for creating a raw message from a <code>String</code>.
-   * In general this descriptor should NOT be used internally.  OpenDS
-   * plugins may want to use the mechanism to create messages without
-   * storing their strings in resource bundles.
-   */
-  @org.opends.server.types.PublicAPI(
-      stability=org.opends.server.types.StabilityLevel.PRIVATE
-  )
-  static final class Raw extends MessageDescriptor {
-
-    private String formatString;
-
-    private boolean requiresFormatter;
-
-    /**
-     * Creates a parameterized instance.
-     * @param formatString for created messages
-     * @param category for created messages
-     * @param severity for created messages
-     */
-    Raw(CharSequence formatString, Category category,
-                                Severity severity) {
-      super(null, null, category, severity, null, null);
-      this.formatString = formatString != null ? formatString.toString() : "";
-      this.requiresFormatter = this.formatString.matches(".*%.*");
-    }
-
-    /**
-     * Creates a message with arguments that will replace format
-     * specifiers in the associated format string when the message
-     * is rendered to string representation.
-     * @return Message object
-     * @param args message arguments
-     */
-    public Message get(Object... args) {
-      return new Message(this, args);
-    }
-
-    /**
-     * Overridden in order to bypass the resource bundle
-     * plumbing and return the format string directly.
-     * @param locale ignored
-     * @return format string
-     */
-    @Override
-    String getFormatString(Locale locale) {
-      return this.formatString;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    boolean requiresFormatter() {
-      return this.requiresFormatter;
-    }
-
-  }
-
-  /** String for accessing backing resource bundle. */
-  private final String rbBase;
-
-  /** Used for accessing format string from the resource bundle. */
-  private final String key;
-
-  /** Category for messages created by this descriptor. */
-  private final Category category;
-
-  /**
-   * Custom mask associated with messages created by this
-   * descriptor.  The value of this variable might be null
-   * to indicate that the mask should come from
-   * <code>category</code>.
-   */
-  private final Integer mask;
-
-  /**
-   * The severity associated with messages created by this
-   * descriptor.
-   */
-  private final Severity severity;
-
-  /**
-   * The value that makes a message unique among other messages
-   * having the same severity and category.  May be null for
-   * raw messages.
-   */
-  private final Integer ordinal;
-
-  /**
-   * The class loader to be used to retrieve the ResourceBundle.  If null
-   * the default class loader will be used.
-   */
-  private final ClassLoader classLoader;
-
-
-  private final Map<Locale,String> formatStrMap = new HashMap<Locale,String>();
-
-  /**
-   * Obtains the category of this descriptor.  Guaranteed not to be null.
-   * @return Category of this message
-   */
-  public final Category getCategory() {
-    return this.category;
-  }
-
-  /**
-   * Obtains the severity of this descriptor.  Guaranteed not to be null.
-   * @return Category of this message
-   */
-  public final Severity getSeverity() {
-    return this.severity;
-  }
-
-  /**
-   * Obtains the ordinal value for this message which makes messages
-   * unique among messages defined with the same category and severity.
-   * @return int ordinal value
-   */
-  public final int getOrdinal() {
-    if (this.ordinal == null)
-      return 0;
-    else
-      return this.ordinal;
-  }
-
-  /**
-   * Returns the ID unique to all OpenDS messages.
-   * @return unique ID
-   */
-  public final int getId() {
-    if (this.ordinal == null) { // ordinal may be null for raw messages
-      return NULL_ID;
-    } else {
-      return this.ordinal | this.category.getMask() | this.severity.getMask();
-    }
-  }
-
-  /**
-   * Obtains the mask of this descriptor.  The mask will either be
-   * the mask of the associated <code>Category</code> or the mask
-   * explicitly set in the constructor.
-   * @return Integer mask value
-   */
-  public final int getMask() {
-    if (this.mask != null) {
-      return this.mask;
-    } else {
-      return this.category.getMask();
-    }
-  }
-
-  /**
-   * Returns the key for accessing the message template in a resource bundle.
-   * May be null for raw messages.
-   * @return key of this message
-   */
-  public final String getKey() {
-    return this.key;
-  }
-
-  /**
-   * Obtains the resource bundle base string used to access the
-   * resource bundle containing created message's format string.
-   * May be null for raw messages.
-   * @return string base
-   */
-  public final String getBase() {
-    return this.rbBase;
-  }
-
-  /**
-   * Indicates whether or not this descriptor format string should
-   * be processed by Formatter during string rendering.
-   * @return boolean where true means Formatter should be used; false otherwise
-   * @see java.util.Formatter
-   */
-  abstract boolean requiresFormatter();
-
-  /**
-   * Obtains the format string for constructing the string
-   * value of this message according to the default
-   * locale.
-   * @return format string
-   */
-  final String getFormatString() {
-    return getFormatString(Locale.getDefault());
-  }
-
-  /**
-   * Obtains the format string for constructing the string
-   * value of this message according to the requested
-   * locale.
-   * @param locale for the returned format string
-   * @return format string
-   */
-  String getFormatString(Locale locale) {
-    String fmtStr = formatStrMap.get(locale);
-    if (fmtStr == null) {
-      ResourceBundle bundle = getBundle(locale);
-      fmtStr = bundle.getString(this.key);
-      formatStrMap.put(locale, fmtStr);
-    }
-    return fmtStr;
-  }
-
-  /**
-   * Indicates whether or not formatting should be applied
-   * to the given format string.  Note that a format string
-   * might have literal specifiers (%% or %n for example) that
-   * require formatting but are not replaced by arguments.
-   * @param s candidate for formatting
-   * @return boolean where true indicates that the format
-   *         string requires formatting
-   */
-  protected final boolean containsArgumentLiterals(String s) {
-    return s.matches(".*%[n|%].*"); // match Formatter literals
-  }
-
-  private ResourceBundle getBundle(Locale locale) {
-    if (locale == null) locale = Locale.getDefault();
-    if (classLoader == null)
-    {
-      return ResourceBundle.getBundle(this.rbBase, locale);
-    }
-    else
-    {
-      return ResourceBundle.getBundle(this.rbBase, locale, classLoader);
-    }
-  }
-
-  /**
-   * Creates a parameterized message descriptor.
-   * @param rbBase string for accessing the underlying message bundle
-   * @param key for accessing the format string from the message bundle
-   * @param category of any created message
-   * @param severity of any created message
-   * @param ordinal of any created message
-   * @param classLoader the class loader to be used to get the ResourceBundle
-   */
-  private MessageDescriptor(String rbBase, String key, Category category,
-                     Severity severity, Integer ordinal,
-                     ClassLoader classLoader) {
-    if (category == null) {
-      throw new NullPointerException("Null Category value for message " +
-              "descriptor with key " + key);
-    }
-    if (severity == null) {
-      throw new NullPointerException("Null Severity value for message " +
-              "descriptor with key " + key);
-    }
-    this.rbBase = rbBase;
-    this.key = key;
-    this.category = category;
-    this.severity = severity;
-    this.ordinal = ordinal;
-    this.classLoader = classLoader;
-    this.mask = null;
-  }
-
-  /**
-   * Creates a parameterized message descriptor.  Messages created by
-   * this descriptor will have a category of <code>Category.USER_DEFINED</code>
-   * and have a custom mask indicated by <code>mask</code>.
-   * @param rbBase string for accessing the underlying message bundle
-   * @param key for accessing the format string from the message bundle
-   * @param mask custom mask
-   * @param severity of any created message
-   * @param ordinal of any created message
-   * @param classLoader the class loader to be used to get the ResourceBundle
-   */
-  private MessageDescriptor(String rbBase, String key, int mask,
-                     Severity severity, Integer ordinal,
-                     ClassLoader classLoader) {
-    if (severity == null) {
-      throw new NullPointerException("Null Severity value for message " +
-              "descriptor with key " + key);
-    }
-    this.rbBase = rbBase;
-    this.key = key;
-    this.category = Category.USER_DEFINED;
-    this.severity = severity;
-    this.ordinal = ordinal;
-    this.classLoader = classLoader;
-    this.mask = mask;
-  }
-
-}
diff --git a/opendj3-server-dev/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java b/opendj3-server-dev/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java
deleted file mode 100644
index 8d63ff2..0000000
--- a/opendj3-server-dev/src/messages/src/org/opends/messages/MessageDescriptorRegistry.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2008 Sun Microsystems, Inc.
- */
-
-package org.opends.messages;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.Collections;
-import java.util.List;
-import java.util.LinkedList;
-import java.io.InputStream;
-import java.io.BufferedReader;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.lang.reflect.Field;
-
-/**
- * Serves as a registry for messages providing access to message descriptors
- * by ID and class in which they are defined.  Classes containing message
- * descriptors are stored in the text file "descriptors.reg" which is
- * generated during the OpenDS build process.
- */
-@org.opends.server.types.PublicAPI(
-     stability=org.opends.server.types.StabilityLevel.PRIVATE)
-final class MessageDescriptorRegistry {
-
-  private static final String REGISTRY_FILE = "descriptors.reg";
-
-  private static final Set<Class<?>> REGISTERED_MESSAGE_CLASSES =
-                  new HashSet<Class<?>>();
-
-  private static final Map<Integer, MessageDescriptor>
-          ID_TO_DESCRIPTORS =
-                  new HashMap<Integer,MessageDescriptor>();
-
-  private static final Map<Class<?>, List<MessageDescriptor>>
-          CLASS_TO_DESCRIPTORS =
-                  new HashMap<Class<?>,List<MessageDescriptor>>();
-
-
-  static {
-    InputStream is = MessageDescriptor.class
-            .getResourceAsStream(REGISTRY_FILE);
-    BufferedReader reader =
-            new BufferedReader(new InputStreamReader(is));
-    String line;
-    try {
-      while (null != (line = reader.readLine())) {
-        String descClassName = line.trim();
-        Class<?> descClass;
-        try {
-          descClass = Class.forName(descClassName);
-          List<MessageDescriptor> mdList = new LinkedList<MessageDescriptor>();
-          CLASS_TO_DESCRIPTORS.put(descClass,  mdList);
-          REGISTERED_MESSAGE_CLASSES.add(descClass);
-          Field[] fa = descClass.getFields();
-          if (fa != null) {
-            for (Field f : fa) {
-              Class<?> c = f.getType();
-              if (MessageDescriptor.class.isAssignableFrom(c)) {
-                MessageDescriptor md = (MessageDescriptor)f.get(null);
-                mdList.add(md);
-                int id = md.getId();
-                if (id != MessageDescriptor.NULL_ID) {
-                  ID_TO_DESCRIPTORS.put(id, md);
-                }
-              }
-            }
-          }
-        } catch (ClassNotFoundException e) {
-          System.err.println("Message class " + descClassName +
-                  " not found.");
-        } catch (IllegalAccessException e) {
-          System.err.println("Error accessing class " +
-                  descClassName + ":  " + e.getMessage());
-        }
-      }
-    } catch (IOException e) {
-      System.err.println("Unable to register message files:  " +
-              e.getMessage());
-    }
-  }
-
-  /**
-   * Returns a message descriptor given its unique OpenDS system-wide ID.
-   *
-   * @param id integer value of the message to retreive
-   * @return MessageDescriptor having the ID of <code>id</code>
-   */
-  public static MessageDescriptor getMessageDescriptor(int id) {
-    return ID_TO_DESCRIPTORS.get(id);
-  }
-
-  /**
-   * Given a registered class containing message descriptors, returns a
-   * list of all message descriptors defined by that class.
-   *
-   * @param mdClass registered class containing message descriptors
-   * @return unmodifiable list of message descriptors declared in
-   *         <code>mdClass</code>
-   */
-
-  public static List<MessageDescriptor> getMessageDescriptorsForClass(
-          Class<?> mdClass)
-  {
-    return Collections.unmodifiableList(CLASS_TO_DESCRIPTORS.get(mdClass));
-  }
-
-  /**
-   * Returns a set of classes registered as having message descriptor
-   * declarations.
-   *
-   * @return list of classes
-   */
-  public static Set<Class<?>> getRegisteredClasses() {
-    return Collections.unmodifiableSet(REGISTERED_MESSAGE_CLASSES);
-  }
-
-}
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Application.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Application.java
index 00d02c4..c481094 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Application.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Application.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 import org.opends.admin.ads.ADSContext;
 import org.opends.admin.ads.ServerDescriptor;
@@ -248,8 +248,8 @@
    * @param newLogDetail the new log messages that we have for the
    * installation in formatted form.
    */
-  public void notifyListeners(Integer ratio, Message currentPhaseSummary,
-      Message newLogDetail)
+  public void notifyListeners(Integer ratio, LocalizableMessage currentPhaseSummary,
+      LocalizableMessage newLogDetail)
   {
     if (notifyListeners)
     {
@@ -266,7 +266,7 @@
    * @param newLogDetail the localized additional log message.
    */
   public void notifyListenersWithPoints(Integer ratio,
-      Message newLogDetail) {
+      LocalizableMessage newLogDetail) {
     notifyListeners(ratio, getSummary(getCurrentProgressStep()),
         formatter.getFormattedWithPoints(newLogDetail));
   }
@@ -299,7 +299,7 @@
    * representation
    * @return the formatted representation of an error for the given text.
    */
-  protected Message getFormattedSummary(Message text)
+  protected LocalizableMessage getFormattedSummary(LocalizableMessage text)
   {
     return formatter.getFormattedSummary(text);
   }
@@ -310,7 +310,7 @@
    * representation
    * @return the formatted representation of an error for the given text.
    */
-  protected Message getFormattedError(Message text)
+  protected LocalizableMessage getFormattedError(LocalizableMessage text)
   {
     return formatter.getFormattedError(text, false);
   }
@@ -321,7 +321,7 @@
    * representation
    * @return the formatted representation of an warning for the given text.
    */
-  public Message getFormattedWarning(Message text)
+  public LocalizableMessage getFormattedWarning(LocalizableMessage text)
   {
     return formatter.getFormattedWarning(text, false);
   }
@@ -333,7 +333,7 @@
    * @return the formatted representation of an success message for the given
    * text.
    */
-  protected Message getFormattedSuccess(Message text)
+  protected LocalizableMessage getFormattedSuccess(LocalizableMessage text)
   {
     return formatter.getFormattedSuccess(text);
   }
@@ -346,7 +346,7 @@
    * @return the formatted representation of a log error message for the given
    * text.
    */
-  public Message getFormattedLogError(Message text)
+  public LocalizableMessage getFormattedLogError(LocalizableMessage text)
   {
     return formatter.getFormattedLogError(text);
   }
@@ -357,7 +357,7 @@
    * representation
    * @return the formatted representation of a log message for the given text.
    */
-  public Message getFormattedLog(Message text)
+  public LocalizableMessage getFormattedLog(LocalizableMessage text)
   {
     return formatter.getFormattedLog(text);
   }
@@ -366,9 +366,9 @@
    * Returns the formatted representation of the 'Done' text string.
    * @return the formatted representation of the 'Done' text string.
    */
-  public Message getFormattedDone()
+  public LocalizableMessage getFormattedDone()
   {
-    return Message.raw(formatter.getFormattedDone());
+    return LocalizableMessage.raw(formatter.getFormattedDone());
   }
 
   /**
@@ -376,8 +376,8 @@
    * with a line break at the end.
    * @return the formatted representation of the 'Done' text string.
    */
-  public Message getFormattedDoneWithLineBreak() {
-    return new MessageBuilder(formatter.getFormattedDone())
+  public LocalizableMessage getFormattedDoneWithLineBreak() {
+    return new LocalizableMessageBuilder(formatter.getFormattedDone())
             .append(formatter.getLineBreak()).toMessage();
   }
 
@@ -388,7 +388,7 @@
    * @param text the String to which add points.
    * @return the formatted representation of the '.....' text string.
    */
-  public Message getFormattedWithPoints(Message text)
+  public LocalizableMessage getFormattedWithPoints(LocalizableMessage text)
   {
     return formatter.getFormattedWithPoints(text);
   }
@@ -401,7 +401,7 @@
    * @return the formatted representation of a progress message for the given
    * text.
    */
-  public Message getFormattedProgress(Message text)
+  public LocalizableMessage getFormattedProgress(LocalizableMessage text)
   {
     return formatter.getFormattedProgress(text);
   }
@@ -414,9 +414,9 @@
    * @return the formatted representation of a progress message for the given
    * text.
    */
-  public Message getFormattedProgressWithLineBreak(Message text)
+  public LocalizableMessage getFormattedProgressWithLineBreak(LocalizableMessage text)
   {
-    return new MessageBuilder(formatter.getFormattedProgress(text))
+    return new LocalizableMessageBuilder(formatter.getFormattedProgress(text))
             .append(getLineBreak()).toMessage();
   }
 
@@ -431,7 +431,7 @@
    * @return the formatted representation of an error message for the given
    * exception.
    */
-  protected Message getFormattedError(Throwable t, boolean applyMargin)
+  protected LocalizableMessage getFormattedError(Throwable t, boolean applyMargin)
   {
     return formatter.getFormattedError(t, applyMargin);
   }
@@ -440,7 +440,7 @@
    * Returns the line break formatted.
    * @return the line break formatted.
    */
-  public Message getLineBreak()
+  public LocalizableMessage getLineBreak()
   {
     return formatter.getLineBreak();
   }
@@ -449,7 +449,7 @@
    * Returns the task separator formatted.
    * @return the task separator formatted.
    */
-  protected Message getTaskSeparator()
+  protected LocalizableMessage getTaskSeparator()
   {
     return formatter.getTaskSeparator();
   }
@@ -459,10 +459,10 @@
    * notify the ProgressUpdateListeners of this fact.
    * @param newLogDetail the new log detail.
    */
-  public void notifyListeners(Message newLogDetail)
+  public void notifyListeners(LocalizableMessage newLogDetail)
   {
     Integer ratio = getRatio(getCurrentProgressStep());
-    Message currentPhaseSummary = getSummary(getCurrentProgressStep());
+    LocalizableMessage currentPhaseSummary = getSummary(getCurrentProgressStep());
     notifyListeners(ratio, currentPhaseSummary, newLogDetail);
   }
 
@@ -500,7 +500,7 @@
    * @param step ProgressStop for which a summary is needed
    * @return String representing the summary
    */
-  public abstract Message getSummary(ProgressStep step);
+  public abstract LocalizableMessage getSummary(ProgressStep step);
 
   /**
    * Sets the current install status for this application.
@@ -616,7 +616,7 @@
    * @param e the exception we want to obtain the representation from.
    * @return a localized representation of a TopologyCacheException object.
    */
-  protected Message getMessage(TopologyCacheException e)
+  protected LocalizableMessage getMessage(TopologyCacheException e)
   {
     return Utils.getMessage(e);
   }
@@ -658,7 +658,7 @@
     }
     catch (NamingException ne)
     {
-      Message msg;
+      LocalizableMessage msg;
       if (Utils.isCertificateException(ne))
       {
         msg = INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE_SERVER.get(
@@ -754,8 +754,8 @@
     /**
      * {@inheritDoc}
      */
-    protected Message formatString(String s) {
-      return getFormattedLogError(Message.raw(s));
+    protected LocalizableMessage formatString(String s) {
+      return getFormattedLogError(LocalizableMessage.raw(s));
     }
 
   }
@@ -785,8 +785,8 @@
     /**
      * {@inheritDoc}
      */
-    protected Message formatString(String s) {
-      return getFormattedLog(Message.raw(s));
+    protected LocalizableMessage formatString(String s) {
+      return getFormattedLog(LocalizableMessage.raw(s));
     }
 
   }
@@ -804,7 +804,7 @@
      * @param string to format
      * @return formatted message
      */
-    abstract protected Message formatString(String string);
+    abstract protected LocalizableMessage formatString(String string);
 
     /**
      * Default constructor.
@@ -822,7 +822,7 @@
     @Override
     public void println(String msg)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       if (isFirstLine)
       {
         mb.append(formatString(msg));
@@ -886,14 +886,14 @@
      */
     public void start()
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(formatter.getSpace());
       for (int i=0; i< 5; i++)
       {
         mb.append(formatter.getFormattedPoint());
       }
       Integer ratio = getRatio(getCurrentProgressStep());
-      Message currentPhaseSummary = getSummary(getCurrentProgressStep());
+      LocalizableMessage currentPhaseSummary = getSummary(getCurrentProgressStep());
       listenerDelegate.notifyListeners(getCurrentProgressStep(),
           ratio, currentPhaseSummary, mb.toMessage());
       t = new Thread(this);
@@ -933,7 +933,7 @@
         {
           Thread.sleep(3000);
           Integer ratio = getRatio(getCurrentProgressStep());
-          Message currentPhaseSummary = getSummary(getCurrentProgressStep());
+          LocalizableMessage currentPhaseSummary = getSummary(getCurrentProgressStep());
           listenerDelegate.notifyListeners(getCurrentProgressStep(),
               ratio, currentPhaseSummary, formatter.getFormattedPoint());
         }
@@ -945,7 +945,7 @@
       pointAdderStopped = true;
 
       Integer ratio = getRatio(getCurrentProgressStep());
-      Message currentPhaseSummary = getSummary(getCurrentProgressStep());
+      LocalizableMessage currentPhaseSummary = getSummary(getCurrentProgressStep());
       listenerDelegate.notifyListeners(getCurrentProgressStep(),
           ratio, currentPhaseSummary, formatter.getSpace());
     }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ApplicationException.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ApplicationException.java
index 4b13ddf..3c1dead 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ApplicationException.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ApplicationException.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.OpenDsException;
 
@@ -50,7 +51,7 @@
    * @param e Exception cause
    * @return ApplicationException with Type property being FILE_SYSTEM_ERROR
    */
-  public static ApplicationException createFileSystemException(Message msg,
+  public static ApplicationException createFileSystemException(LocalizableMessage msg,
       Exception e)
   {
     return new ApplicationException(ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
@@ -67,7 +68,7 @@
    * @param rootCause
    *          the root cause of this exception.
    */
-  public ApplicationException(ReturnCode type, Message localizedMsg,
+  public ApplicationException(ReturnCode type, LocalizableMessage localizedMsg,
                               Throwable rootCause)
   {
     super(localizedMsg, rootCause);
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java
index d09257b..6f3ca66 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CliUserInteraction.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 import static org.opends.messages.AdminToolMessages.*;
 
@@ -69,21 +69,21 @@
   /**
    * {@inheritDoc}
    */
-  public Object confirm(Message summary, Message details,
-                        Message title, MessageType type, Message[] options,
-                        Message def) {
+  public Object confirm(LocalizableMessage summary, LocalizableMessage details,
+                        LocalizableMessage title, MessageType type, LocalizableMessage[] options,
+                        LocalizableMessage def) {
     return confirm(summary, details, null, title, type, options, def, null);
   }
 
   /**
    * {@inheritDoc}
    */
-  public Object confirm(Message summary, Message details, Message fineDetails,
-                        Message title, MessageType type, Message[] options,
-                        Message def, Message viewDetailsOption) {
+  public Object confirm(LocalizableMessage summary, LocalizableMessage details, LocalizableMessage fineDetails,
+                        LocalizableMessage title, MessageType type, LocalizableMessage[] options,
+                        LocalizableMessage def, LocalizableMessage viewDetailsOption) {
     MenuBuilder<Integer> builder = new MenuBuilder<Integer>(this);
 
-    MessageBuilder b = new MessageBuilder();
+    LocalizableMessageBuilder b = new LocalizableMessageBuilder();
     b.append(summary);
     b.append(Constants.LINE_SEPARATOR);
     b.append(details);
@@ -100,7 +100,7 @@
     }
 
     if (fineDetails != null) {
-      Message detailsPrompt = viewDetailsOption;
+      LocalizableMessage detailsPrompt = viewDetailsOption;
       if (detailsPrompt == null)
       {
         detailsPrompt = INFO_CLI_VIEW_DETAILS.get();
@@ -109,7 +109,7 @@
           MenuResult.success(options.length + 1));
     }
 
-    builder.setDefault(Message.raw(String.valueOf(defInt)),
+    builder.setDefault(LocalizableMessage.raw(String.valueOf(defInt)),
         MenuResult.success(defInt));
 
     Menu<Integer> menu = builder.toMenu();
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java
index 5f904a3..e82e7fb 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/CurrentInstallStatus.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import java.io.File;
@@ -58,7 +58,7 @@
 
   private boolean canOverwriteCurrentInstall;
 
-  private Message installationMsg;
+  private LocalizableMessage installationMsg;
 
   /**
    * The constructor of a CurrentInstallStatus object.
@@ -72,7 +72,7 @@
     } else
     {
       Installation installation = Installation.getLocal();
-      ArrayList<Message> msgs = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> msgs = new ArrayList<LocalizableMessage>();
 
       if (installation.getStatus().isServerRunning())
       {
@@ -101,11 +101,11 @@
       }
       else if (isInstalled)
       {
-        MessageBuilder buf = new MessageBuilder();
+        LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
         if (Utils.isCli())
         {
-          buf = new MessageBuilder();
-          for (Message msg : msgs)
+          buf = new LocalizableMessageBuilder();
+          for (LocalizableMessage msg : msgs)
           {
             buf.append(Constants.LINE_SEPARATOR);
             buf.append("- ").append(msg);
@@ -119,7 +119,7 @@
         else
         {
           buf.append("<ul>");
-          for (Message msg : msgs)
+          for (LocalizableMessage msg : msgs)
           {
             buf.append("\n<li>");
             buf.append(msg);
@@ -165,7 +165,7 @@
    *
    * @return an String in HTML format describing the status of the installation.
    */
-  public Message getInstallationMsg()
+  public LocalizableMessage getInstallationMsg()
   {
     return installationMsg;
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Installation.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Installation.java
index ebd4ac6..9b854fc 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Installation.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Installation.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;
 
@@ -36,7 +36,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.util.SetupUtils;
 
@@ -315,7 +315,7 @@
   static public void validateRootDirectory(File rootDirectory)
       throws IllegalArgumentException
   {
-    Message failureReason = null;
+    LocalizableMessage failureReason = null;
     if (rootDirectory == null)
     {
       failureReason = INFO_ERROR_INSTALL_ROOT_DIR_NULL.get();
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/JavaArguments.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/JavaArguments.java
index e1fa4d7..0c6e932 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/JavaArguments.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/JavaArguments.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.quicksetup;
 
@@ -31,7 +31,7 @@
 import java.awt.Font;
 import java.util.ArrayList;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.util.Utils;
 
@@ -187,14 +187,14 @@
    * @param font the font to be used.
    * @return the message representing a java arguments object.
    */
-  public static Message getMessageForJLabel(JavaArguments javaArguments,
+  public static LocalizableMessage getMessageForJLabel(JavaArguments javaArguments,
       JavaArguments defaultJavaArguments, Font font)
   {
-    Message msg = getMessage(javaArguments, defaultJavaArguments);
+    LocalizableMessage msg = getMessage(javaArguments, defaultJavaArguments);
     String s = msg.toString();
     if (s.contains("<br>"))
     {
-      msg = Message.raw("<html>"+UIFactory.applyFontToHtml(s, font));
+      msg = LocalizableMessage.raw("<html>"+UIFactory.applyFontToHtml(s, font));
     }
     return msg;
   }
@@ -206,17 +206,17 @@
    * @param defaultJavaArguments the default values for the java arguments.
    * @return the message representing a java arguments object.
    */
-  public static Message getMessage(JavaArguments javaArguments,
+  public static LocalizableMessage getMessage(JavaArguments javaArguments,
       JavaArguments defaultJavaArguments)
   {
-    Message msg;
+    LocalizableMessage msg;
     if (javaArguments.equals(defaultJavaArguments))
     {
       msg = INFO_DEFAULT_JAVA_ARGUMENTS.get();
     }
     else
     {
-      ArrayList<Message> lines = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> lines = new ArrayList<LocalizableMessage>();
       if (javaArguments.getInitialMemory() != -1)
       {
         lines.add(INFO_INITIAL_MEMORY.get(javaArguments.getInitialMemory()));
@@ -249,7 +249,7 @@
       else
       {
         StringBuilder sb = new StringBuilder();
-        for (Message line : lines)
+        for (LocalizableMessage line : lines)
         {
           if (sb.length() > 0)
           {
@@ -257,7 +257,7 @@
           }
           sb.append(line);
         }
-        msg = Message.raw(sb.toString());
+        msg = LocalizableMessage.raw(sb.toString());
       }
     }
     return msg;
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Launcher.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Launcher.java
index 23a0b35..a6caa8b 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Launcher.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Launcher.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.util.args.ArgumentParser;
 
 import static org.opends.messages.QuickSetupMessages.*;
@@ -257,7 +257,7 @@
    * in some operating systems.
    * @return internationalized String representing the frame title
    */
-  abstract protected Message getFrameTitle();
+  abstract protected LocalizableMessage getFrameTitle();
 
   /**
    * Launches the command line based uninstall.
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ProgressDescriptor.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ProgressDescriptor.java
index cc4cf7a..174f022 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ProgressDescriptor.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ProgressDescriptor.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This class is used to describe the current state of the installation.
@@ -49,9 +50,9 @@
 
   private Integer progressBarRatio;
 
-  private Message progressBarMsg;
+  private LocalizableMessage progressBarMsg;
 
-  private Message detailsMsg;
+  private LocalizableMessage detailsMsg;
 
   /**
    * Constructor for the ProgressDescriptor.
@@ -61,7 +62,7 @@
    * @param detailsMsg the logs.
    */
   public ProgressDescriptor(ProgressStep step,
-      Integer progressBarRatio, Message progressBarMsg, Message detailsMsg)
+      Integer progressBarRatio, LocalizableMessage progressBarMsg, LocalizableMessage detailsMsg)
   {
     this.step = step;
     this.progressBarRatio = progressBarRatio;
@@ -73,7 +74,7 @@
    * Returns the details message (the log message) of the install.
    * @return the details message (the log message) of the install.
    */
-  public Message getDetailsMsg()
+  public LocalizableMessage getDetailsMsg()
   {
     return detailsMsg;
   }
@@ -82,7 +83,7 @@
    * Returns the progress bar message.
    * @return the progress bar message.
    */
-  public Message getProgressBarMsg()
+  public LocalizableMessage getProgressBarMsg()
   {
     return progressBarMsg;
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ProgressUpdateListenerDelegate.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ProgressUpdateListenerDelegate.java
index 4bee700..ceb1c53 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ProgressUpdateListenerDelegate.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ProgressUpdateListenerDelegate.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.quicksetup.event.ProgressUpdateListener;
 import org.opends.quicksetup.event.ProgressUpdateEvent;
@@ -76,8 +77,8 @@
    * @param newLogDetail        the new log messages that we have for the
    */
   public void notifyListeners(ProgressStep current, Integer ratio,
-                              Message currentPhaseSummary,
-                              Message newLogDetail) {
+                              LocalizableMessage currentPhaseSummary,
+                              LocalizableMessage newLogDetail) {
     ProgressUpdateEvent ev =
             new ProgressUpdateEvent(current, ratio,
                     currentPhaseSummary, newLogDetail);
@@ -90,7 +91,7 @@
    * Notify listeners about a change in log detail.
    * @param msg log detail
    */
-  protected void notifyListeners(Message msg) {
+  protected void notifyListeners(LocalizableMessage msg) {
     notifyListeners(null, null, null, msg);
   }
 
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java
index bdf99c9..c92d908 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/QuickSetupCli.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup;
@@ -36,7 +37,7 @@
 import org.opends.quicksetup.event.ProgressUpdateEvent;
 import org.opends.server.util.StaticUtils;
 import org.opends.server.util.cli.CLIException;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Class used by Launcher to start a CLI application.
@@ -96,7 +97,7 @@
           cliApp.addProgressUpdateListener(
                   new ProgressUpdateListener() {
                     public void progressUpdate(ProgressUpdateEvent ev) {
-                      Message newLogs = ev.getNewLogs();
+                      LocalizableMessage newLogs = ev.getNewLogs();
                       if (newLogs != null) {
                         System.out.print(
                                 StaticUtils.wrapText(
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Step.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Step.java
index 256ccd9..5d341d6 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Step.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/Step.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -99,14 +100,14 @@
    */
   FINISHED(INFO_FINISHED_STEP.get());
 
-  private Message msg;
+  private LocalizableMessage msg;
 
   /**
    * Creates a step.
    * @param msg the message key used to access a message catalog to
    * retreive this step's display name
    */
-  Step(Message msg) {
+  Step(LocalizableMessage msg) {
     this.msg = msg;
   }
 
@@ -115,7 +116,7 @@
    * @return String message key used to access a message catalog to
    * retreive this step's display name
    */
-  public Message getDisplayMessage() {
+  public LocalizableMessage getDisplayMessage() {
     return msg;
   }
 
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataCertificateException.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataCertificateException.java
index 07bf8e6..8d2621b 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataCertificateException.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataCertificateException.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.security.cert.X509Certificate;
 
@@ -72,7 +73,7 @@
    * @param authType the authentication type.
    * @param type the type of the exception.
    */
-  public UserDataCertificateException(WizardStep step, Message message,
+  public UserDataCertificateException(WizardStep step, LocalizableMessage message,
       Throwable t, String host, int port, X509Certificate[] chain,
       String authType, Type type)
   {
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataConfirmationException.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataConfirmationException.java
index 3baad31..3e1ffd0 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataConfirmationException.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataConfirmationException.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This exception is used when there is an confirmation to be asked
@@ -43,7 +44,7 @@
    * @param step the step in the wizard where the exception occurred.
    * @param message the localized message describing the error.
    */
-  public UserDataConfirmationException(WizardStep step, Message message)
+  public UserDataConfirmationException(WizardStep step, LocalizableMessage message)
   {
     super(step, message);
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataException.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataException.java
index 1fc54bc..923f3ba 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataException.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserDataException.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -46,7 +47,7 @@
    * @param step the step in the wizard where the exception occurred.
    * @param message the localized message describing the error.
    */
-  public UserDataException(WizardStep step, Message message)
+  public UserDataException(WizardStep step, LocalizableMessage message)
   {
     super(message);
     this.step = step;
@@ -58,7 +59,7 @@
    * @param message the localized message describing the error.
    * @param t the Exception that generated this exception.
    */
-  public UserDataException(WizardStep step, Message message, Throwable t)
+  public UserDataException(WizardStep step, LocalizableMessage message, Throwable t)
   {
     super(message, t);
     this.step = step;
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserInteraction.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserInteraction.java
index 5c71731..0dc8db4 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserInteraction.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/UserInteraction.java
@@ -22,11 +22,11 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions copyright 2012 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.List;
 
@@ -71,9 +71,9 @@
    * @return Object that is the same value as the user selection from the
    *         <code>options</code> parameter.
    */
-  Object confirm(Message summary, Message detail,
-                 Message title, MessageType type,
-                 Message[] options, Message def);
+  Object confirm(LocalizableMessage summary, LocalizableMessage detail,
+                 LocalizableMessage title, MessageType type,
+                 LocalizableMessage[] options, LocalizableMessage def);
 
   /**
    * Present a list of choices to the user and wait for them to select one
@@ -94,9 +94,9 @@
    * @return Object that is the same value as the user selection from the
    *         <code>options</code> parameter.
    */
-  Object confirm(Message summary, Message detail, Message fineDetails,
-                 Message title, MessageType type, Message[] options,
-                 Message def, Message viewDetailsOption);
+  Object confirm(LocalizableMessage summary, LocalizableMessage detail, LocalizableMessage fineDetails,
+                 LocalizableMessage title, MessageType type, LocalizableMessage[] options,
+                 LocalizableMessage def, LocalizableMessage viewDetailsOption);
 
   /**
    * Creates a list appropriate for the presentation implementation.
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/WizardStep.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/WizardStep.java
index 38eb9aa..0ebf8da 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/WizardStep.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/WizardStep.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Step in a QuickSetup wizard application.
@@ -38,7 +39,7 @@
    * @return String message key for accessing this step's display name
    * in a message bundle
    */
-  Message getDisplayMessage();
+  LocalizableMessage getDisplayMessage();
 
   /**
    * Indicates that when this step is displayed the application will
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/event/ProgressNotifier.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/event/ProgressNotifier.java
index 9909c7a..dd85bef 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/event/ProgressNotifier.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/event/ProgressNotifier.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.event;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Inteface for applications that advertise status to interested
@@ -59,7 +60,7 @@
  *        form
    * @param newLogDetail new log messages in formatted form
    */
-  void notifyListeners(Integer ratio, Message currentPhaseSummary,
-      Message newLogDetail);
+  void notifyListeners(Integer ratio, LocalizableMessage currentPhaseSummary,
+      LocalizableMessage newLogDetail);
 
 }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/event/ProgressUpdateEvent.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/event/ProgressUpdateEvent.java
index 4fe0df8..e6e544f 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/event/ProgressUpdateEvent.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/event/ProgressUpdateEvent.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.event;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.ProgressStep;
 
 /**
@@ -44,9 +45,9 @@
 
   private Integer progressRatio;
 
-  private Message currentPhaseSummary;
+  private LocalizableMessage currentPhaseSummary;
 
-  private Message newLogs;
+  private LocalizableMessage newLogs;
 
   /**
    * Constructor of the ProgressUpdateEvent.
@@ -59,7 +60,7 @@
    * @param newLogs the new log messages that we have for the installation.
    */
   public ProgressUpdateEvent(ProgressStep step,
-      Integer progressRatio, Message currentPhaseSummary, Message newLogs)
+      Integer progressRatio, LocalizableMessage currentPhaseSummary, LocalizableMessage newLogs)
   {
     this.step = step;
     this.progressRatio = progressRatio;
@@ -72,7 +73,7 @@
    * status.
    * @return the localized message summary describing the progress status.
    */
-  public Message getCurrentPhaseSummary()
+  public LocalizableMessage getCurrentPhaseSummary()
   {
     return currentPhaseSummary;
   }
@@ -81,7 +82,7 @@
    * Gets the new logs for the install progress.
    * @return the new logs for the current install progress.
    */
-  public Message getNewLogs()
+  public LocalizableMessage getNewLogs()
   {
     return newLogs;
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/Installer.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/Installer.java
index 35c6b21..f6b0540 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/Installer.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/Installer.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;
 
@@ -46,8 +46,8 @@
 import org.opends.admin.ads.util.ApplicationTrustManager;
 import org.opends.admin.ads.util.ConnectionUtils;
 import org.opends.admin.ads.util.PreferredConnection;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.quicksetup.*;
 import org.opends.quicksetup.event.ButtonActionListener;
 import org.opends.quicksetup.event.ButtonEvent;
@@ -470,7 +470,7 @@
     }
     catch (IncompatibleVersionException ijv)
     {
-      MessageBuilder sb = new MessageBuilder();
+      LocalizableMessageBuilder sb = new LocalizableMessageBuilder();
       sb.append(Utils.breakHtmlString(
           Utils.getHtml(ijv.getMessageObject().toString()),
           Constants.MAX_CHARS_PER_LINE_IN_DIALOG));
@@ -564,7 +564,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getCloseButtonToolTip() {
+  public LocalizableMessage getCloseButtonToolTip() {
     return INFO_CLOSE_BUTTON_INSTALL_TOOLTIP.get();
   }
 
@@ -572,7 +572,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getQuitButtonToolTip() {
+  public LocalizableMessage getQuitButtonToolTip() {
     return INFO_QUIT_BUTTON_INSTALL_TOOLTIP.get();
   }
 
@@ -580,7 +580,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getFinishButtonToolTip() {
+  public LocalizableMessage getFinishButtonToolTip() {
     return INFO_FINISH_BUTTON_INSTALL_TOOLTIP.get();
   }
 
@@ -613,10 +613,10 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getFrameTitle() {
+  public LocalizableMessage getFrameTitle() {
     return Utils.getCustomizedObject("INFO_FRAME_INSTALL_TITLE",
         INFO_FRAME_INSTALL_TITLE.get(DynamicConstants.PRODUCT_NAME),
-        Message.class);
+        LocalizableMessage.class);
   }
 
   /** Indicates the current progress step. */
@@ -816,7 +816,7 @@
     }
     catch (IOException ioe)
     {
-      Message failedMsg = getThrowableMsg(
+      LocalizableMessage failedMsg = getThrowableMsg(
           INFO_ERROR_CREATING_TEMP_FILE.get(), ioe);
       throw new ApplicationException(
           ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
@@ -1298,7 +1298,7 @@
   private void importLDIF() throws ApplicationException {
     LinkedList<String> ldifPaths =
       getUserData().getNewSuffixOptions().getLDIFPaths();
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     if (ldifPaths.size() > 1)
     {
       if (isVerbose())
@@ -1414,7 +1414,7 @@
         if (lastImportProgress != null)
         {
           notifyListeners(
-              getFormattedProgress(Message.raw(lastImportProgress)));
+              getFormattedProgress(LocalizableMessage.raw(lastImportProgress)));
           notifyListeners(getLineBreak());
         }
       }
@@ -1429,7 +1429,7 @@
       else
       {
         notifyListeners(
-            getFormattedProgress(Message.raw(lastImportProgress)));
+            getFormattedProgress(LocalizableMessage.raw(lastImportProgress)));
         notifyListeners(getLineBreak());
       }
     }
@@ -1443,7 +1443,7 @@
   private void importAutomaticallyGenerated() throws ApplicationException {
     File templatePath = createTemplateFile();
     int nEntries = getUserData().getNewSuffixOptions().getNumberEntries();
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     if (isVerbose() || (nEntries > THRESHOLD_AUTOMATIC_DATA_VERBOSE))
     {
       mb.append(getFormattedProgress(
@@ -1765,7 +1765,7 @@
     }
     catch (NamingException ne)
     {
-      Message failedMsg = getThrowableMsg(
+      LocalizableMessage failedMsg = getThrowableMsg(
               INFO_ERROR_CONNECTING_TO_LOCAL.get(), ne);
       throw new ApplicationException(
           ReturnCode.CONFIGURATION_ERROR, failedMsg, ne);
@@ -1901,7 +1901,7 @@
     }
     catch (NamingException ne)
     {
-      Message failedMsg = getThrowableMsg(
+      LocalizableMessage failedMsg = getThrowableMsg(
               INFO_ERROR_CONNECTING_TO_LOCAL.get(), ne);
       throw new ApplicationException(
           ReturnCode.CONFIGURATION_ERROR, failedMsg, ne);
@@ -2051,7 +2051,7 @@
    * @param isCli a boolean to indicate if the install is using CLI or GUI
    */
   protected void initSummaryMap(
-      Map<ProgressStep, Message> hmSummary,
+      Map<ProgressStep, LocalizableMessage> hmSummary,
       boolean isCli)
   {
     hmSummary.put(InstallProgressStep.NOT_STARTED,
@@ -2097,9 +2097,9 @@
     }
     String formattedPath = Utils.addWordBreaks(
         formatter.getFormattedText(
-            Message.raw(getPath(new File(getInstancePath())))).toString(),
+            LocalizableMessage.raw(getPath(new File(getInstancePath())))).toString(),
             60, 5);
-    Message successMessage = Utils.getCustomizedObject(
+    LocalizableMessage successMessage = Utils.getCustomizedObject(
         "INFO_SUMMARY_INSTALL_FINISHED_SUCCESSFULLY",
         INFO_SUMMARY_INSTALL_FINISHED_SUCCESSFULLY.get(
             DynamicConstants.PRODUCT_NAME,
@@ -2108,7 +2108,7 @@
             INFO_GENERAL_SERVER_STOPPED.get(),
             DynamicConstants.DOC_QUICK_REFERENCE_GUIDE,
             DynamicConstants.PRODUCT_NAME,
-            cmd), Message.class);
+            cmd), LocalizableMessage.class);
     hmSummary.put(InstallProgressStep.FINISHED_SUCCESSFULLY,
             getFormattedSuccess(successMessage));
     hmSummary.put(InstallProgressStep.FINISHED_CANCELED,
@@ -2125,7 +2125,7 @@
    * @param isCli a boolean to indicate if the install is using CLI or GUI
    */
   protected void updateSummaryWithServerState(
-      Map<ProgressStep, Message> hmSummary, Boolean isCli)
+      Map<ProgressStep, LocalizableMessage> hmSummary, Boolean isCli)
   {
    Installation installation = getInstallation();
    String cmd = getPath(installation.getControlPanelCommandFile());
@@ -2135,7 +2135,7 @@
        UIFactory.applyFontToHtml(cmd, UIFactory.INSTRUCTIONS_MONOSPACE_FONT),
        60, 5);
    }
-   Message status;
+   LocalizableMessage status;
    if (installation.getStatus().isServerRunning())
    {
      status = INFO_GENERAL_SERVER_STARTED.get();
@@ -2146,9 +2146,9 @@
    }
    String formattedPath = Utils.addWordBreaks(
    formatter.getFormattedText(
-       Message.raw(getPath(new File(getInstancePath())))).toString(),
+       LocalizableMessage.raw(getPath(new File(getInstancePath())))).toString(),
        60, 5);
-   Message successMessage = Utils.getCustomizedObject(
+   LocalizableMessage successMessage = Utils.getCustomizedObject(
        "INFO_SUMMARY_INSTALL_FINISHED_SUCCESSFULLY",
       INFO_SUMMARY_INSTALL_FINISHED_SUCCESSFULLY.get(
             DynamicConstants.PRODUCT_NAME,
@@ -2157,7 +2157,7 @@
             status,
             DynamicConstants.DOC_QUICK_REFERENCE_GUIDE,
             DynamicConstants.PRODUCT_NAME,
-            cmd), Message.class);
+            cmd), LocalizableMessage.class);
     hmSummary.put(InstallProgressStep.FINISHED_SUCCESSFULLY,
             getFormattedSuccess(successMessage));
     hmSummary.put(InstallProgressStep.FINISHED_WITH_ERROR,
@@ -2361,7 +2361,7 @@
     }
     catch (Throwable t)
     {
-      Message failedMsg =
+      LocalizableMessage failedMsg =
               getThrowableMsg(INFO_ERROR_CONNECTING_TO_LOCAL.get(), t);
       StaticUtils.close(ctx);
       throw new ApplicationException(
@@ -2400,7 +2400,7 @@
       }
       catch (NamingException ne)
       {
-        Message msg;
+        LocalizableMessage msg;
         if (Utils.isCertificateException(ne))
         {
           msg = INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE_SERVER.get(
@@ -2480,7 +2480,7 @@
           }
           catch (NamingException ne)
           {
-            Message msg;
+            LocalizableMessage msg;
             if (Utils.isCertificateException(ne))
             {
               msg = INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE_SERVER.get(
@@ -2702,7 +2702,7 @@
     }
     catch (NamingException ne)
     {
-      Message msg;
+      LocalizableMessage msg;
       if (isRemoteServer)
       {
         msg = Utils.getMessageForException(ne, getHostDisplay(auth));
@@ -2992,8 +2992,8 @@
   private void updateUserDataForServerSettingsPanel(QuickSetup qs)
       throws UserDataException
   {
-    List<Message> errorMsgs = new ArrayList<Message>();
-    Message confirmationMsg = null;
+    List<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
+    LocalizableMessage confirmationMsg = null;
 
     if (isWebStart())
     {
@@ -3283,7 +3283,7 @@
     }
   }
 
-  private Message getCannotBindErrorMessage(int port)
+  private LocalizableMessage getCannotBindErrorMessage(int port)
   {
     if (isPriviledgedPort(port))
     {
@@ -3306,7 +3306,7 @@
     Integer replicationPort = -1;
     boolean secureReplication = false;
     Integer port = null;
-    List<Message> errorMsgs = new ArrayList<Message>();
+    List<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
 
     DataReplicationOptions.Type type = (DataReplicationOptions.Type)
       qs.getFieldValue(FieldName.REPLICATION_OPTIONS);
@@ -3425,7 +3425,7 @@
     }
   }
 
-  private int checkReplicationPort(QuickSetup qs, List<Message> errorMsgs)
+  private int checkReplicationPort(QuickSetup qs, List<LocalizableMessage> errorMsgs)
   {
     int replicationPort = -1;
     String sPort = qs.getFieldStringValue(FieldName.REPLICATION_PORT);
@@ -3471,7 +3471,7 @@
   }
 
   private void checkRemoteHostPortDnAndPwd(String host, String sPort, String dn,
-      String pwd, QuickSetup qs, List<Message> errorMsgs)
+      String pwd, QuickSetup qs, List<LocalizableMessage> errorMsgs)
   {
     // Check host
     if ((host == null) || (host.length() == 0))
@@ -3520,7 +3520,7 @@
   }
 
   private void updateUserDataWithADS(String host, int port, String dn,
-      String pwd, QuickSetup qs, List<Message> errorMsgs,
+      String pwd, QuickSetup qs, List<LocalizableMessage> errorMsgs,
       boolean[] hasGlobalAdministrators,
       String[] effectiveDn) throws UserDataException
   {
@@ -3563,14 +3563,14 @@
         hasGlobalAdministrators[0] = administrators.size() > 0;
         Set<TopologyCacheException> exceptions =
         updateUserDataWithSuffixesInADS(adsContext, trustManager);
-        Set<Message> exceptionMsgs = new LinkedHashSet<Message>();
+        Set<LocalizableMessage> exceptionMsgs = new LinkedHashSet<LocalizableMessage>();
         /* Check the exceptions and see if we throw them or not. */
         for (TopologyCacheException e : exceptions)
         {
           switch (e.getType())
           {
           case NOT_GLOBAL_ADMINISTRATOR:
-            Message errorMsg = INFO_NOT_GLOBAL_ADMINISTRATOR_PROVIDED.get();
+            LocalizableMessage errorMsg = INFO_NOT_GLOBAL_ADMINISTRATOR_PROVIDED.get();
             throw new UserDataException(Step.REPLICATION_OPTIONS, errorMsg);
           case GENERIC_CREATING_CONNECTION:
             if ((e.getCause() != null) &&
@@ -3627,7 +3627,7 @@
         }
         if (exceptionMsgs.size() > 0)
         {
-          Message confirmationMsg =
+          LocalizableMessage confirmationMsg =
             INFO_ERROR_READING_REGISTERED_SERVERS_CONFIRM.get(
                     getMessageFromCollection(exceptionMsgs, "\n"));
           throw new UserDataConfirmationException(Step.REPLICATION_OPTIONS,
@@ -3723,7 +3723,7 @@
   private void updateUserDataForCreateAdministratorPanel(QuickSetup qs)
   throws UserDataException
   {
-    List<Message> errorMsgs = new ArrayList<Message>();
+    List<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
 
     // Check the Global Administrator UID
     String uid = qs.getFieldStringValue(FieldName.GLOBAL_ADMINISTRATOR_UID);
@@ -3794,7 +3794,7 @@
   private void updateUserDataForSuffixesOptionsPanel(QuickSetup qs)
   throws UserDataException
   {
-    List<Message> errorMsgs = new ArrayList<Message>();
+    List<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
     if (qs.getFieldValue(FieldName.SUFFIXES_TO_REPLICATE_OPTIONS) ==
       SuffixesToReplicateOptions.Type.REPLICATE_WITH_EXISTING_SUFFIXES)
     {
@@ -3856,7 +3856,7 @@
   private void updateUserDataForRemoteReplicationPorts(QuickSetup qs)
       throws UserDataException
   {
-    List<Message> errorMsgs = new ArrayList<Message>();
+    List<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
     Map<ServerDescriptor, AuthenticationData> servers =
       getUserData().getRemoteWithNoReplicationPort();
     Map<?, ?> hm =
@@ -3932,7 +3932,7 @@
   private void updateUserDataForNewSuffixOptionsPanel(QuickSetup qs)
       throws UserDataException
   {
-    List<Message> errorMsgs = new ArrayList<Message>();
+    List<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
 
     NewSuffixOptions dataOptions = null;
 
@@ -4448,7 +4448,7 @@
             "ds-task-log-message",
             "ds-task-state"
         });
-    Message lastDisplayedMsg = null;
+    LocalizableMessage lastDisplayedMsg = null;
     String lastLogMsg = null;
     long lastTimeMsgDisplayed = -1;
     long lastTimeMsgLogged = -1;
@@ -4488,7 +4488,7 @@
         }
         // Get the number of entries that have been handled and
         // a percentage...
-        Message msg;
+        LocalizableMessage msg;
         String sProcessed = getFirstValue(sr,
         "ds-task-processed-entry-count");
         String sUnprocessed = getFirstValue(sr,
@@ -4586,7 +4586,7 @@
         if (helper.isDone(state) || helper.isStoppedByError(state))
         {
           isOver = true;
-          Message errorMsg;
+          LocalizableMessage errorMsg;
           LOG.log(Level.INFO, "Last task entry: "+sr);
           if (displayProgress && (msg != null) && !msg.equals(lastDisplayedMsg))
           {
@@ -4789,7 +4789,7 @@
         if (helper.isDone(state) || helper.isStoppedByError(state))
         {
           isOver = true;
-          Message errorMsg;
+          LocalizableMessage errorMsg;
           if (lastLogMsg == null)
           {
             errorMsg = INFO_ERROR_DURING_INITIALIZATION_NO_LOG.get(
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 2b0da9f..9f1ecb1 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
@@ -65,7 +65,7 @@
 import org.opends.messages.CoreMessages;
 import org.opends.messages.JebMessages;
 import org.opends.messages.ReplicationMessages;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import org.opends.server.tools.ConfigureDS;
@@ -166,7 +166,7 @@
         public void processLine(String line)
         {
           LOG.log(Level.WARNING, "import-ldif error log: "+line);
-          application.notifyListeners(Message.raw(line));
+          application.notifyListeners(LocalizableMessage.raw(line));
           application.notifyListeners(application.getLineBreak());
         }
       };
@@ -178,7 +178,7 @@
         public void processLine(String line)
         {
           LOG.log(Level.INFO, "import-ldif out log: "+line);
-          application.notifyListeners(Message.raw(line));
+          application.notifyListeners(LocalizableMessage.raw(line));
           application.notifyListeners(application.getLineBreak());
         }
       };
@@ -209,12 +209,12 @@
   }
 
   /**
-   * Returns the Message ID that corresponds to a successfully started server.
-   * @return the Message ID that corresponds to a successfully started server.
+   * Returns the LocalizableMessage ID that corresponds to a successfully started server.
+   * @return the LocalizableMessage ID that corresponds to a successfully started server.
    */
   public String getStartedId()
   {
-    return String.valueOf(CoreMessages.NOTE_DIRECTORY_SERVER_STARTED.getId());
+    return String.valueOf(CoreMessages.NOTE_DIRECTORY_SERVER_STARTED.ordinal());
   }
 
   /**
@@ -224,7 +224,7 @@
   public void enableWindowsService() throws ApplicationException {
     int code = ConfigureWindowsService.enableService(System.out, System.err);
 
-    Message errorMessage = INFO_ERROR_ENABLING_WINDOWS_SERVICE.get();
+    LocalizableMessage errorMessage = INFO_ERROR_ENABLING_WINDOWS_SERVICE.get();
 
     switch (code) {
       case
@@ -271,7 +271,7 @@
       ldifFile.deleteOnExit();
     } catch (IOException ioe)
     {
-      Message failedMsg =
+      LocalizableMessage failedMsg =
               getThrowableMsg(INFO_ERROR_CREATING_TEMP_FILE.get(), ioe);
       throw new ApplicationException(
           ReturnCode.FILE_SYSTEM_ACCESS_ERROR,
@@ -330,7 +330,7 @@
     }
     catch (Throwable t)
     {
-      Message errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
+      LocalizableMessage errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
               serverDisplay, t.toString());
       throw new ApplicationException(
           ReturnCode.CONFIGURATION_ERROR, errorMessage,
@@ -397,7 +397,7 @@
     }
     catch (Throwable t)
     {
-      Message errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
+      LocalizableMessage errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
               serverDisplay, t.toString());
       throw new ApplicationException(
           ReturnCode.CONFIGURATION_ERROR, errorMessage,
@@ -436,7 +436,7 @@
     }
     catch (Throwable t)
     {
-      Message errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
+      LocalizableMessage errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
               serverDisplay, t.toString());
       throw new ApplicationException(
           ReturnCode.CONFIGURATION_ERROR, errorMessage,
@@ -652,7 +652,7 @@
     }
     catch (Throwable t)
     {
-      Message errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
+      LocalizableMessage errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
               serverDisplay, t.toString());
       throw new ApplicationException(
           ReturnCode.CONFIGURATION_ERROR, errorMessage,
@@ -765,7 +765,7 @@
     }
     catch (Throwable t)
     {
-      Message errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
+      LocalizableMessage errorMessage = INFO_ERROR_CONFIGURING_REMOTE_GENERIC.get(
               serverDisplay, t.toString());
       throw new ApplicationException(
           ReturnCode.CONFIGURATION_ERROR, errorMessage,
@@ -834,7 +834,7 @@
   public boolean isPeersNotFoundError(String logMsg)
   {
     return logMsg.contains("=" + ReplicationMessages.
-        ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.getId());
+        ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.ordinal());
   }
 
   /**
@@ -1216,9 +1216,9 @@
     if (msg != null)
     {
       if ((msg.contains("msgID=" + JebMessages
-              .NOTE_JEB_IMPORT_FINAL_STATUS.getId())) ||
+              .NOTE_JEB_IMPORT_FINAL_STATUS.ordinal())) ||
           (msg.contains("msgID=" + JebMessages
-              .NOTE_JEB_IMPORT_PROGRESS_REPORT.getId())))
+              .NOTE_JEB_IMPORT_PROGRESS_REPORT.ordinal())))
       {
         int index = msg.indexOf("msg=");
         if (index != -1)
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/PeerNotFoundException.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/PeerNotFoundException.java
index 7c42b8e..f010a53 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/PeerNotFoundException.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/PeerNotFoundException.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.installer;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -42,7 +43,7 @@
    * The constructor for the exception.
    * @param message the localized message.
    */
-  public PeerNotFoundException(Message message)
+  public PeerNotFoundException(LocalizableMessage message)
   {
     super(message);
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/SetupLauncher.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/SetupLauncher.java
index 9198ae2..2d56f89 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/SetupLauncher.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/SetupLauncher.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.installer;
@@ -40,7 +41,7 @@
 import org.opends.quicksetup.installer.offline.OfflineInstaller;
 import org.opends.quicksetup.util.IncompatibleVersionException;
 import org.opends.quicksetup.util.Utils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.InstallDS;
 import org.opends.server.tools.InstallDSArgumentParser;
 import org.opends.server.util.DynamicConstants;
@@ -108,7 +109,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       System.out.println(message);
     }
   }
@@ -160,7 +161,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       System.err.println(message);
       System.err.println();
       System.err.println(argParser.getUsage());
@@ -208,10 +209,10 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getFrameTitle() {
+  protected LocalizableMessage getFrameTitle() {
     return Utils.getCustomizedObject("INFO_FRAME_INSTALL_TITLE",
         INFO_FRAME_INSTALL_TITLE.get(DynamicConstants.PRODUCT_NAME),
-        Message.class);
+        LocalizableMessage.class);
   }
 
   /**
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java
index 95d49ec..97a5928 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/offline/OfflineInstaller.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.installer.offline;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 
@@ -75,8 +75,8 @@
       new HashMap<ProgressStep, Integer>();
 
   /* This map contains the summary associated with each step */
-  private final Map<ProgressStep, Message> hmSummary =
-      new HashMap<ProgressStep, Message>();
+  private final Map<ProgressStep, LocalizableMessage> hmSummary =
+      new HashMap<ProgressStep, LocalizableMessage>();
 
   private ApplicationException runError;
 
@@ -255,7 +255,7 @@
         notifyListeners(getLineBreak());
         updateSummaryWithServerState(hmSummary, true);
         setCurrentProgressStep(InstallProgressStep.FINISHED_WITH_ERROR);
-        Message html = getFormattedError(ex, true);
+        LocalizableMessage html = getFormattedError(ex, true);
         notifyListeners(html);
         LOG.log(Level.SEVERE, "Error installing.", ex);
         notifyListeners(getLineBreak());
@@ -289,7 +289,7 @@
       ApplicationException ex = new ApplicationException(
           ReturnCode.BUG,
           Utils.getThrowableMsg(INFO_BUG_MSG.get(), t), t);
-      Message msg = getFormattedError(ex, true);
+      LocalizableMessage msg = getFormattedError(ex, true);
       notifyListeners(msg);
       LOG.log(Level.SEVERE, "Error installing.", t);
       notifyListeners(getLineBreak());
@@ -316,7 +316,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getSummary(ProgressStep status)
+  public LocalizableMessage getSummary(ProgressStep status)
   {
     return hmSummary.get(status);
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/DataOptionsPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/DataOptionsPanel.java
index 3128650..b23f59e 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/DataOptionsPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/DataOptionsPanel.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.installer.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import java.awt.Component;
@@ -326,7 +327,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     return INFO_DATA_OPTIONS_PANEL_INSTRUCTIONS.get();
   }
@@ -334,7 +335,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_DATA_OPTIONS_PANEL_TITLE.get();
   }
@@ -549,7 +550,7 @@
     {
       public void changedUpdate(DocumentEvent ev)
       {
-        Message newLabel = INFO_CREATE_BASE_ENTRY_LABEL.get(
+        LocalizableMessage newLabel = INFO_CREATE_BASE_ENTRY_LABEL.get(
                 (String) getFieldValue(FieldName.DIRECTORY_BASE_DN));
         JRadioButton rb =
           getRadioButton(NewSuffixOptions.Type.CREATE_BASE_ENTRY);
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/DataReplicationPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/DataReplicationPanel.java
index 704be2a..7c60499 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/DataReplicationPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/DataReplicationPanel.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup.installer.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import java.awt.Component;
@@ -278,7 +278,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     return INFO_DATA_REPLICATION_OPTIONS_PANEL_INSTRUCTIONS.get();
   }
@@ -286,7 +286,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_DATA_REPLICATION_OPTIONS_PANEL_TITLE.get();
   }
@@ -305,9 +305,9 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTextForIcon(UIFactory.IconType iconType)
+  protected LocalizableMessage getTextForIcon(UIFactory.IconType iconType)
   {
-    Message text;
+    LocalizableMessage text;
     if ((iconType == UIFactory.IconType.WAIT) &&
         rbReplicated.isSelected() && cbTopologyExists.isSelected())
     {
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/GlobalAdministratorPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/GlobalAdministratorPanel.java
index 1ba51bc..a042875 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/GlobalAdministratorPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/GlobalAdministratorPanel.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup.installer.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import java.awt.Component;
@@ -183,7 +183,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     return INFO_GLOBAL_ADMINISTRATOR_PANEL_INSTRUCTIONS.get();
   }
@@ -191,7 +191,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_GLOBAL_ADMINISTRATOR_PANEL_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallLicensePanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallLicensePanel.java
index 34d92e5..a9c03f2 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallLicensePanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallLicensePanel.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup.installer.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import java.awt.Component;
@@ -63,7 +63,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_LICENSE_PANEL_TITLE.get();
   }
@@ -71,7 +71,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     return null;
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallReviewPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallReviewPanel.java
index 76388ba..a56e0fc 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallReviewPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallReviewPanel.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup.installer.ui;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import org.opends.admin.ads.ServerDescriptor;
@@ -76,8 +76,8 @@
   private JLabel warningLabel;
 
   private JComboBox viewCombo;
-  private final Message DISPLAY_TEXT = INFO_REVIEW_DISPLAY_TEXT.get();
-  private final Message DISPLAY_EQUIVALENT_COMMAND =
+  private final LocalizableMessage DISPLAY_TEXT = INFO_REVIEW_DISPLAY_TEXT.get();
+  private final LocalizableMessage DISPLAY_EQUIVALENT_COMMAND =
     INFO_REVIEW_DISPLAY_EQUIVALENT_COMMAND.get();
 
   private JComponent cardLayoutPanel;
@@ -161,11 +161,11 @@
   {
     JPanel instructionsPanel = new JPanel(new GridBagLayout());
     instructionsPanel.setOpaque(false);
-    Message instructions = getInstructions();
+    LocalizableMessage instructions = getInstructions();
     JLabel l = new JLabel(instructions.toString());
     l.setFont(UIFactory.INSTRUCTIONS_FONT);
 
-    Message[] values = {
+    LocalizableMessage[] values = {
       DISPLAY_TEXT,
       DISPLAY_EQUIVALENT_COMMAND
     };
@@ -254,7 +254,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     return INFO_REVIEW_PANEL_INSTRUCTIONS.get();
   }
@@ -262,7 +262,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_REVIEW_PANEL_TITLE.get();
   }
@@ -395,7 +395,7 @@
     */
   private String getReplicationPortString(UserData userInstallData)
   {
-    MessageBuilder buf = new MessageBuilder();
+    LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
 
     DataReplicationOptions repl =
       userInstallData.getReplicationOptions();
@@ -435,7 +435,7 @@
             .getReplicationPort());
       }
       buf.append(s);
-      TreeSet<Message> remoteServerLines = new TreeSet<Message>();
+      TreeSet<LocalizableMessage> remoteServerLines = new TreeSet<LocalizableMessage>();
       for (ServerDescriptor server : remotePorts.keySet())
       {
         String serverDisplay;
@@ -460,7 +460,7 @@
         remoteServerLines.add(INFO_REMOTE_SERVER_REPLICATION_PORT.get(s,
                 serverDisplay));
       }
-      for (Message line : remoteServerLines)
+      for (LocalizableMessage line : remoteServerLines)
       {
         buf.append("\n").append(line);
       }
@@ -848,7 +848,7 @@
           INFO_INSTALL_STOP_SERVER_EQUIVALENT_COMMAND_LINE.get()));
       sb.append(formatter.getLineBreak());
       sb.append(Constants.HTML_BOLD_OPEN)
-          .append(formatter.getFormattedProgress(Message.raw(cmd)))
+          .append(formatter.getFormattedProgress(LocalizableMessage.raw(cmd)))
           .append(Constants.HTML_BOLD_CLOSE);
     }
     equivalentCommandPane.setText(sb.toString());
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallWelcomePanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallWelcomePanel.java
index de28edb..5a6cf9c 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallWelcomePanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/InstallWelcomePanel.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.installer.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import org.opends.server.util.DynamicConstants;
@@ -58,7 +58,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_WELCOME_PANEL_TITLE.get();
   }
@@ -66,7 +66,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     /*
      * We can use org.opends.server.util.DynamicConstants without problems as it
@@ -79,7 +79,7 @@
               DynamicConstants.SHORT_NAME,
               DynamicConstants.DOC_REFERENCE_WIKI,
               DynamicConstants.SHORT_NAME),
-          Message.class);
+          LocalizableMessage.class);
   }
 
   /**
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/JavaArgumentsDialog.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/JavaArgumentsDialog.java
index 9eacef2..865b92f 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/JavaArgumentsDialog.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/JavaArgumentsDialog.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.installer.ui;
@@ -57,8 +57,8 @@
 import org.opends.quicksetup.util.BackgroundTask;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.util.SetupUtils;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 import static org.opends.messages.QuickSetupMessages.*;
 
@@ -82,7 +82,7 @@
 
   private boolean isCanceled = true;
 
-  private Message message;
+  private LocalizableMessage message;
 
   private JavaArguments javaArguments;
 
@@ -104,7 +104,7 @@
    * @throws IllegalArgumentException if options is null.
    */
   public JavaArgumentsDialog(JFrame parent, JavaArguments javaArguments,
-      Message title, Message message)
+      LocalizableMessage title, LocalizableMessage message)
   throws IllegalArgumentException
   {
     super(parent);
@@ -234,7 +234,7 @@
     gbc.gridwidth = 3;
     gbc.gridx = 0;
     gbc.gridy = 0;
-    Message title = INFO_JAVA_RUNTIME_SETTINGS_TITLE.get();
+    LocalizableMessage title = INFO_JAVA_RUNTIME_SETTINGS_TITLE.get();
     JLabel l =
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, title,
             UIFactory.TextStyle.TITLE);
@@ -296,7 +296,7 @@
         INFO_INITIAL_MEMORY_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     lInitialMemory.setOpaque(false);
-    tfInitialMemory = UIFactory.makeJTextField(Message.EMPTY,
+    tfInitialMemory = UIFactory.makeJTextField(LocalizableMessage.EMPTY,
         INFO_INITIAL_MEMORY_TOOLTIP.get(), 10, UIFactory.TextStyle.TEXTFIELD);
     lInitialMemory.setLabelFor(tfInitialMemory);
 
@@ -304,7 +304,7 @@
         INFO_MAX_MEMORY_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     lMaxMemory.setOpaque(false);
-    tfMaxMemory = UIFactory.makeJTextField(Message.EMPTY,
+    tfMaxMemory = UIFactory.makeJTextField(LocalizableMessage.EMPTY,
         INFO_MAX_MEMORY_TOOLTIP.get(), 10, UIFactory.TextStyle.TEXTFIELD);
     lMaxMemory.setLabelFor(tfMaxMemory);
 
@@ -312,7 +312,7 @@
         INFO_OTHER_JAVA_ARGUMENTS_LABEL.get(),
         UIFactory.TextStyle.PRIMARY_FIELD_VALID);
     lOtherArguments.setOpaque(false);
-    tfOtherArguments = UIFactory.makeJTextField(Message.EMPTY,
+    tfOtherArguments = UIFactory.makeJTextField(LocalizableMessage.EMPTY,
         INFO_OTHER_JAVA_ARGUMENTS_TOOLTIP.get(), 30,
         UIFactory.TextStyle.TEXTFIELD);
     lOtherArguments.setLabelFor(tfOtherArguments);
@@ -461,18 +461,18 @@
    */
   private void okClicked()
   {
-    BackgroundTask<ArrayList<Message>> worker =
-      new BackgroundTask<ArrayList<Message>>()
+    BackgroundTask<ArrayList<LocalizableMessage>> worker =
+      new BackgroundTask<ArrayList<LocalizableMessage>>()
     {
       @Override
-      public ArrayList<Message> processBackgroundTask()
+      public ArrayList<LocalizableMessage> processBackgroundTask()
       {
         setValidLater(lInitialMemory, true);
         setValidLater(lMaxMemory, true);
         setValidLater(lOtherArguments, true);
         int initialMemory = -1;
         int maxMemory = -1;
-        ArrayList<Message> errorMsgs = new ArrayList<Message>();
+        ArrayList<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
         try
         {
           String sInitialMemory = tfInitialMemory.getText().trim();
@@ -523,14 +523,14 @@
         if (errorMsgs.isEmpty())
         {
           // Try the options together, often there are interdependencies.
-          ArrayList<Message> allErrors = new ArrayList<Message>();
+          ArrayList<LocalizableMessage> allErrors = new ArrayList<LocalizableMessage>();
           checkAllArgumentsTogether(initialMemory, maxMemory, allErrors);
 
           if (!allErrors.isEmpty())
           {
-            ArrayList<Message> memoryErrors = new ArrayList<Message>();
+            ArrayList<LocalizableMessage> memoryErrors = new ArrayList<LocalizableMessage>();
             checkMemoryArguments(initialMemory, maxMemory, memoryErrors);
-            ArrayList<Message> otherErrors = new ArrayList<Message>();
+            ArrayList<LocalizableMessage> otherErrors = new ArrayList<LocalizableMessage>();
             checkOtherArguments(otherErrors);
 
             if (!memoryErrors.isEmpty())
@@ -563,7 +563,7 @@
       }
 
       @Override
-      public void backgroundTaskCompleted(ArrayList<Message> returnValue,
+      public void backgroundTaskCompleted(ArrayList<LocalizableMessage> returnValue,
           Throwable throwable)
       {
         setCheckingVisible(false);
@@ -612,7 +612,7 @@
    * @param title
    *          the title for the dialog.
    */
-  private void displayError(Message msg, Message title)
+  private void displayError(LocalizableMessage msg, LocalizableMessage title)
   {
     Utilities.displayError(this, msg, title);
     toFront();
@@ -630,7 +630,7 @@
    * @return <CODE>true</CODE> if the user accepts the message displayed in the
    * dialog and <CODE>false</CODE> otherwise.
    */
-  private boolean displayConfirmationDialog(Message msg, Message title)
+  private boolean displayConfirmationDialog(LocalizableMessage msg, LocalizableMessage title)
   {
     toFront();
     return Utilities.displayConfirmation(this, msg, title);
@@ -734,8 +734,8 @@
       javaArgs.setAdditionalArguments(new String[]{"" , "-client", "-XX"});
       // UIFactory.initialize();
       JavaArgumentsDialog dlg = new JavaArgumentsDialog(new JFrame(), javaArgs,
-          Message.raw("my title"),
-          Message.raw("Set the java arguments for the test command-line."));
+          LocalizableMessage.raw("my title"),
+          LocalizableMessage.raw("Set the java arguments for the test command-line."));
       dlg.pack();
       dlg.setVisible(true);
     } catch (Exception ex)
@@ -747,14 +747,14 @@
   private final static String INSTALL_PATH =
     Utils.getInstallPathFromClasspath();
 
-  private void checkOptions(String options, Collection<Message> errorMsgs,
-      JLabel l,  Message errorMsg)
+  private void checkOptions(String options, Collection<LocalizableMessage> errorMsgs,
+      JLabel l,  LocalizableMessage errorMsg)
   {
     checkOptions(options, errorMsgs, new JLabel[]{l}, errorMsg);
   }
 
-  private void checkOptions(String options, Collection<Message> errorMsgs,
-      JLabel[] ls,  Message errorMsg)
+  private void checkOptions(String options, Collection<LocalizableMessage> errorMsgs,
+      JLabel[] ls,  LocalizableMessage errorMsg)
   {
     if (!Utils.isWebStart())
     {
@@ -774,7 +774,7 @@
     }
   }
 
-  private Message getMemoryErrorMessage(Message msg, int memValue)
+  private LocalizableMessage getMemoryErrorMessage(LocalizableMessage msg, int memValue)
   {
     // 2048 MB is acceptable max heap size on 32Bit OS
     if (memValue < 2048)
@@ -783,7 +783,7 @@
     }
     else
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(msg);
       mb.append("  ");
       mb.append(ERR_MEMORY_32_BIT_LIMIT.get());
@@ -792,7 +792,7 @@
   }
 
   private void checkMemoryArguments(int initialMemory, int maxMemory,
-      Collection<Message> errorMsgs)
+      Collection<LocalizableMessage> errorMsgs)
   {
     setValidLater(lInitialMemory, true);
     setValidLater(lMaxMemory, true);
@@ -800,7 +800,7 @@
     {
       if (maxMemory != -1)
       {
-        Message msg = getMemoryErrorMessage(ERR_MEMORY_VALUE_EXTENDED.get(
+        LocalizableMessage msg = getMemoryErrorMessage(ERR_MEMORY_VALUE_EXTENDED.get(
               JavaArguments.getInitialMemoryGenericArgument(),
               JavaArguments.getMaxMemoryGenericArgument()), maxMemory);
         String sMemory =
@@ -813,7 +813,7 @@
       }
       else
       {
-        Message msg = getMemoryErrorMessage(
+        LocalizableMessage msg = getMemoryErrorMessage(
             ERR_INITIAL_MEMORY_VALUE_EXTENDED.get(
                 JavaArguments.getInitialMemoryGenericArgument()),
                 initialMemory);
@@ -825,7 +825,7 @@
     }
     else if (maxMemory != -1)
     {
-      Message msg = getMemoryErrorMessage(
+      LocalizableMessage msg = getMemoryErrorMessage(
           ERR_MAX_MEMORY_VALUE_EXTENDED.get(
               JavaArguments.getInitialMemoryGenericArgument()), maxMemory);
       checkOptions(JavaArguments.getMaxMemoryArgument(maxMemory),
@@ -836,7 +836,7 @@
   }
 
   private void checkAllArgumentsTogether(int initialMemory, int maxMemory,
-      Collection<Message> errorMsgs)
+      Collection<LocalizableMessage> errorMsgs)
   {
     setValidLater(lInitialMemory, true);
     setValidLater(lMaxMemory, true);
@@ -888,7 +888,7 @@
     }
   }
 
-  private void checkOtherArguments(Collection<Message> errorMsgs)
+  private void checkOtherArguments(Collection<LocalizableMessage> errorMsgs)
   {
     setValidLater(lOtherArguments, true);
     ArrayList<JLabel> ls = new ArrayList<JLabel>();
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/RemoteReplicationPortsPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/RemoteReplicationPortsPanel.java
index 8bfe756..4dbfea9 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/RemoteReplicationPortsPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/RemoteReplicationPortsPanel.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.installer.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import java.awt.Component;
@@ -202,7 +203,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     return INFO_REMOTE_REPLICATION_PORT_INSTRUCTIONS.get();
   }
@@ -210,7 +211,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_REMOTE_REPLICATION_PORT_TITLE.get();
   }
@@ -280,7 +281,7 @@
           serverDisplay = server.getHostPort(true);
         }
         LabelFieldDescriptor desc = new LabelFieldDescriptor(
-                Message.raw(serverDisplay),
+                LocalizableMessage.raw(serverDisplay),
                 INFO_REPLICATION_PORT_TOOLTIP.get(),
                 LabelFieldDescriptor.FieldType.TEXTFIELD,
                 LabelFieldDescriptor.LabelType.PRIMARY,
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/RuntimeOptionsPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/RuntimeOptionsPanel.java
index ecca485..82a7207 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/RuntimeOptionsPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/RuntimeOptionsPanel.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.quicksetup.installer.ui;
 
@@ -47,7 +47,7 @@
 
 import org.opends.admin.ads.ReplicaDescriptor;
 import org.opends.admin.ads.SuffixDescriptor;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.JavaArguments;
 import org.opends.quicksetup.UserData;
 import org.opends.quicksetup.installer.DataReplicationOptions;
@@ -185,7 +185,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     return INFO_JAVA_RUNTIME_OPTIONS_PANEL_INSTRUCTIONS.get();
   }
@@ -193,7 +193,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_JAVA_RUNTIME_OPTIONS_PANEL_TITLE.get();
   }
@@ -335,12 +335,12 @@
 
   private void createComponents()
   {
-    warning = UIFactory.makeHtmlPane(Message.EMPTY,
+    warning = UIFactory.makeHtmlPane(LocalizableMessage.EMPTY,
         UIFactory.INSTRUCTIONS_FONT);
     warning.setOpaque(false);
 
     lServer = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        Message.EMPTY, UIFactory.TextStyle.SECONDARY_FIELD_VALID);
+        LocalizableMessage.EMPTY, UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     bServer = UIFactory.makeJButton(INFO_JAVA_RUNTIME_CHANGE_LABEL.get(),
         INFO_JAVA_RUNTIME_CHANGE_SERVER_TOOLTIP.get());
     bServer.addActionListener(new ActionListener()
@@ -352,7 +352,7 @@
     });
 
     lImport = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-        Message.EMPTY, UIFactory.TextStyle.SECONDARY_FIELD_VALID);
+        LocalizableMessage.EMPTY, UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     bImport = UIFactory.makeJButton(INFO_JAVA_RUNTIME_CHANGE_LABEL.get(),
         INFO_JAVA_RUNTIME_CHANGE_IMPORT_TOOLTIP.get());
     bImport.addActionListener(new ActionListener()
@@ -377,7 +377,7 @@
 
   private void updateWarningMessage(UserData uData)
   {
-    Message msg = null;
+    LocalizableMessage msg = null;
 
     DataReplicationOptions repl = uData.getReplicationOptions();
     SuffixesToReplicateOptions suf = uData.getSuffixesToReplicateOptions();
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SecurityOptionsDialog.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SecurityOptionsDialog.java
index 7267e39..c290a17 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SecurityOptionsDialog.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SecurityOptionsDialog.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
 
  */
 
@@ -65,7 +65,7 @@
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.util.CertificateManager;
 import org.opends.server.util.StaticUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.QuickSetupMessages.*;
 
@@ -301,7 +301,7 @@
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.RELATIVE;
 
-    Message title = INFO_SECURITY_OPTIONS_TITLE.get();
+    LocalizableMessage title = INFO_SECURITY_OPTIONS_TITLE.get();
     JLabel l =
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, title,
             UIFactory.TextStyle.TITLE);
@@ -326,7 +326,7 @@
    */
   private Component createInstructionsPane()
   {
-    Message instructions = INFO_SECURITY_OPTIONS_INSTRUCTIONS.get();
+    LocalizableMessage instructions = INFO_SECURITY_OPTIONS_INSTRUCTIONS.get();
 
     JTextComponent instructionsPane =
       UIFactory.makeHtmlPane(instructions, UIFactory.INSTRUCTIONS_FONT);
@@ -363,7 +363,7 @@
     {
       sPort = String.valueOf(port);
     }
-    tfPort = UIFactory.makeJTextField(Message.raw(sPort),
+    tfPort = UIFactory.makeJTextField(LocalizableMessage.raw(sPort),
         INFO_SSL_PORT_TEXTFIELD_TOOLTIP.get(), UIFactory.PORT_FIELD_SIZE,
         UIFactory.TextStyle.TEXTFIELD);
     cbEnableStartTLS = UIFactory.makeJCheckBox(INFO_ENABLE_STARTTLS_LABEL.get(),
@@ -419,7 +419,7 @@
         INFO_KEYSTORE_PATH_LABEL.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     lKeystorePath.setOpaque(false);
-    tfKeystorePath = UIFactory.makeJTextField(Message.EMPTY,
+    tfKeystorePath = UIFactory.makeJTextField(LocalizableMessage.EMPTY,
         INFO_KEYSTORE_PATH_TOOLTIP.get(),
         UIFactory.HOST_FIELD_SIZE, UIFactory.TextStyle.TEXTFIELD);
     lKeystorePath.setLabelFor(tfKeystorePath);
@@ -437,7 +437,7 @@
         INFO_KEYSTORE_PWD_LABEL.get(),
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
     lKeystorePwd.setOpaque(false);
-    tfKeystorePwd = UIFactory.makeJPasswordField(Message.EMPTY,
+    tfKeystorePwd = UIFactory.makeJPasswordField(LocalizableMessage.EMPTY,
         INFO_KEYSTORE_PWD_TOOLTIP.get(),
         UIFactory.PASSWORD_FIELD_SIZE, UIFactory.TextStyle.PASSWORD_FIELD);
     lKeystorePwd.setLabelFor(tfKeystorePwd);
@@ -666,13 +666,13 @@
    */
   private void okClicked()
   {
-    BackgroundTask<ArrayList<Message>> worker =
-      new BackgroundTask<ArrayList<Message>>()
+    BackgroundTask<ArrayList<LocalizableMessage>> worker =
+      new BackgroundTask<ArrayList<LocalizableMessage>>()
     {
       @Override
-      public ArrayList<Message> processBackgroundTask()
+      public ArrayList<LocalizableMessage> processBackgroundTask()
       {
-        ArrayList<Message> errorMsgs = new ArrayList<Message>();
+        ArrayList<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
 
         errorMsgs.addAll(checkPort());
 
@@ -682,7 +682,7 @@
       }
 
       @Override
-      public void backgroundTaskCompleted(ArrayList<Message> returnValue,
+      public void backgroundTaskCompleted(ArrayList<LocalizableMessage> returnValue,
           Throwable throwable)
       {
         if (throwable != null)
@@ -760,7 +760,7 @@
    * @param title
    *          the title for the dialog.
    */
-  private void displayError(Message msg, Message title)
+  private void displayError(LocalizableMessage msg, LocalizableMessage title)
   {
     Utilities.displayError(this, msg, title);
     toFront();
@@ -884,9 +884,9 @@
    * @return the port help message that we display when we cannot use the
    * default port (636).
    */
-  private Message getPortHelpMessage()
+  private LocalizableMessage getPortHelpMessage()
   {
-    Message s = Message.EMPTY;
+    LocalizableMessage s = LocalizableMessage.EMPTY;
     if (securityOptions.getSslPort() != DEFAULT_PORT)
     {
       s = INFO_CANNOT_USE_DEFAULT_SECURE_PORT.get();
@@ -898,9 +898,9 @@
    * Checks the port.
    * @return the error messages found while checking the port.
    */
-  private ArrayList<Message> checkPort()
+  private ArrayList<LocalizableMessage> checkPort()
   {
-    ArrayList<Message> errorMsgs = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
 
     if (cbEnableSSL.isSelected())
     {
@@ -950,9 +950,9 @@
    * @return the error messages found while checking existing keystore
    * parameters.
    */
-  private ArrayList<Message> checkKeystore()
+  private ArrayList<LocalizableMessage> checkKeystore()
   {
-    ArrayList<Message> errorMsgs = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errorMsgs = new ArrayList<LocalizableMessage>();
 
     boolean pathValid = true;
     boolean pwdValid = true;
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SelectAliasDialog.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SelectAliasDialog.java
index de2cea2..1dd339e 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SelectAliasDialog.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SelectAliasDialog.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.quicksetup.installer.ui;
@@ -48,7 +48,7 @@
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.ui.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -157,7 +157,7 @@
     gbc.gridwidth = GridBagConstraints.REMAINDER;
     gbc.insets.left = UIFactory.LEFT_INSET_SECONDARY_FIELD;
     gbc.fill = GridBagConstraints.BOTH;
-    Message msg = INFO_SELECT_ALIAS_MSG.get();
+    LocalizableMessage msg = INFO_SELECT_ALIAS_MSG.get();
     JTextComponent tf = UIFactory.makeHtmlPane(msg,
             UIFactory.INSTRUCTIONS_FONT);
     tf.setOpaque(false);
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/ServerSettingsPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/ServerSettingsPanel.java
index 91f934a..4d41f27 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/ServerSettingsPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/ServerSettingsPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.installer.ui;
@@ -54,7 +55,7 @@
 import org.opends.quicksetup.UserData;
 
 import org.opends.server.util.CertificateManager;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -226,7 +227,7 @@
       gbc.weightx = 0.0;
       gbc.insets.left = UIFactory.LEFT_INSET_SECONDARY_FIELD;
       auxPanel.add(UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-          Message.raw(File.separator), UIFactory.TextStyle.TEXTFIELD), gbc);
+          LocalizableMessage.raw(File.separator), UIFactory.TextStyle.TEXTFIELD), gbc);
 
       gbc.gridwidth = GridBagConstraints.REMAINDER;
       gbc.weightx = 0.3;
@@ -346,7 +347,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     if (Utils.isWebStart())
     {
@@ -361,7 +362,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_SERVER_SETTINGS_PANEL_TITLE.get();
   }
@@ -513,7 +514,7 @@
       else
       {
         lSecurity = UIFactory.makeJLabel(UIFactory.IconType.NO_ICON,
-                Message.raw(defaultValue),
+                LocalizableMessage.raw(defaultValue),
                 UIFactory.TextStyle.SECONDARY_FIELD_VALID);
       }
 
@@ -666,9 +667,9 @@
    * @return the port help message that we display when we cannot use the
    * default admin connector port (4444).
    */
-  private Message getAdminConnectorPortHelpMessage()
+  private LocalizableMessage getAdminConnectorPortHelpMessage()
   {
-    Message s = Message.EMPTY;
+    LocalizableMessage s = LocalizableMessage.EMPTY;
     if (defaultUserData.getAdminConnectorPort() != 4444)
     {
       s = INFO_CANNOT_USE_DEFAULT_ADMIN_CONNECTOR_PORT.get();
@@ -682,9 +683,9 @@
    * @return the port help message that we display when we cannot use the
    * default port (389).
    */
-  private Message getPortHelpMessage()
+  private LocalizableMessage getPortHelpMessage()
   {
-    Message s = Message.EMPTY;
+    LocalizableMessage s = LocalizableMessage.EMPTY;
     if (defaultUserData.getServerPort() != 389)
     {
       s = INFO_CANNOT_USE_DEFAULT_PORT.get();
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SuffixesToReplicatePanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SuffixesToReplicatePanel.java
index 8356a1f..3865f91 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SuffixesToReplicatePanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/ui/SuffixesToReplicatePanel.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.quicksetup.installer.ui;
@@ -59,8 +59,8 @@
 import org.opends.quicksetup.ui.UIFactory;
 import org.opends.quicksetup.util.Utils;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -191,7 +191,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     return INFO_SUFFIXES_TO_REPLICATE_PANEL_INSTRUCTIONS.get();
   }
@@ -199,7 +199,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_SUFFIXES_TO_REPLICATE_PANEL_TITLE.get();
   }
@@ -247,7 +247,7 @@
       hmCheckBoxes.clear();
       for (SuffixDescriptor suffix : orderedSuffixes)
       {
-        JCheckBox cb = UIFactory.makeJCheckBox(Message.raw(suffix.getDN()),
+        JCheckBox cb = UIFactory.makeJCheckBox(LocalizableMessage.raw(suffix.getDN()),
             INFO_SUFFIXES_TO_REPLICATE_DN_TOOLTIP.get(),
             UIFactory.TextStyle.SECONDARY_FIELD_VALID);
         cb.setOpaque(false);
@@ -302,13 +302,13 @@
       gbc.weightx = 1.0;
       gbc.gridwidth = GridBagConstraints.REMAINDER;
       JEditorPane l = UIFactory.makeTextPane(
-              Message.raw(getSuffixString(suffix)),
+              LocalizableMessage.raw(getSuffixString(suffix)),
               UIFactory.TextStyle.SECONDARY_FIELD_VALID);
       l.setOpaque(false);
 
       /* Use a prototype label to get the additional insets */
       JEditorPane proto = UIFactory.makeTextPane(
-              Message.raw(suffix.getDN()),
+              LocalizableMessage.raw(suffix.getDN()),
           UIFactory.TextStyle.SECONDARY_FIELD_VALID);
 
       gbc.insets.top += Math.abs(cb.getPreferredSize().height -
@@ -326,13 +326,13 @@
 
   private String getSuffixString(SuffixDescriptor desc)
   {
-    TreeSet<Message> replicaDisplays = new TreeSet<Message>();
+    TreeSet<LocalizableMessage> replicaDisplays = new TreeSet<LocalizableMessage>();
     for (ReplicaDescriptor rep: desc.getReplicas())
     {
       replicaDisplays.add(getReplicaDisplay(rep));
     }
-    MessageBuilder buf = new MessageBuilder();
-    for (Message display: replicaDisplays)
+    LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
+    for (LocalizableMessage display: replicaDisplays)
     {
       if (buf.length() > 0)
       {
@@ -343,9 +343,9 @@
     return buf.toString();
   }
 
-  private Message getReplicaDisplay(ReplicaDescriptor replica)
+  private LocalizableMessage getReplicaDisplay(ReplicaDescriptor replica)
   {
-    Message display;
+    LocalizableMessage display;
 
     ServerDescriptor server = replica.getServer();
 
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java
index 772266f..fb57022 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/installer/webstart/WebStartInstaller.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.webstart;
@@ -51,7 +51,7 @@
 import org.opends.quicksetup.util.FileManager;
 import org.opends.server.util.SetupUtils;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -84,8 +84,8 @@
   private final Map<ProgressStep, Integer> hmRatio =
       new HashMap<ProgressStep, Integer>();
 
-  private final Map<ProgressStep, Message> hmSummary =
-      new HashMap<ProgressStep, Message>();
+  private final Map<ProgressStep, LocalizableMessage> hmSummary =
+      new HashMap<ProgressStep, LocalizableMessage>();
 
   private static final Logger LOG =
     Logger.getLogger(WebStartInstaller.class.getName());
@@ -300,7 +300,7 @@
         notifyListeners(getLineBreak());
         updateSummaryWithServerState(hmSummary, false);
         setCurrentProgressStep(InstallProgressStep.FINISHED_WITH_ERROR);
-        Message html = getFormattedError(ex, true);
+        LocalizableMessage html = getFormattedError(ex, true);
         notifyListeners(html);
         LOG.log(Level.SEVERE, "Error installing.", ex);
         notifyListeners(getLineBreak());
@@ -324,7 +324,7 @@
       ApplicationException ex = new ApplicationException(
           ReturnCode.BUG,
           Utils.getThrowableMsg(INFO_BUG_MSG.get(), t), t);
-      Message msg = getFormattedError(ex, true);
+      LocalizableMessage msg = getFormattedError(ex, true);
       notifyListeners(msg);
       LOG.log(Level.SEVERE, "Error installing.", t);
       notifyListeners(getLineBreak());
@@ -347,9 +347,9 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getSummary(ProgressStep status)
+  public LocalizableMessage getSummary(ProgressStep status)
   {
-    Message summary;
+    LocalizableMessage summary;
     if (InstallProgressStep.DOWNLOADING.equals(status)) {
       summary = loader.getSummary();
     } else {
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java
index 0d3ecd5..d1e2fce 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ButtonsPanel.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import org.opends.quicksetup.ButtonName;
@@ -286,7 +287,7 @@
    * @param buttonName the ButtonName.
    * @return a new button with the specified parameters.
    */
-  private JButton createButton(Message label, Message tooltip,
+  private JButton createButton(LocalizableMessage label, LocalizableMessage tooltip,
       ButtonName buttonName)
   {
     JButton b = UIFactory.makeJButton(label, tooltip);
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/CertificateDialog.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/CertificateDialog.java
index fedf103..79c2173 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/CertificateDialog.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/CertificateDialog.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.quicksetup.ui;
@@ -66,8 +66,8 @@
 import org.opends.quicksetup.UserDataCertificateException;
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -255,7 +255,7 @@
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.RELATIVE;
 
-    Message title = INFO_CERTIFICATE_TITLE.get();
+    LocalizableMessage title = INFO_CERTIFICATE_TITLE.get();
     JLabel l =
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, title,
             UIFactory.TextStyle.TITLE);
@@ -280,7 +280,7 @@
    */
   private Component createTextPane()
   {
-    Message text;
+    LocalizableMessage text;
     if (ce.getType() == UserDataCertificateException.Type.NOT_TRUSTED)
     {
       text = INFO_CERTIFICATE_NOT_TRUSTED_TEXT.get(
@@ -314,12 +314,12 @@
     p.add(explanationPane, gbc);
     if ((ce.getChain() != null) && (ce.getChain().length > 0))
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(text);
       mb.append(INFO_CERTIFICATE_SHOW_DETAILS_TEXT.get());
       explanationWithShowDetails = UIFactory.applyFontToHtml(
               mb.toString(), UIFactory.INSTRUCTIONS_FONT);
-      MessageBuilder mb2 = new MessageBuilder();
+      LocalizableMessageBuilder mb2 = new LocalizableMessageBuilder();
       mb2.append(text);
       mb2.append(INFO_CERTIFICATE_HIDE_DETAILS_TEXT.get());
       explanationWithHideDetails = UIFactory.applyFontToHtml(
@@ -414,7 +414,7 @@
       final JPanel cardPanel = new JPanel(cl);
       final Map<String, JPanel> hmPanels = new HashMap<String, JPanel>();
 
-      Message[] labels =
+      LocalizableMessage[] labels =
       {
           INFO_CERTIFICATE_SUBJECT_LABEL.get(),
           INFO_CERTIFICATE_ISSUED_BY_LABEL.get(),
@@ -531,13 +531,13 @@
 
   private JComponent createSubjectComponent(X509Certificate cert)
   {
-    Message dn = Message.raw(cert.getSubjectX500Principal().getName());
+    LocalizableMessage dn = LocalizableMessage.raw(cert.getSubjectX500Principal().getName());
     return makeValueLabel(dn);
   }
 
   private JComponent createIssuedByComponent(X509Certificate cert)
   {
-    Message dn = Message.raw(cert.getIssuerX500Principal().getName());
+    LocalizableMessage dn = LocalizableMessage.raw(cert.getIssuerX500Principal().getName());
     return makeValueLabel(dn);
   }
 
@@ -548,7 +548,7 @@
     Date date = cert.getNotBefore();
     DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT,
         DateFormat.SHORT);
-    Message value = Message.raw(df.format(date));
+    LocalizableMessage value = LocalizableMessage.raw(df.format(date));
     long t1 = System.currentTimeMillis();
     long t2 = date.getTime();
     boolean isNotValidYet = t1 < t2;
@@ -574,7 +574,7 @@
     Date date = cert.getNotAfter();
     DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT,
     DateFormat.SHORT);
-    Message value = Message.raw(df.format(date));
+    LocalizableMessage value = LocalizableMessage.raw(df.format(date));
     long t1 = System.currentTimeMillis();
     long t2 = date.getTime();
     boolean isExpired = t1 > t2;
@@ -595,25 +595,25 @@
 
   private JComponent createTypeComponent(X509Certificate cert)
   {
-    Message type = Message.raw(cert.getType());
+    LocalizableMessage type = LocalizableMessage.raw(cert.getType());
     return makeValueLabel(type);
   }
 
   private JComponent createSerialNumberComponent(X509Certificate cert)
   {
-    Message serialNumber = Message.raw(String.valueOf(cert.getSerialNumber()));
+    LocalizableMessage serialNumber = LocalizableMessage.raw(String.valueOf(cert.getSerialNumber()));
     return makeValueLabel(serialNumber);
   }
 
 
   /**
-   * Returns the Message representation of the SHA1 fingerprint.
+   * Returns the LocalizableMessage representation of the SHA1 fingerprint.
    * @param cert the certificate object.
-   * @return the Message representation of the SHA1 fingerprint.
+   * @return the LocalizableMessage representation of the SHA1 fingerprint.
    */
-  public static Message getSHA1FingerPrint(X509Certificate cert)
+  public static LocalizableMessage getSHA1FingerPrint(X509Certificate cert)
   {
-    Message msg = null;
+    LocalizableMessage msg = null;
     try {
       MessageDigest md = MessageDigest.getInstance("SHA1");
 
@@ -627,7 +627,7 @@
         }
         sb.append(Integer.toHexString(((int) b[i]) & 0xFF));
       }
-      msg = Message.raw(sb);
+      msg = LocalizableMessage.raw(sb);
     }
     catch (NoSuchAlgorithmException nsae) {
       LOG.log(Level.WARNING, "SHA1 algorithm not supported: "+nsae, nsae);
@@ -639,13 +639,13 @@
   }
 
   /**
-   * Returns the Message representation of the MD5 fingerprint.
+   * Returns the LocalizableMessage representation of the MD5 fingerprint.
    * @param cert the certificate object.
-   * @return the Message representation of the MD5 fingerprint.
+   * @return the LocalizableMessage representation of the MD5 fingerprint.
    */
-  public static Message getMD5FingerPrint(X509Certificate cert)
+  public static LocalizableMessage getMD5FingerPrint(X509Certificate cert)
   {
-    Message msg = null;
+    LocalizableMessage msg = null;
     try {
       MessageDigest md = MessageDigest.getInstance("MD5");
 
@@ -659,7 +659,7 @@
         }
         sb.append(Integer.toHexString(((int) b[i]) & 0xFF));
       }
-      msg = Message.raw(sb);
+      msg = LocalizableMessage.raw(sb);
     }
     catch (NoSuchAlgorithmException nsae) {
       LOG.log(Level.WARNING, "MD5 algorithm not supported: "+nsae, nsae);
@@ -682,7 +682,7 @@
         UIFactory.TextStyle.SECONDARY_FIELD_VALID);
   }
 
-  private JLabel makeValueLabel(Message value)
+  private JLabel makeValueLabel(LocalizableMessage value)
   {
     if (value == null)
     {
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/FinishedPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/FinishedPanel.java
index 8800355..950aaab 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/FinishedPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/FinishedPanel.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -49,7 +50,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_FINISHED_PANEL_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
index 4a0f812..d75c29f 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/GuiApplication.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.quicksetup.ui;
@@ -36,7 +36,7 @@
 import org.opends.quicksetup.UserDataException;
 import org.opends.quicksetup.WizardStep;
 import org.opends.quicksetup.webstart.WebStartDownloader;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import javax.swing.*;
@@ -81,7 +81,7 @@
    * in some operating systems.
    * @return internationalized String representing the frame title
    */
-  abstract public Message getFrameTitle();
+  abstract public LocalizableMessage getFrameTitle();
 
   /**
    * Returns the initial wizard step.
@@ -124,7 +124,7 @@
    * Returns the tab formatted.
    * @return the tab formatted.
    */
-  protected Message getTab()
+  protected LocalizableMessage getTab()
   {
     return formatter.getTab();
   }
@@ -375,7 +375,7 @@
    * Gets the key for the close button's tool tip text.
    * @return String key of the text in the resource bundle
    */
-  public Message getCloseButtonToolTip() {
+  public LocalizableMessage getCloseButtonToolTip() {
     return INFO_CLOSE_BUTTON_TOOLTIP.get();
   }
 
@@ -383,7 +383,7 @@
    * Gets the key for the quit button's tool tip text.
    * @return String key of the text in the resource bundle
    */
-  public Message getQuitButtonToolTip() {
+  public LocalizableMessage getQuitButtonToolTip() {
     return INFO_QUIT_BUTTON_INSTALL_TOOLTIP.get();
   }
 
@@ -391,7 +391,7 @@
    * Gets the key for the finish button's tool tip text.
    * @return String key of the text in the resource bundle
    */
-  public Message getFinishButtonToolTip() {
+  public LocalizableMessage getFinishButtonToolTip() {
     return INFO_FINISH_BUTTON_TOOLTIP.get();
   }
 
@@ -399,7 +399,7 @@
    * Gets the key for the finish button's label.
    * @return String key of the text in the resource bundle
    */
-  public Message getFinishButtonLabel() {
+  public LocalizableMessage getFinishButtonLabel() {
     return INFO_FINISH_BUTTON_LABEL.get();
   }
 
@@ -506,7 +506,7 @@
       {
         lastPercentage = perc;
         int ratio = (perc * maxRatio) / 100;
-        Message summary;
+        LocalizableMessage summary;
         switch (downloadStatus)
         {
         case VALIDATING:
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/LabelFieldDescriptor.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/LabelFieldDescriptor.java
index d121feb..f1d3433 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/LabelFieldDescriptor.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/LabelFieldDescriptor.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This is a commodity class used to couple a label and a text component with
@@ -39,9 +40,9 @@
 
 public class LabelFieldDescriptor
 {
-  private Message label;
+  private LocalizableMessage label;
 
-  private Message tooltip;
+  private LocalizableMessage tooltip;
 
   private FieldType type;
 
@@ -95,7 +96,7 @@
    * @param labelType the type of label.
    * @param size the size of the field.
    */
-  public LabelFieldDescriptor(Message label, Message tooltip, FieldType type,
+  public LabelFieldDescriptor(LocalizableMessage label, LocalizableMessage tooltip, FieldType type,
       LabelType labelType, int size)
   {
     this.label = label;
@@ -109,7 +110,7 @@
    * Returns the String displayed by the label.
    * @return the String displayed by the label.
    */
-  public Message getLabel()
+  public LocalizableMessage getLabel()
   {
     return label;
   }
@@ -127,7 +128,7 @@
    * Returns the tooltip used in the field.
    * @return the tooltip used in the field.
    */
-  public Message getTooltip()
+  public LocalizableMessage getTooltip()
   {
     return tooltip;
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ProgressDialog.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ProgressDialog.java
index d251641..7b85146 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ProgressDialog.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ProgressDialog.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import java.awt.Dimension;
@@ -66,13 +66,13 @@
 
   private JEditorPane detailsTextArea;
 
-  private Message lastText;
+  private LocalizableMessage lastText;
 
   private JFrame parent;
 
   private JButton closeButton;
 
-  private Message panelTitle = INFO_PROGRESS_TITLE.get();
+  private LocalizableMessage panelTitle = INFO_PROGRESS_TITLE.get();
 
   private ProgressMessageFormatter formatter =
     new HtmlProgressMessageFormatter();
@@ -118,7 +118,7 @@
    * Returns the title of the panel.
    * @return the title of the panel
    */
-  public Message getPanelTitle()
+  public LocalizableMessage getPanelTitle()
   {
     return panelTitle;
   }
@@ -136,7 +136,7 @@
    * Sets the text in the summary label.  The text can be in HTML format.
    * @param text the text to be set.
    */
-  public void setSummary(Message text)
+  public void setSummary(LocalizableMessage text)
   {
     if (text != null) {
       progressBarLabel.setText(text.toString());
@@ -149,7 +149,7 @@
    * Sets the text in the details text pane.  The text can be in HTML format.
    * @param text the text to be set.
    */
-  public void setDetails(Message text)
+  public void setDetails(LocalizableMessage text)
   {
     if (text != null) {
       detailsTextArea.setText(text.toString());
@@ -188,7 +188,7 @@
     gbc.weightx = 0.0;
     gbc.gridwidth = GridBagConstraints.RELATIVE;
 
-    Message title = getPanelTitle();
+    LocalizableMessage title = getPanelTitle();
 
     JLabel l =
         UIFactory.makeJLabel(UIFactory.IconType.NO_ICON, title,
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.java
index a08a628..cf195c1 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/ProgressPanel.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.quicksetup.ui;
@@ -43,7 +43,7 @@
 import org.opends.quicksetup.ProgressStep;
 import org.opends.quicksetup.event.ButtonEvent;
 import org.opends.quicksetup.ProgressDescriptor;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -62,7 +62,7 @@
 
   private JEditorPane detailsTextArea;
 
-  private Message lastText;
+  private LocalizableMessage lastText;
 
   private Component lastFocusComponent;
 
@@ -166,7 +166,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getInstructions()
+  protected LocalizableMessage getInstructions()
   {
     return null;
   }
@@ -174,7 +174,7 @@
   /**
    * {@inheritDoc}
    */
-  protected Message getTitle()
+  protected LocalizableMessage getTitle()
   {
     return INFO_PROGRESS_PANEL_TITLE.get();
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.java
index 3659bfd..9ebda8c 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetup.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.ui;
@@ -38,8 +38,8 @@
 import org.opends.server.util.SetupUtils;
 
 import static org.opends.quicksetup.util.Utils.*;
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import javax.swing.*;
@@ -86,7 +86,7 @@
 
   private QuickSetupDialog dialog;
 
-  private MessageBuilder progressDetails = new MessageBuilder();
+  private LocalizableMessageBuilder progressDetails = new LocalizableMessageBuilder();
 
   private ProgressDescriptor lastDescriptor;
 
@@ -463,7 +463,7 @@
 
         if (throwable != null)
         {
-          displayError(Message.raw(throwable.getMessage()),
+          displayError(LocalizableMessage.raw(throwable.getMessage()),
                   INFO_ERROR_TITLE.get());
         }
       }
@@ -578,7 +578,7 @@
    * @param title
    *          the title for the dialog.
    */
-  public void displayError(Message msg, Message title)
+  public void displayError(LocalizableMessage msg, LocalizableMessage title)
   {
     if (isCli()) {
       System.err.println(msg);
@@ -597,7 +597,7 @@
    * @return <CODE>true</CODE> if the user confirms the message, or
    * <CODE>false</CODE> if not.
    */
-  public boolean displayConfirmation(Message msg, Message title)
+  public boolean displayConfirmation(LocalizableMessage msg, LocalizableMessage title)
   {
     return getDialog().displayConfirmation(msg, title);
   }
@@ -676,8 +676,8 @@
   private ProgressDescriptor createProgressDescriptor(ProgressUpdateEvent ev)
   {
     ProgressStep status = ev.getProgressStep();
-    Message newProgressLabel = ev.getCurrentPhaseSummary();
-    Message additionalDetails = ev.getNewLogs();
+    LocalizableMessage newProgressLabel = ev.getCurrentPhaseSummary();
+    LocalizableMessage additionalDetails = ev.getNewLogs();
     Integer ratio = ev.getProgressRatio();
 
     if (additionalDetails != null)
@@ -686,12 +686,12 @@
     }
     /*
     Note: progressDetails might have a certain number of characters that
-    break Message Formatter (for instance percentages).  When fix for
+    break LocalizableMessage Formatter (for instance percentages).  When fix for
     issue 2142 was committed it broke this code.  So here
-    we use Message.raw instead of calling directly progressDetails.toMessage
+    we use LocalizableMessage.raw instead of calling directly progressDetails.toMessage
     */
     return new ProgressDescriptor(status, ratio, newProgressLabel,
-        Message.raw(progressDetails.toString()));
+        LocalizableMessage.raw(progressDetails.toString()));
   }
 
   /**
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.java
index 8271a26..545edc1 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupDialog.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.quicksetup.ui;
@@ -44,7 +44,7 @@
 import org.opends.quicksetup.event.ButtonEvent;
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
 import org.opends.quicksetup.ProgressDescriptor;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 /**
  * This class represents the dialog used by quicksetup applications.
  *
@@ -194,7 +194,7 @@
    * @param title
    *          the title for the dialog.
    */
-  public void displayError(Message msg, Message title)
+  public void displayError(LocalizableMessage msg, LocalizableMessage title)
   {
     Utilities.displayError(getFrame(), msg, title);
   }
@@ -209,7 +209,7 @@
    * @return <CODE>true</CODE> if the user confirms the message, or
    * <CODE>false</CODE> if not.
    */
-  public boolean displayConfirmation(Message msg, Message title)
+  public boolean displayConfirmation(LocalizableMessage msg, LocalizableMessage title)
   {
     return Utilities.displayConfirmation(getFrame(), msg, title);
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupErrorPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupErrorPanel.java
index 1e14b04..93e4251 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupErrorPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupErrorPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.ui;
@@ -37,7 +38,7 @@
 import javax.swing.JPanel;
 import javax.swing.text.JTextComponent;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.ButtonName;
 import org.opends.quicksetup.CurrentInstallStatus;
 import org.opends.quicksetup.event.ButtonActionListener;
@@ -78,7 +79,7 @@
    * @param msg the error message to display formatted in HTML.
    */
   public QuickSetupErrorPanel(GuiApplication application,
-                              Message msg)
+                              LocalizableMessage msg)
   {
     super(application);
     JPanel p1 = new JPanel(new GridBagLayout());
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupStepPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupStepPanel.java
index 2dbab5a..197b44d 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupStepPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/QuickSetupStepPanel.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.quicksetup.ui;
@@ -50,7 +50,7 @@
 import org.opends.quicksetup.util.ProgressMessageFormatter;
 import org.opends.quicksetup.util.URLWorker;
 import org.opends.quicksetup.util.Utils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -258,16 +258,16 @@
    * @return the text to be displayed in the progress label for a give icon
    * type.
    */
-  protected Message getTextForIcon(UIFactory.IconType iconType)
+  protected LocalizableMessage getTextForIcon(UIFactory.IconType iconType)
   {
-    Message text;
+    LocalizableMessage text;
     if (iconType == UIFactory.IconType.WAIT)
     {
       text = INFO_GENERAL_CHECKING_DATA.get();
     }
     else
     {
-      text = Message.EMPTY;
+      text = LocalizableMessage.EMPTY;
     }
     return text;
   }
@@ -387,13 +387,13 @@
    * Returns the title of this panel.
    * @return the title of this panel.
    */
-  protected abstract Message getTitle();
+  protected abstract LocalizableMessage getTitle();
 
   /**
    * Returns the instruction of this panel.
    * @return the instruction of this panel.
    */
-  protected abstract Message getInstructions();
+  protected abstract LocalizableMessage getInstructions();
 
   /**
    * Commodity method that adds a vertical glue at the bottom of a given panel.
@@ -461,7 +461,7 @@
   private Component createTitlePanel()
   {
     Component titlePanel = null;
-    Message title = getTitle();
+    LocalizableMessage title = getTitle();
     if (title != null)
     {
       JPanel p = new JPanel(new GridBagLayout());
@@ -493,7 +493,7 @@
   protected Component createInstructionsPanel()
   {
     Component instructionsPanel = null;
-    Message instructions = getInstructions();
+    LocalizableMessage instructions = getInstructions();
     if (instructions != null)
     {
       JEditorPane p =
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/StepsPanel.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/StepsPanel.java
index 248a7c1..72cdfdd 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/StepsPanel.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/StepsPanel.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.ui;
@@ -38,7 +39,7 @@
 
 import org.opends.quicksetup.UserData;
 import org.opends.quicksetup.WizardStep;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This class displays the different steps of the wizard.  It appears on the
@@ -132,7 +133,7 @@
     gbc.fill = GridBagConstraints.HORIZONTAL;
     gbc.anchor = GridBagConstraints.WEST;
 
-    HashMap<WizardStep, Message> hmText = new HashMap<WizardStep, Message>();
+    HashMap<WizardStep, LocalizableMessage> hmText = new HashMap<WizardStep, LocalizableMessage>();
     LinkedHashSet<WizardStep> orderedSteps = app.getOrderedSteps();
     boolean first = true;
     for (WizardStep s : orderedSteps)
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
index 419af14..da53c60 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/UIFactory.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup.ui;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import javax.swing.*;
 import javax.swing.border.Border;
@@ -783,7 +783,7 @@
    * @param tooltip the tooltip of the button.
    * @return a JButton with the given label and tooltip.
    */
-  public static JButton makeJButton(Message label, Message tooltip)
+  public static JButton makeJButton(LocalizableMessage label, LocalizableMessage tooltip)
   {
     JButton b = new JButton();
 
@@ -827,7 +827,7 @@
    * @param style the text style.
    * @return a JLabel with the given icon, text and text style.
    */
-  public static JLabel makeJLabel(IconType iconName, Message text,
+  public static JLabel makeJLabel(IconType iconName, LocalizableMessage text,
       TextStyle style)
   {
     JLabel l = new JLabel();
@@ -839,7 +839,7 @@
 
     ImageIcon icon = getImageIcon(iconName);
     l.setIcon(icon);
-    Message tooltip = getIconTooltip(iconName);
+    LocalizableMessage tooltip = getIconTooltip(iconName);
 
     if (tooltip != null)
     {
@@ -868,21 +868,21 @@
     case TEXTFIELD:
 
       field =
-          makeJTextField(Message.raw(defaultValue), desc.getTooltip(), desc
+          makeJTextField(LocalizableMessage.raw(defaultValue), desc.getTooltip(), desc
               .getSize(), TextStyle.TEXTFIELD);
       break;
 
     case PASSWORD:
 
       field =
-          makeJPasswordField(Message.raw(defaultValue), desc.getTooltip(), desc
+          makeJPasswordField(LocalizableMessage.raw(defaultValue), desc.getTooltip(), desc
               .getSize(), TextStyle.PASSWORD_FIELD);
       break;
 
     case READ_ONLY:
 
       field =
-          makeTextPane(Message.raw(defaultValue), TextStyle.READ_ONLY);
+          makeTextPane(LocalizableMessage.raw(defaultValue), TextStyle.READ_ONLY);
       break;
 
     default:
@@ -901,7 +901,7 @@
    * @return a JTextField with the given icon, tooltip text, size and text
    * style.
    */
-  public static JTextField makeJTextField(Message text, Message tooltip,
+  public static JTextField makeJTextField(LocalizableMessage text, LocalizableMessage tooltip,
       int size, TextStyle style)
   {
     JTextField f = new JTextField();
@@ -920,7 +920,7 @@
    * @return a JPasswordField with the given icon, tooltip text, size and text
    * style.
    */
-  public static JPasswordField makeJPasswordField(Message text, Message tooltip,
+  public static JPasswordField makeJPasswordField(LocalizableMessage text, LocalizableMessage tooltip,
       int size, TextStyle style)
   {
     JPasswordField f = new JPasswordField();
@@ -938,7 +938,7 @@
    * @return a JRadioButton with the given text, tooltip text and text
    * style.
    */
-  public static JRadioButton makeJRadioButton(Message text, Message tooltip,
+  public static JRadioButton makeJRadioButton(LocalizableMessage text, LocalizableMessage tooltip,
       TextStyle style)
   {
     JRadioButton rb = new JRadioButton();
@@ -966,7 +966,7 @@
    * @return a JCheckBox with the given text, tooltip text and text
    * style.
    */
-  public static JCheckBox makeJCheckBox(Message text, Message tooltip,
+  public static JCheckBox makeJCheckBox(LocalizableMessage text, LocalizableMessage tooltip,
       TextStyle style)
   {
     JCheckBox cb = new JCheckBox();
@@ -1101,8 +1101,8 @@
     String url =
         String.valueOf(UIFactory.class.getClassLoader().getResource(
             getIconPath(iconType)));
-    Message description = getIconDescription(iconType);
-    Message title = getIconTooltip(iconType);
+    LocalizableMessage description = getIconDescription(iconType);
+    LocalizableMessage title = getIconTooltip(iconType);
     return "<img src=\"" + url + "\" alt=\"" + description +
     "\" align=\"middle\" title=\"" + title + "\" >";
   }
@@ -1121,7 +1121,7 @@
     if ((icon == null) && (iconType != IconType.NO_ICON))
     {
       String path = getIconPath(iconType);
-      Message description = getIconDescription(iconType);
+      LocalizableMessage description = getIconDescription(iconType);
       try
       {
         Image im =
@@ -1163,7 +1163,7 @@
    * @return a read only JEditorPane containing the provided text with the
    * provided font.
    */
-  public static JEditorPane makeHtmlPane(Message text, Font font)
+  public static JEditorPane makeHtmlPane(LocalizableMessage text, Font font)
   {
     return makeHtmlPane(text, null, font);
   }
@@ -1177,7 +1177,7 @@
    * @return a read only JEditorPane containing the provided text with the
    * provided font.
    */
-  public static JEditorPane makeHtmlPane(Message text, HTMLEditorKit ek,
+  public static JEditorPane makeHtmlPane(LocalizableMessage text, HTMLEditorKit ek,
                                          Font font)
   {
     JEditorPane pane = new JEditorPane();
@@ -1199,7 +1199,7 @@
    * @return a read only JEditorPane containing the provided text with the
    * provided TextStyle.
    */
-  public static JEditorPane makeTextPane(Message text, TextStyle style)
+  public static JEditorPane makeTextPane(LocalizableMessage text, TextStyle style)
   {
     String s = text != null ? String.valueOf(text) : null;
     JEditorPane pane = new JEditorPane("text/plain", s);
@@ -1412,8 +1412,8 @@
    * @param size the new size of the field.
    * @param textStyle the new TextStyle of the field.
    */
-  private static void updateTextFieldComponent(JTextField field, Message text,
-      Message tooltip, int size, TextStyle textStyle)
+  private static void updateTextFieldComponent(JTextField field, LocalizableMessage text,
+      LocalizableMessage tooltip, int size, TextStyle textStyle)
   {
     field.setColumns(size);
     if (text != null)
@@ -1430,7 +1430,7 @@
     }
   }
 
-  private static Color getColor(Message l)
+  private static Color getColor(LocalizableMessage l)
   {
     String s = String.valueOf(l);
     String[] colors = s.split(",");
@@ -1465,7 +1465,7 @@
    */
   private static String getIconPath(IconType iconType)
   {
-    Message key;
+    LocalizableMessage key;
     switch (iconType)
     {
     case CURRENT_STEP:
@@ -1543,9 +1543,9 @@
    * @param iconType the IconType for which we want to get the description.
    * @return the icon description for the given IconType.
    */
-  private static Message getIconDescription(IconType iconType)
+  private static LocalizableMessage getIconDescription(IconType iconType)
   {
-    Message description;
+    LocalizableMessage description;
     switch (iconType)
     {
     case CURRENT_STEP:
@@ -1628,12 +1628,12 @@
    * @param iconType the IconType for which we want to get the tooltip text.
    * @return the icon tooltip text for the given IconType.
    */
-  private static Message getIconTooltip(IconType iconType)
+  private static LocalizableMessage getIconTooltip(IconType iconType)
   {
     if (iconType == null) {
       iconType = IconType.NO_ICON;
     }
-    Message tooltip;
+    LocalizableMessage tooltip;
     switch (iconType)
     {
     case CURRENT_STEP:
@@ -1721,8 +1721,9 @@
           boolean isSelected,
           boolean cellHasFocus)
       {
-        JLabel l = makeJLabel(IconType.NO_ICON, Message.fromObject(value),
-                              textStyle);
+        JLabel l =
+            makeJLabel(IconType.NO_ICON, LocalizableMessage.raw(value
+                .toString()), textStyle);
         l.setBorder(new EmptyBorder(TOP_INSET_SECONDARY_FIELD, 0, 0, 0));
         return l;
       }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/Utilities.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/Utilities.java
index 4fa0604..740d601 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/Utilities.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/Utilities.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.ui;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.quicksetup.util.Utils;
 
@@ -145,8 +146,8 @@
   * @return <CODE>true</CODE> if the user confirms the message, or
   * <CODE>false</CODE> if not.
   */
- public static boolean displayConfirmation(Component parent, Message msg,
-     Message title)
+ public static boolean displayConfirmation(Component parent, LocalizableMessage msg,
+     LocalizableMessage title)
  {
    return JOptionPane.YES_OPTION == JOptionPane.showOptionDialog(
            parent, wrapMsg(String.valueOf(msg), 100), String.valueOf(title),
@@ -167,7 +168,7 @@
    * @param title
    *          the title for the dialog.
    */
-  public static void displayError(Component parent, Message msg, Message title)
+  public static void displayError(Component parent, LocalizableMessage msg, LocalizableMessage title)
   {
     JOptionPane.showMessageDialog(parent,
             wrapMsg(String.valueOf(msg), 100),
@@ -184,8 +185,8 @@
    * @param title
    *          the title for the dialog.
    */
-  public static void displayInformationMessage(JFrame parent, Message msg,
-      Message title)
+  public static void displayInformationMessage(JFrame parent, LocalizableMessage msg,
+      LocalizableMessage title)
   {
     JOptionPane.showMessageDialog(parent,
             wrapMsg(String.valueOf(msg), 100), String.valueOf(title),
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/WebBrowserErrorDialog.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/WebBrowserErrorDialog.java
index 72b91fd..f3e1ceb 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/WebBrowserErrorDialog.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/ui/WebBrowserErrorDialog.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.quicksetup.ui;
@@ -43,7 +43,7 @@
 
 import org.opends.quicksetup.event.MinimumSizeComponentListener;
 import org.opends.quicksetup.util.WebBrowserException;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 /**
@@ -113,7 +113,7 @@
     Insets pInsets = UIFactory.getCurrentStepPanelInsets();
     gbc.insets.left = 0;
     gbc.fill = GridBagConstraints.BOTH;
-    Message msg = INFO_ERROR_BROWSER_DISPLAY_MSG.get(url);
+    LocalizableMessage msg = INFO_ERROR_BROWSER_DISPLAY_MSG.get(url);
     JTextComponent tf =
         UIFactory.makeHtmlPane(msg,
             UIFactory.ERROR_DIALOG_FONT);
@@ -191,7 +191,7 @@
       WebBrowserErrorDialog dlg =
           new WebBrowserErrorDialog(new JFrame(),
               new WebBrowserException("http://opendj.org",
-                      Message.raw("toto"), null));
+                      LocalizableMessage.raw("toto"), null));
       dlg.packAndShow();
     } catch (Exception ex)
     {
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/FileManager.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/FileManager.java
index 167739f..ef72c06 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/FileManager.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/FileManager.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup.util;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import org.opends.quicksetup.*;
@@ -521,7 +521,7 @@
               }
 
             } catch (Exception e) {
-              Message errMsg = INFO_ERROR_COPYING_FILE.get(
+              LocalizableMessage errMsg = INFO_ERROR_COPYING_FILE.get(
                       objectFile.getAbsolutePath(),
                       destination.getAbsolutePath());
               throw new ApplicationException(
@@ -544,7 +544,7 @@
               }
             }
           } else {
-            Message errMsg = INFO_ERROR_COPYING_FILE.get(
+            LocalizableMessage errMsg = INFO_ERROR_COPYING_FILE.get(
                     objectFile.getAbsolutePath(),
                     destination.getAbsolutePath());
             throw new ApplicationException(
@@ -645,7 +645,7 @@
       }
 
       if (!delete) {
-        Message errMsg;
+        LocalizableMessage errMsg;
         if (isFile) {
           errMsg = INFO_ERROR_DELETING_FILE.get(file.getAbsolutePath());
         } else {
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/HtmlProgressMessageFormatter.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/HtmlProgressMessageFormatter.java
index 3ae67ef..85eec6f 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/HtmlProgressMessageFormatter.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/HtmlProgressMessageFormatter.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.util;
@@ -37,8 +38,8 @@
 import org.opends.quicksetup.Constants;
 
 import static org.opends.messages.QuickSetupMessages.*;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 /**
  * This is an implementation of the ProgressMessageFormatter class that
@@ -50,8 +51,8 @@
   static private final Logger LOG =
           Logger.getLogger(HtmlProgressMessageFormatter.class.getName());
 
-  private Message doneHtml;
-  private Message errorHtml;
+  private LocalizableMessage doneHtml;
+  private LocalizableMessage errorHtml;
 
   /**
    * The constant used to separate parameters in an URL.
@@ -61,17 +62,17 @@
   /**
    * The space in HTML.
    */
-  private static final Message SPACE = Message.raw("&nbsp;");
+  private static final LocalizableMessage SPACE = LocalizableMessage.raw("&nbsp;");
 
   /**
    * The line break.
    * The extra char is necessary because of bug:
    * http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4988885
    */
-   private static final Message LINE_BREAK=
-     Message.raw("&#10;"+Constants.HTML_LINE_BREAK);
+   private static final LocalizableMessage LINE_BREAK=
+     LocalizableMessage.raw("&#10;"+Constants.HTML_LINE_BREAK);
 
-   private static final Message TAB = new MessageBuilder(SPACE)
+   private static final LocalizableMessage TAB = new LocalizableMessageBuilder(SPACE)
    .append(SPACE)
    .append(SPACE)
    .append(SPACE)
@@ -84,9 +85,9 @@
    * representation
    * @return the HTML representation for the given text.
    */
-  public Message getFormattedText(Message text)
+  public LocalizableMessage getFormattedText(LocalizableMessage text)
   {
-    return Message.raw(Utils.getHtml(String.valueOf(text)));
+    return LocalizableMessage.raw(Utils.getHtml(String.valueOf(text)));
   }
 
   /**
@@ -97,9 +98,9 @@
    * representation
    * @return the HTML representation of the summary for the given text.
    */
-  public Message getFormattedSummary(Message text)
+  public LocalizableMessage getFormattedSummary(LocalizableMessage text)
   {
-    return new MessageBuilder("<html>")
+    return new LocalizableMessageBuilder("<html>")
             .append(UIFactory.applyFontToHtml(
                     String.valueOf(text), UIFactory.PROGRESS_FONT))
             .toMessage();
@@ -113,7 +114,7 @@
    * resulting HTML.
    * @return the HTML representation of an error for the given text.
    */
-  public Message getFormattedError(Message text, boolean applyMargin)
+  public LocalizableMessage getFormattedError(LocalizableMessage text, boolean applyMargin)
   {
     String html;
     if (!Utils.containsHtml(String.valueOf(text))) {
@@ -136,7 +137,7 @@
           UIFactory.applyMargin(result,
               UIFactory.TOP_INSET_ERROR_MESSAGE, 0, 0, 0);
     }
-    return Message.raw(result);
+    return LocalizableMessage.raw(result);
   }
 
   /**
@@ -147,7 +148,7 @@
    * resulting HTML.
    * @return the HTML representation of a warning for the given text.
    */
-  public Message getFormattedWarning(Message text, boolean applyMargin)
+  public LocalizableMessage getFormattedWarning(LocalizableMessage text, boolean applyMargin)
   {
     String html;
     if (!Utils.containsHtml(String.valueOf(text))) {
@@ -171,7 +172,7 @@
           UIFactory.applyMargin(result,
               UIFactory.TOP_INSET_ERROR_MESSAGE, 0, 0, 0);
     }
-    return Message.raw(result);
+    return LocalizableMessage.raw(result);
   }
 
   /**
@@ -180,7 +181,7 @@
    * representation
    * @return the HTML representation of a success message for the given text.
    */
-  public Message getFormattedSuccess(Message text)
+  public LocalizableMessage getFormattedSuccess(LocalizableMessage text)
   {
     // Note: the text we get already is in HTML form
     String html =
@@ -188,7 +189,7 @@
         + SPACE + UIFactory.applyFontToHtml(String.valueOf(text),
                 UIFactory.PROGRESS_FONT);
 
-    return Message.raw(UIFactory.applySuccessfulBackgroundToHtml(html));
+    return LocalizableMessage.raw(UIFactory.applySuccessfulBackgroundToHtml(html));
   }
 
   /**
@@ -199,10 +200,10 @@
    * @return the HTML representation of a log error message for the given
    * text.
    */
-  public Message getFormattedLogError(Message text)
+  public LocalizableMessage getFormattedLogError(LocalizableMessage text)
   {
     String html = Utils.getHtml(String.valueOf(text));
-    return Message.raw(UIFactory.applyFontToHtml(html,
+    return LocalizableMessage.raw(UIFactory.applyFontToHtml(html,
         UIFactory.PROGRESS_LOG_ERROR_FONT));
   }
 
@@ -213,10 +214,10 @@
    * representation
    * @return the HTML representation of a log message for the given text.
    */
-  public Message getFormattedLog(Message text)
+  public LocalizableMessage getFormattedLog(LocalizableMessage text)
   {
     String html = Utils.getHtml(String.valueOf(text));
-    return Message.raw(UIFactory.applyFontToHtml(html,
+    return LocalizableMessage.raw(UIFactory.applyFontToHtml(html,
             UIFactory.PROGRESS_LOG_FONT));
   }
 
@@ -224,29 +225,29 @@
    * Returns the HTML representation of the 'Done' text string.
    * @return the HTML representation of the 'Done' text string.
    */
-  public Message getFormattedDone()
+  public LocalizableMessage getFormattedDone()
   {
     if (doneHtml == null)
     {
       String html = Utils.getHtml(INFO_PROGRESS_DONE.get().toString());
-      doneHtml = Message.raw(UIFactory.applyFontToHtml(html,
+      doneHtml = LocalizableMessage.raw(UIFactory.applyFontToHtml(html,
           UIFactory.PROGRESS_DONE_FONT));
     }
-    return Message.raw(doneHtml);
+    return LocalizableMessage.raw(doneHtml);
   }
 
   /**
    * Returns the HTML representation of the 'Error' text string.
    * @return the HTML representation of the 'Error' text string.
    */
-  public Message getFormattedError() {
+  public LocalizableMessage getFormattedError() {
     if (errorHtml == null)
     {
       String html = Utils.getHtml(INFO_PROGRESS_ERROR.get().toString());
-      errorHtml = Message.raw(UIFactory.applyFontToHtml(html,
+      errorHtml = LocalizableMessage.raw(UIFactory.applyFontToHtml(html,
           UIFactory.PROGRESS_ERROR_FONT));
     }
-    return Message.raw(errorHtml);
+    return LocalizableMessage.raw(errorHtml);
   }
 
   /**
@@ -256,13 +257,13 @@
    * @param text the String to which add points.
    * @return the HTML representation of the '.....' text string.
    */
-  public Message getFormattedWithPoints(Message text)
+  public LocalizableMessage getFormattedWithPoints(LocalizableMessage text)
   {
     String html = Utils.getHtml(String.valueOf(text));
     String points = SPACE +
             Utils.getHtml(INFO_PROGRESS_POINTS.get().toString()) + SPACE;
 
-    MessageBuilder buf = new MessageBuilder();
+    LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
     buf.append(UIFactory.applyFontToHtml(html, UIFactory.PROGRESS_FONT))
         .append(
             UIFactory.applyFontToHtml(points, UIFactory.PROGRESS_POINTS_FONT));
@@ -274,9 +275,9 @@
    * Returns the formatted representation of a point.
    * @return the formatted representation of the '.' text string.
    */
-  public Message getFormattedPoint()
+  public LocalizableMessage getFormattedPoint()
   {
-    return Message.raw(UIFactory.applyFontToHtml(".",
+    return LocalizableMessage.raw(UIFactory.applyFontToHtml(".",
         UIFactory.PROGRESS_POINTS_FONT));
   }
 
@@ -284,9 +285,9 @@
    * Returns the formatted representation of a space.
    * @return the formatted representation of the ' ' text string.
    */
-  public Message getSpace()
+  public LocalizableMessage getSpace()
   {
-    return Message.raw(SPACE);
+    return LocalizableMessage.raw(SPACE);
   }
 
   /**
@@ -297,9 +298,9 @@
    * @return the formatted representation of a progress message for the given
    * text.
    */
-  public Message getFormattedProgress(Message text)
+  public LocalizableMessage getFormattedProgress(LocalizableMessage text)
   {
-    return Message.raw(UIFactory.applyFontToHtml(
+    return LocalizableMessage.raw(UIFactory.applyFontToHtml(
         Utils.getHtml(String.valueOf(text)),
         UIFactory.PROGRESS_FONT));
   }
@@ -314,7 +315,7 @@
    * @return the HTML representation of an error message for the given
    * exception.
    */
-  public Message getFormattedError(Throwable t, boolean applyMargin)
+  public LocalizableMessage getFormattedError(Throwable t, boolean applyMargin)
   {
     String openDiv = "<div style=\"margin-left:5px; margin-top:10px\">";
     String hideText =
@@ -366,14 +367,14 @@
     {
       result = UIFactory.applyErrorBackgroundToHtml(html);
     }
-    return Message.raw(result);
+    return LocalizableMessage.raw(result);
   }
 
   /**
    * Returns the line break in HTML.
    * @return the line break in HTML.
    */
-  public Message getLineBreak()
+  public LocalizableMessage getLineBreak()
   {
     return LINE_BREAK;
   }
@@ -382,7 +383,7 @@
    * Returns the tab in HTML.
    * @return the tab in HTML.
    */
-  public Message getTab()
+  public LocalizableMessage getTab()
   {
     return TAB;
   }
@@ -391,9 +392,9 @@
    * Returns the task separator in HTML.
    * @return the task separator in HTML.
    */
-  public Message getTaskSeparator()
+  public LocalizableMessage getTaskSeparator()
   {
-    return Message.raw(UIFactory.HTML_SEPARATOR);
+    return LocalizableMessage.raw(UIFactory.HTML_SEPARATOR);
   }
 
   /**
@@ -405,7 +406,7 @@
    * url.
    * @return the log HTML representation after the user has clicked on a url.
    */
-  public Message getFormattedAfterUrlClick(String url, Message lastText)
+  public LocalizableMessage getFormattedAfterUrlClick(String url, LocalizableMessage lastText)
   {
     String urlText = getErrorWithStackHtml(url, false);
     String newUrlText = getErrorWithStackHtml(url, true);
@@ -422,7 +423,7 @@
           lastTextStr.substring(0, index) + newUrlText
               + lastTextStr.substring(index + urlText.length());
     }
-    return Message.raw(lastTextStr);
+    return LocalizableMessage.raw(lastTextStr);
   }
 
   /**
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/IncompatibleVersionException.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/IncompatibleVersionException.java
index 62f1a3f..b57aa8c 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/IncompatibleVersionException.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/IncompatibleVersionException.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.quicksetup.util;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -42,7 +43,7 @@
    * @param msg the error message.
    * @param rootCause the root cause.
    */
-  public IncompatibleVersionException(Message msg, Throwable rootCause)
+  public IncompatibleVersionException(LocalizableMessage msg, Throwable rootCause)
   {
     super(msg, rootCause);
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/PlainTextProgressMessageFormatter.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/PlainTextProgressMessageFormatter.java
index 9b574f0..d5049ba 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/PlainTextProgressMessageFormatter.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/PlainTextProgressMessageFormatter.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.util;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 import org.opends.quicksetup.Constants;
@@ -41,8 +42,8 @@
 public class PlainTextProgressMessageFormatter
 implements ProgressMessageFormatter
 {
-  private Message doneText;
-  private Message errorText;
+  private LocalizableMessage doneText;
+  private LocalizableMessage errorText;
 
   /**
    * The space in plain text.
@@ -55,7 +56,7 @@
    * representation
    * @return the text representation for the given text.
    */
-  public Message getFormattedText(Message text)
+  public LocalizableMessage getFormattedText(LocalizableMessage text)
   {
     return text;
   }
@@ -68,7 +69,7 @@
    * representation
    * @return the text representation of the summary for the given text.
    */
-  public Message getFormattedSummary(Message text)
+  public LocalizableMessage getFormattedSummary(LocalizableMessage text)
   {
     return text;
   }
@@ -81,12 +82,12 @@
    * resulting formatted text.
    * @return the plain text representation of an error for the given text.
    */
-  public Message getFormattedError(Message text, boolean applyMargin)
+  public LocalizableMessage getFormattedError(LocalizableMessage text, boolean applyMargin)
   {
-    Message result;
+    LocalizableMessage result;
     if (applyMargin)
     {
-      result = new MessageBuilder().append(Constants.LINE_SEPARATOR)
+      result = new LocalizableMessageBuilder().append(Constants.LINE_SEPARATOR)
               .append(text).toMessage();
     } else
     {
@@ -103,12 +104,12 @@
    * resulting formatted text.
    * @return the plain text representation of a warning for the given text.
    */
-  public Message getFormattedWarning(Message text, boolean applyMargin)
+  public LocalizableMessage getFormattedWarning(LocalizableMessage text, boolean applyMargin)
   {
-    Message result;
+    LocalizableMessage result;
     if (applyMargin)
     {
-      result = new MessageBuilder(Constants.LINE_SEPARATOR)
+      result = new LocalizableMessageBuilder(Constants.LINE_SEPARATOR)
               .append(text).toMessage();
     } else
     {
@@ -125,7 +126,7 @@
    * @return the plain text representation of a success message for the given
    * text.
    */
-  public Message getFormattedSuccess(Message text)
+  public LocalizableMessage getFormattedSuccess(LocalizableMessage text)
   {
     return text;
   }
@@ -138,7 +139,7 @@
    * @return the plain text representation of a log error message for the given
    * text.
    */
-  public Message getFormattedLogError(Message text)
+  public LocalizableMessage getFormattedLogError(LocalizableMessage text)
   {
     return text;
   }
@@ -150,7 +151,7 @@
    * representation
    * @return the plain text representation of a log message for the given text.
    */
-  public Message getFormattedLog(Message text)
+  public LocalizableMessage getFormattedLog(LocalizableMessage text)
   {
     return text;
   }
@@ -159,7 +160,7 @@
    * Returns the plain text representation of the 'Done' text string.
    * @return the plain text representation of the 'Done' text string.
    */
-  public Message getFormattedDone()
+  public LocalizableMessage getFormattedDone()
   {
     if (doneText == null)
     {
@@ -172,7 +173,7 @@
    * Returns the plain text representation of the 'Error' text string.
    * @return the plain text representation of the 'Error' text string.
    */
-  public Message getFormattedError()
+  public LocalizableMessage getFormattedError()
   {
     if (errorText == null)
     {
@@ -188,9 +189,9 @@
    * @param text the String to which add points.
    * @return the plain text representation of the '.....' text string.
    */
-  public Message getFormattedWithPoints(Message text)
+  public LocalizableMessage getFormattedWithPoints(LocalizableMessage text)
   {
-    return new MessageBuilder(text).append(SPACE)
+    return new LocalizableMessageBuilder(text).append(SPACE)
             .append(INFO_PROGRESS_POINTS.get()).append(SPACE).toMessage();
   }
 
@@ -198,18 +199,18 @@
    * Returns the formatted representation of a point.
    * @return the formatted representation of the '.' text string.
    */
-  public Message getFormattedPoint()
+  public LocalizableMessage getFormattedPoint()
   {
-    return Message.raw(".");
+    return LocalizableMessage.raw(".");
   }
 
   /**
    * Returns the formatted representation of a space.
    * @return the formatted representation of the ' ' text string.
    */
-  public Message getSpace()
+  public LocalizableMessage getSpace()
   {
-    return Message.raw(SPACE);
+    return LocalizableMessage.raw(SPACE);
   }
 
   /**
@@ -220,7 +221,7 @@
    * @return the formatted representation of a progress message for the given
    * text.
    */
-  public Message getFormattedProgress(Message text)
+  public LocalizableMessage getFormattedProgress(LocalizableMessage text)
   {
     return text;
   }
@@ -236,7 +237,7 @@
    * @return the plain text representation of an error message for the given
    * exception.
    */
-  public Message getFormattedError(Throwable t, boolean applyMargin)
+  public LocalizableMessage getFormattedError(Throwable t, boolean applyMargin)
   {
     String msg = t.getMessage();
     if (msg == null)
@@ -251,34 +252,34 @@
     {
       result = msg;
     }
-    return Message.raw(result);
+    return LocalizableMessage.raw(result);
   }
 
   /**
    * Returns the line break in plain text.
    * @return the line break in plain text.
    */
-  public Message getLineBreak()
+  public LocalizableMessage getLineBreak()
   {
-    return Message.raw(Constants.LINE_SEPARATOR);
+    return LocalizableMessage.raw(Constants.LINE_SEPARATOR);
   }
 
   /**
    * Returns the tab in plain text.
    * @return the tab in plain text.
    */
-  public Message getTab()
+  public LocalizableMessage getTab()
   {
-    return Message.raw("     ");
+    return LocalizableMessage.raw("     ");
   }
 
   /**
    * Returns the task separator in plain text.
    * @return the task separator in plain text.
    */
-  public Message getTaskSeparator()
+  public LocalizableMessage getTaskSeparator()
   {
-    return Message.raw(
+    return LocalizableMessage.raw(
         Constants.LINE_SEPARATOR+
         "-----------------------------------------------------------------"+
         Constants.LINE_SEPARATOR+Constants.LINE_SEPARATOR);
@@ -287,7 +288,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getFormattedAfterUrlClick(String url, Message lastText)
+  public LocalizableMessage getFormattedAfterUrlClick(String url, LocalizableMessage lastText)
   {
     throw new IllegalStateException(
         "PlainTextProgressMessageFormatter.getFormattedAfterUrlClick must not "+
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ProgressMessageFormatter.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ProgressMessageFormatter.java
index 5af02e5..d830800 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ProgressMessageFormatter.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ProgressMessageFormatter.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.util;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This interface has been created in order to share the same formatting code
@@ -47,7 +48,7 @@
    * representation
    * @return the formatted representation for the given text.
    */
-  public Message getFormattedText(Message text);
+  public LocalizableMessage getFormattedText(LocalizableMessage text);
 
   /**
    * Returns the formatted representation of the text that is the summary of the
@@ -57,7 +58,7 @@
    * representation
    * @return the formatted representation of a summary for the given text.
    */
-  public Message getFormattedSummary(Message text);
+  public LocalizableMessage getFormattedSummary(LocalizableMessage text);
 
   /**
    * Returns the formatted representation of an error for a given text.
@@ -67,7 +68,7 @@
    * resulting formatted text.
    * @return the formatted representation of an error for the given text.
    */
-  public Message getFormattedError(Message text, boolean applyMargin);
+  public LocalizableMessage getFormattedError(LocalizableMessage text, boolean applyMargin);
 
   /**
    * Returns the formatted representation of a warning for a given text.
@@ -77,7 +78,7 @@
    * resulting formatted text.
    * @return the formatted representation of a warning for the given text.
    */
-  public Message getFormattedWarning(Message text, boolean applyMargin);
+  public LocalizableMessage getFormattedWarning(LocalizableMessage text, boolean applyMargin);
 
   /**
    * Returns the formatted representation of a success message for a given text.
@@ -86,7 +87,7 @@
    * @return the formatted representation of a success message for the given
    * text.
    */
-  public Message getFormattedSuccess(Message text);
+  public LocalizableMessage getFormattedSuccess(LocalizableMessage text);
 
   /**
    * Returns the formatted representation of a log error message for a given
@@ -96,7 +97,7 @@
    * @return the formatted representation of a log error message for the given
    * text.
    */
-  public Message getFormattedLogError(Message text);
+  public LocalizableMessage getFormattedLogError(LocalizableMessage text);
 
   /**
    * Returns the formatted representation of a log message for a given text.
@@ -104,19 +105,19 @@
    * representation
    * @return the formatted representation of a log message for the given text.
    */
-  public Message getFormattedLog(Message text);
+  public LocalizableMessage getFormattedLog(LocalizableMessage text);
 
   /**
    * Returns the formatted representation of the 'Done' text string.
    * @return the formatted representation of the 'Done' text string.
    */
-  public Message getFormattedDone();
+  public LocalizableMessage getFormattedDone();
 
   /**
    * Returns the formatted representation of the 'Error' text string.
    * @return the formatted representation of the 'Error' text string.
    */
-  public Message getFormattedError();
+  public LocalizableMessage getFormattedError();
 
   /**
    * Returns the formatted representation of the argument text to which we add
@@ -125,20 +126,20 @@
    * @param text the String to which add points.
    * @return the formatted representation of the '.....' text string.
    */
-  public Message getFormattedWithPoints(Message text);
+  public LocalizableMessage getFormattedWithPoints(LocalizableMessage text);
 
 
   /**
    * Returns the formatted representation of a point.
    * @return the formatted representation of the '.' text string.
    */
-  public Message getFormattedPoint();
+  public LocalizableMessage getFormattedPoint();
 
   /**
    * Returns the formatted representation of a space.
    * @return the formatted representation of the ' ' text string.
    */
-  public Message getSpace();
+  public LocalizableMessage getSpace();
 
   /**
    * Returns the formatted representation of a progress message for a given
@@ -148,7 +149,7 @@
    * @return the formatted representation of a progress message for the given
    * text.
    */
-  public Message getFormattedProgress(Message text);
+  public LocalizableMessage getFormattedProgress(LocalizableMessage text);
 
   /**
    * Returns the formatted representation of an error message for a given
@@ -161,25 +162,25 @@
    * @return the formatted representation of an error message for the given
    * exception.
    */
-  public Message getFormattedError(Throwable t, boolean applyMargin);
+  public LocalizableMessage getFormattedError(Throwable t, boolean applyMargin);
 
   /**
    * Returns the line break formatted.
    * @return the line break formatted.
    */
-  public Message getLineBreak();
+  public LocalizableMessage getLineBreak();
 
   /**
    * Returns the tab formatted.
    * @return the tab formatted.
    */
-  public Message getTab();
+  public LocalizableMessage getTab();
 
   /**
    * Returns the task separator formatted.
    * @return the task separator formatted.
    */
-  public Message getTaskSeparator();
+  public LocalizableMessage getTaskSeparator();
 
   /**
    * Returns the log formatted representation after the user has clicked on a
@@ -191,5 +192,5 @@
    * @return the formatted progress log representation after the user has
    * clicked on a url.
    */
-  public Message getFormattedAfterUrlClick(String url, Message lastText);
+  public LocalizableMessage getFormattedAfterUrlClick(String url, LocalizableMessage lastText);
 }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ServerController.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ServerController.java
index c2da742..b88af60 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ServerController.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ServerController.java
@@ -22,14 +22,14 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.util;
 
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import org.opends.quicksetup.*;
@@ -139,7 +139,7 @@
 
     try {
       if (application != null) {
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         mb.append(application.getFormattedProgress(
                         INFO_PROGRESS_STOPPING.get()));
         mb.append(application.getLineBreak());
@@ -225,7 +225,7 @@
 
                 if (!stopped) {
                   if (application != null) {
-                    MessageBuilder mb = new MessageBuilder();
+                    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
                     mb.append(application.getFormattedLog(
                         INFO_PROGRESS_SERVER_WAITING_TO_STOP.get()));
                     mb.append(application.getLineBreak());
@@ -243,7 +243,7 @@
 
           if (returnValue == clientSideError) {
             if (application != null) {
-              MessageBuilder mb = new MessageBuilder();
+              LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
               mb.append(application.getLineBreak());
               mb.append(application.getFormattedLog(
                   INFO_PROGRESS_SERVER_ALREADY_STOPPED.get()));
@@ -335,7 +335,7 @@
 
     try {
       if (application != null) {
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         mb.append(application.getFormattedProgress(
             INFO_PROGRESS_STARTING.get()));
         mb.append(application.getLineBreak());
@@ -578,7 +578,7 @@
      */
     public StopReader(final BufferedReader reader,
                                       final boolean isError) {
-      final Message errorTag =
+      final LocalizableMessage errorTag =
               isError ?
                       INFO_ERROR_READING_ERROROUTPUT.get() :
                       INFO_ERROR_READING_OUTPUT.get();
@@ -590,17 +590,17 @@
             String line = reader.readLine();
             while (line != null) {
               if (application != null) {
-                MessageBuilder buf = new MessageBuilder();
+                LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
                 if (!isFirstLine) {
                   buf.append(application.getProgressMessageFormatter().
                           getLineBreak());
                 }
                 if (isError) {
                   buf.append(application.getFormattedLogError(
-                          Message.raw(line)));
+                          LocalizableMessage.raw(line)));
                 } else {
                   buf.append(application.getFormattedLog(
-                          Message.raw(line)));
+                          LocalizableMessage.raw(line)));
                 }
                 application.notifyListeners(buf.toMessage());
                 isFirstLine = false;
@@ -610,7 +610,7 @@
             }
           } catch (Throwable t) {
             if (application != null) {
-              Message errorMsg = getThrowableMsg(errorTag, t);
+              LocalizableMessage errorMsg = getThrowableMsg(errorTag, t);
               application.notifyListeners(errorMsg);
             }
             LOG.log(Level.INFO, "error reading server messages",t);
@@ -622,8 +622,8 @@
   }
 
   /**
-   * Returns the Message ID indicating that the server has started.
-   * @return the Message ID indicating that the server has started.
+   * Returns the LocalizableMessage ID indicating that the server has started.
+   * @return the LocalizableMessage ID indicating that the server has started.
    */
   private String getStartedId()
   {
@@ -660,7 +660,7 @@
     public StartReader(final BufferedReader reader, final String startedId,
         final boolean isError)
     {
-      final Message errorTag =
+      final LocalizableMessage errorTag =
               isError ?
                       INFO_ERROR_READING_ERROROUTPUT.get() :
                       INFO_ERROR_READING_OUTPUT.get();
@@ -677,7 +677,7 @@
             while (line != null)
             {
               if (application != null) {
-                MessageBuilder buf = new MessageBuilder();
+                LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
                 if (!isFirstLine)
                 {
                   buf.append(application.getProgressMessageFormatter().
@@ -686,11 +686,11 @@
                 if (isError)
                 {
                   buf.append(application.getFormattedLogError(
-                          Message.raw(line)));
+                          LocalizableMessage.raw(line)));
                 } else
                 {
                   buf.append(application.getFormattedLog(
-                          Message.raw(line)));
+                          LocalizableMessage.raw(line)));
                 }
                 application.notifyListeners(buf.toMessage());
                 isFirstLine = false;
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/URLWorker.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/URLWorker.java
index 3a2bd38..216e617 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/URLWorker.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/URLWorker.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.util;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import javax.swing.JFrame;
 
@@ -74,7 +75,7 @@
     } catch (Throwable t)
     {
       // TODO: i18n
-      throw new WebBrowserException(url, Message.raw("Bug: throwable"), t);
+      throw new WebBrowserException(url, LocalizableMessage.raw("Bug: throwable"), t);
     }
     return null;
   }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/Utils.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/Utils.java
index 62740c6..a614675 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/Utils.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/Utils.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.util;
 
@@ -67,9 +67,9 @@
 import org.opends.admin.ads.SuffixDescriptor;
 import org.opends.admin.ads.TopologyCacheException;
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.MessageDescriptor;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
+import org.forgerock.i18n.LocalizableMessageDescriptor;
 import org.opends.quicksetup.*;
 import org.opends.quicksetup.installer.AuthenticationData;
 import org.opends.quicksetup.installer.DataReplicationOptions;
@@ -631,8 +631,8 @@
   }
 
   /**
-   * This is a helper method that gets a Message representation of the elements
-   * in the Collection of Messages. The Message will display the different
+   * This is a helper method that gets a LocalizableMessage representation of the elements
+   * in the Collection of Messages. The LocalizableMessage will display the different
    * elements separated by the separator String.
    *
    * @param col
@@ -642,19 +642,19 @@
    * @return the message representation for the collection;
    *          null if <code>col</code> is null
    */
-  public static Message getMessageFromCollection(Collection<Message> col,
+  public static LocalizableMessage getMessageFromCollection(Collection<LocalizableMessage> col,
                                                  String separator) {
-    Message message = null;
+    LocalizableMessage message = null;
     if (col != null) {
-      MessageBuilder mb = null;
-      for (Message m : col) {
+      LocalizableMessageBuilder mb = null;
+      for (LocalizableMessage m : col) {
         if (mb == null) {
-          mb = new MessageBuilder(m);
+          mb = new LocalizableMessageBuilder(m);
         } else {
           mb.append(separator).append(m);
         }
       }
-      if (mb == null) mb = new MessageBuilder();
+      if (mb == null) mb = new LocalizableMessageBuilder();
       message = mb.toMessage();
     }
     return message;
@@ -742,10 +742,10 @@
    *
    * @return a localized message for a given properties key and throwable.
    */
-  public static Message getThrowableMsg(Message message, Throwable t)
+  public static LocalizableMessage getThrowableMsg(LocalizableMessage message, Throwable t)
   {
-    MessageBuilder mb = new MessageBuilder(message);
-    MessageDescriptor.Arg1<CharSequence> tag;
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder(message);
+    LocalizableMessageDescriptor.Arg1<CharSequence> tag;
     if (isOutOfMemory(t))
     {
       tag = INFO_EXCEPTION_OUT_OF_MEMORY_DETAILS;
@@ -767,9 +767,9 @@
    * @param te the exception.
    * @return a localized representation of the provide TopologyCacheException.
    */
-  public static Message getMessage(TopologyCacheException te)
+  public static LocalizableMessage getMessage(TopologyCacheException te)
   {
-    MessageBuilder buf = new MessageBuilder();
+    LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
 
     String ldapUrl = te.getLdapUrl();
     if (ldapUrl != null)
@@ -1007,10 +1007,10 @@
    * contacting when the NamingException occurred.
    * @return a message object for the given NamingException.
    */
-  public static Message getMessageForException(NamingException ne,
+  public static LocalizableMessage getMessageForException(NamingException ne,
       String hostPort)
   {
-    Message msg;
+    LocalizableMessage msg;
     String arg;
     if (ne.getLocalizedMessage() != null)
     {
@@ -1060,9 +1060,9 @@
    * @param ne the NamingException.
    * @return a message object for the given NamingException.
    */
-  public static Message getMessageForException(NamingException ne)
+  public static LocalizableMessage getMessageForException(NamingException ne)
   {
-    Message msg;
+    LocalizableMessage msg;
     if (Utils.isCertificateException(ne))
     {
       msg = INFO_ERROR_READING_CONFIG_LDAP_CERTIFICATE.get(ne.toString(true));
@@ -1223,7 +1223,7 @@
    * @param appName
    *          application name to display in the menu bar and the dock.
    */
-  public static void setMacOSXMenuBar(Message appName)
+  public static void setMacOSXMenuBar(LocalizableMessage appName)
   {
     System.setProperty("apple.laf.useScreenMenuBar", "true");
     System.setProperty("com.apple.mrj.application.apple.menu.about.name",
@@ -1756,7 +1756,7 @@
    */
   public static String getDataDisplayString(UserData userInstallData)
   {
-    Message msg;
+    LocalizableMessage msg;
 
     DataReplicationOptions repl =
       userInstallData.getReplicationOptions();
@@ -1771,7 +1771,7 @@
 
     if (createSuffix)
     {
-      Message arg2;
+      LocalizableMessage arg2;
 
       NewSuffixOptions options = userInstallData.getNewSuffixOptions();
 
@@ -1883,7 +1883,7 @@
       {
         buf.append("\n");
       }
-      Message certMsg;
+      LocalizableMessage certMsg;
       switch (ops.getCertificateType())
       {
       case SELF_SIGNED_CERTIFICATE:
@@ -1935,7 +1935,7 @@
       ProgressMessageFormatter formatter)
   {
     StringBuilder builder = new StringBuilder();
-    builder.append(formatter.getFormattedProgress(Message.raw(cmd.get(0))));
+    builder.append(formatter.getFormattedProgress(LocalizableMessage.raw(cmd.get(0))));
     int initialIndex = 1;
     StringBuilder sbSeparator = new StringBuilder();
     sbSeparator.append(formatter.getSpace());
@@ -1956,12 +1956,12 @@
       if (s.startsWith("-"))
       {
         builder.append(lineSeparator);
-        builder.append(formatter.getFormattedProgress(Message.raw(s)));
+        builder.append(formatter.getFormattedProgress(LocalizableMessage.raw(s)));
       }
       else
       {
         builder.append(formatter.getSpace());
-        builder.append(formatter.getFormattedProgress(Message.raw(
+        builder.append(formatter.getFormattedProgress(LocalizableMessage.raw(
             escapeCommandLineValue(s))));
       }
     }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/WebBrowserException.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/WebBrowserException.java
index a737538..3e0beff 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/WebBrowserException.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/WebBrowserException.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.util;
 
 import org.opends.server.types.OpenDsException;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This class is the exception that we get when we try to launch the user web
@@ -46,7 +47,7 @@
    * @param msg the error message.
    * @param rootCause the root cause.
    */
-  public WebBrowserException(String url, Message msg, Throwable rootCause)
+  public WebBrowserException(String url, LocalizableMessage msg, Throwable rootCause)
   {
     super(msg, rootCause);
     this.url = url;
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/WebBrowserLauncher.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/WebBrowserLauncher.java
index 57af87f..3247ecd 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/WebBrowserLauncher.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/WebBrowserLauncher.java
@@ -22,11 +22,11 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup.util;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
@@ -79,7 +79,7 @@
         if (browser == null)
         {
           throw new WebBrowserException(url, // TODO: i18n
-                  Message.raw("Could not find web browser"),
+                  LocalizableMessage.raw("Could not find web browser"),
                   null);
         } else
         {
@@ -90,27 +90,27 @@
     } catch (ClassNotFoundException cnfe)
     {
       throw new WebBrowserException(url, // TODO: i18n
-              Message.raw("Class Not Found Exception"), cnfe);
+              LocalizableMessage.raw("Class Not Found Exception"), cnfe);
     } catch (IOException ioe)
     {
       throw new WebBrowserException(url, // TODO: i18n
-              Message.raw("IO Exception"), ioe);
+              LocalizableMessage.raw("IO Exception"), ioe);
     } catch (InterruptedException ie)
     {
       throw new WebBrowserException(url, // TODO: i18n
-              Message.raw("Interrupted Exception"), ie);
+              LocalizableMessage.raw("Interrupted Exception"), ie);
     } catch (NoSuchMethodException nsme)
     {
       throw new WebBrowserException(url, // TODO: i18n
-              Message.raw("No Such Method Exception"), nsme);
+              LocalizableMessage.raw("No Such Method Exception"), nsme);
     } catch (InvocationTargetException ite)
     {
       throw new WebBrowserException(url, // TODO: i18n
-              Message.raw("Invocation Target Exception"), ite);
+              LocalizableMessage.raw("Invocation Target Exception"), ite);
     } catch (IllegalAccessException iae)
     {
       throw new WebBrowserException(url, // TODO: i18n
-              Message.raw("Illegal Access Exception"), iae);
+              LocalizableMessage.raw("Illegal Access Exception"), iae);
     }
   }
 }
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java
index cbb103f..54d3323 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/util/ZipExtractor.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.quicksetup.util;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.QuickSetupMessages.*;
 
 import org.opends.quicksetup.ApplicationException;
@@ -210,7 +210,7 @@
                     ratioBeforeCompleted, ratioWhenCompleted, permissions);
 
           } catch (IOException ioe) {
-            Message errorMsg =
+            LocalizableMessage errorMsg =
                     Utils.getThrowableMsg(
                             INFO_ERROR_COPYING.get(entry.getName()), ioe);
 
@@ -247,7 +247,7 @@
       }
 
     } catch (IOException ioe) {
-      Message errorMsg =
+      LocalizableMessage errorMsg =
               Utils.getThrowableMsg(
                       INFO_ERROR_ZIP_STREAM.get(zipFileName), ioe);
       throw new ApplicationException(
@@ -275,7 +275,7 @@
       throws IOException
   {
     if (application != null) {
-      Message progressSummary =
+      LocalizableMessage progressSummary =
               INFO_PROGRESS_EXTRACTING.get(Utils.getPath(destination));
       if (application.isVerbose())
       {
diff --git a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java
index ea1b82f..aa708b0 100644
--- a/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java
+++ b/opendj3-server-dev/src/quicksetup/org/opends/quicksetup/webstart/WebStartDownloader.java
@@ -22,11 +22,11 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.quicksetup.webstart;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -79,7 +79,7 @@
 
   private Status status = Status.DOWNLOADING;
 
-  private Message summary = null;
+  private LocalizableMessage summary = null;
 
   /**
    * This enumeration contains the different Status on which
@@ -170,7 +170,7 @@
    * Gets a summary message of the downloader's current progress.
    * @return String for showing the user progress
    */
-  public Message getSummary() {
+  public LocalizableMessage getSummary() {
     return this.summary;
   }
 
@@ -178,7 +178,7 @@
    * Sets a summary message of the downloader's current progress.
    * @param summary String for showing the user progress
    */
-  public void setSummary(Message summary) {
+  public void setSummary(LocalizableMessage summary) {
     this.summary = summary;
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java b/opendj3-server-dev/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
index df10832..ec9f288 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/AbstractManagedObjectDefinition.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
@@ -42,7 +43,7 @@
 import java.util.Set;
 
 import java.util.Vector;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.DefinitionDecodingException.Reason;
 
 
@@ -432,7 +433,7 @@
    *           If this managed object definition is the
    *           {@link TopCfgDefn}.
    */
-  public final Message getDescription() throws UnsupportedOperationException {
+  public final LocalizableMessage getDescription() throws UnsupportedOperationException {
     return getDescription(Locale.getDefault());
   }
 
@@ -451,7 +452,7 @@
    *           If this managed object definition is the
    *           {@link TopCfgDefn}.
    */
-  public final Message getDescription(Locale locale)
+  public final LocalizableMessage getDescription(Locale locale)
       throws UnsupportedOperationException {
     try {
       return ManagedObjectDefinitionI18NResource.getInstance()
@@ -668,7 +669,7 @@
    *           If this managed object definition is the
    *           {@link TopCfgDefn}.
    */
-  public final Message getSynopsis() throws UnsupportedOperationException {
+  public final LocalizableMessage getSynopsis() throws UnsupportedOperationException {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -686,7 +687,7 @@
    *           If this managed object definition is the
    *           {@link TopCfgDefn}.
    */
-  public final Message getSynopsis(Locale locale)
+  public final LocalizableMessage getSynopsis(Locale locale)
       throws UnsupportedOperationException {
     return ManagedObjectDefinitionI18NResource.getInstance()
         .getMessage(this, "synopsis", locale);
@@ -704,7 +705,7 @@
    *           If this managed object definition is the
    *           {@link TopCfgDefn}.
    */
-  public final Message getUserFriendlyName()
+  public final LocalizableMessage getUserFriendlyName()
       throws UnsupportedOperationException {
     return getUserFriendlyName(Locale.getDefault());
   }
@@ -723,10 +724,10 @@
    *           If this managed object definition is the
    *           {@link TopCfgDefn}.
    */
-  public final Message getUserFriendlyName(Locale locale)
+  public final LocalizableMessage getUserFriendlyName(Locale locale)
       throws UnsupportedOperationException {
-    // TODO: have admin framework getMessage return a Message
-    return Message.raw(ManagedObjectDefinitionI18NResource.getInstance()
+    // TODO: have admin framework getMessage return a LocalizableMessage
+    return LocalizableMessage.raw(ManagedObjectDefinitionI18NResource.getInstance()
         .getMessage(this, "user-friendly-name", locale));
   }
 
@@ -742,7 +743,7 @@
    *           If this managed object definition is the
    *           {@link TopCfgDefn}.
    */
-  public final Message getUserFriendlyPluralName()
+  public final LocalizableMessage getUserFriendlyPluralName()
       throws UnsupportedOperationException {
     return getUserFriendlyPluralName(Locale.getDefault());
   }
@@ -761,7 +762,7 @@
    *           If this managed object definition is the
    *           {@link TopCfgDefn}.
    */
-  public final Message getUserFriendlyPluralName(Locale locale)
+  public final LocalizableMessage getUserFriendlyPluralName(Locale locale)
       throws UnsupportedOperationException {
     return ManagedObjectDefinitionI18NResource.getInstance()
         .getMessage(this, "user-friendly-plural-name", locale);
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/AdminException.java b/opendj3-server-dev/src/server/org/opends/server/admin/AdminException.java
index d693263..499ce4c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/AdminException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/AdminException.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.OpenDsException;
 
@@ -54,7 +55,7 @@
    * @param cause
    *          The cause.
    */
-  protected AdminException(Message message, Throwable cause) {
+  protected AdminException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
@@ -66,7 +67,7 @@
    * @param message
    *          The message.
    */
-  protected AdminException(Message message) {
+  protected AdminException(LocalizableMessage message) {
     super(message);
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/AdministrationConnector.java b/opendj3-server-dev/src/server/org/opends/server/admin/AdministrationConnector.java
index ea9e3a4..a309ccf 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/AdministrationConnector.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/AdministrationConnector.java
@@ -22,14 +22,13 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.admin;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import static org.opends.messages.AdminMessages.*;
-
 import java.io.File;
 import java.io.FileWriter;
 import java.io.PrintWriter;
@@ -38,11 +37,10 @@
 import java.util.List;
 import java.util.SortedSet;
 import java.util.TreeSet;
-
 import javax.naming.ldap.Rdn;
 
 import org.forgerock.opendj.ldap.AddressMask;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ServerManagementContext;
 import org.opends.server.admin.std.meta.LDAPConnectionHandlerCfgDefn.
@@ -220,7 +218,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       AdministrationConnectorCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     LDAPConnectionHandlerCfg cfg = new FakeLDAPConnectionHandlerCfg(
         configuration);
@@ -237,7 +235,7 @@
       AdministrationConnectorCfg configuration)
   {
     return new ConfigChangeResult(ResultCode.SUCCESS, true,
-        new ArrayList<Message>());
+        new ArrayList<LocalizableMessage>());
   }
 
 
@@ -678,7 +676,7 @@
         {
           err += pinFilePath + " ";
         }
-        Message message = ERR_ADMIN_CERTIFICATE_GENERATION_MISSING_FILES
+        LocalizableMessage message = ERR_ADMIN_CERTIFICATE_GENERATION_MISSING_FILES
             .get(err);
         logError(message);
         throw new InitializationException(message);
@@ -730,7 +728,7 @@
               new FilePermission(0600)))
           {
             // Log a warning that the permissions were not set.
-            Message message = WARN_ADMIN_SET_PERMISSIONS_FAILED
+            LocalizableMessage message = WARN_ADMIN_SET_PERMISSIONS_FAILED
                 .get(pinFilePath);
             ErrorLogger.logError(message);
           }
@@ -738,7 +736,7 @@
         catch (DirectoryException e)
         {
           // Log a warning that the permissions were not set.
-          Message message = WARN_ADMIN_SET_PERMISSIONS_FAILED.get(pinFilePath);
+          LocalizableMessage message = WARN_ADMIN_SET_PERMISSIONS_FAILED.get(pinFilePath);
           ErrorLogger.logError(message);
         }
       }
@@ -757,7 +755,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = ERR_ADMIN_CERTIFICATE_GENERATION.get(e.getMessage());
+      LocalizableMessage message = ERR_ADMIN_CERTIFICATE_GENERATION.get(e.getMessage());
       logError(message);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/AdministratorAction.java b/opendj3-server-dev/src/server/org/opends/server/admin/AdministratorAction.java
index b465e96..2709ea4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/AdministratorAction.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/AdministratorAction.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -149,7 +150,7 @@
    *         default locale, or <code>null</code> if there is no
    *         synopsis defined.
    */
-  public final Message getSynopsis() {
+  public final LocalizableMessage getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -165,7 +166,7 @@
    *         specified locale, or <code>null</code> if there is no
    *         synopsis defined.
    */
-  public final Message getSynopsis(Locale locale) {
+  public final LocalizableMessage getSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + propertyName
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/AggregationPropertyDefinition.java b/opendj3-server-dev/src/server/org/opends/server/admin/AggregationPropertyDefinition.java
index d9a3a9a..8012b77 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/AggregationPropertyDefinition.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/AggregationPropertyDefinition.java
@@ -44,7 +44,7 @@
 import java.util.MissingResourceException;
 import java.util.SortedSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.client.AuthorizationException;
 import org.opends.server.admin.client.ClientConstraintHandler;
 import org.opends.server.admin.client.CommunicationException;
@@ -256,7 +256,7 @@
 
     // The error message which should be returned if an attempt is
     // made to disable the referenced component.
-    private final Message message;
+    private final LocalizableMessage message;
 
     // The path of the referenced component.
     private final ManagedObjectPath<C, S> path;
@@ -265,7 +265,7 @@
 
     // Creates a new referential integrity delete listener.
     private ReferentialIntegrityChangeListener(ManagedObjectPath<C, S> path,
-        Message message) {
+        LocalizableMessage message) {
       this.path = path;
       this.message = message;
     }
@@ -299,7 +299,7 @@
      */
     public boolean isConfigurationChangeAcceptable(
         ServerManagedObject<? extends S> mo,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       // Always prevent the referenced component from being
       // disabled.
       try {
@@ -315,7 +315,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_REFINT_UNABLE_TO_EVALUATE_TARGET_CONDITION.get(mo
+        LocalizableMessage message = ERR_REFINT_UNABLE_TO_EVALUATE_TARGET_CONDITION.get(mo
             .getManagedObjectDefinition().getUserFriendlyName(), String
             .valueOf(mo.getDN()), StaticUtils.getExceptionMessage(e));
         ErrorLogger.logError(message);
@@ -347,12 +347,12 @@
 
     // The error message which should be returned if an attempt is
     // made to delete the referenced component.
-    private final Message message;
+    private final LocalizableMessage message;
 
 
 
     // Creates a new referential integrity delete listener.
-    private ReferentialIntegrityDeleteListener(DN dn, Message message) {
+    private ReferentialIntegrityDeleteListener(DN dn, LocalizableMessage message) {
       this.dn = dn;
       this.message = message;
     }
@@ -383,7 +383,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationDeleteAcceptable(S configuration,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       if (configuration.dn().equals(dn)) {
         // Always prevent deletion of the referenced component.
         unacceptableReasons.add(message);
@@ -407,14 +407,14 @@
      */
     @Override
     public boolean isUsable(ServerManagedObject<?> managedObject,
-        Collection<Message> unacceptableReasons) throws ConfigException {
+        Collection<LocalizableMessage> unacceptableReasons) throws ConfigException {
       SortedSet<String> names = managedObject
           .getPropertyValues(AggregationPropertyDefinition.this);
       ServerManagementContext context = ServerManagementContext.getInstance();
-      Message thisUFN = managedObject.getManagedObjectDefinition()
+      LocalizableMessage thisUFN = managedObject.getManagedObjectDefinition()
           .getUserFriendlyName();
       String thisDN = managedObject.getDN().toString();
-      Message thatUFN = getRelationDefinition().getUserFriendlyName();
+      LocalizableMessage thatUFN = getRelationDefinition().getUserFriendlyName();
 
       boolean isUsable = true;
       boolean needsEnabling = targetNeedsEnablingCondition
@@ -424,7 +424,7 @@
         String thatDN = path.toDN().toString();
 
         if (!context.managedObjectExists(path)) {
-          Message msg = ERR_SERVER_REFINT_DANGLING_REFERENCE.get(name,
+          LocalizableMessage msg = ERR_SERVER_REFINT_DANGLING_REFERENCE.get(name,
               getName(), thisUFN, thisDN, thatUFN, thatDN);
           unacceptableReasons.add(msg);
           isUsable = false;
@@ -433,7 +433,7 @@
           // required.
           ServerManagedObject<? extends S> ref = context.getManagedObject(path);
           if (!targetIsEnabledCondition.evaluate(ref)) {
-            Message msg = ERR_SERVER_REFINT_TARGET_DISABLED.get(name,
+            LocalizableMessage msg = ERR_SERVER_REFINT_TARGET_DISABLED.get(name,
                 getName(), thisUFN, thisDN, thatUFN, thatDN);
             unacceptableReasons.add(msg);
             isUsable = false;
@@ -461,10 +461,10 @@
 
       // Add change and delete listeners against all referenced
       // components.
-      Message thisUFN = managedObject.getManagedObjectDefinition()
+      LocalizableMessage thisUFN = managedObject.getManagedObjectDefinition()
           .getUserFriendlyName();
       String thisDN = managedObject.getDN().toString();
-      Message thatUFN = getRelationDefinition().getUserFriendlyName();
+      LocalizableMessage thatUFN = getRelationDefinition().getUserFriendlyName();
 
       // Referenced managed objects will only need a change listener
       // if they have can be disabled.
@@ -493,7 +493,7 @@
         String thatDN = dn.toString();
 
         // Register the delete listener.
-        Message msg = ERR_SERVER_REFINT_CANNOT_DELETE.get(thatUFN, thatDN,
+        LocalizableMessage msg = ERR_SERVER_REFINT_CANNOT_DELETE.get(thatUFN, thatDN,
             getName(), thisUFN, thisDN);
         ReferentialIntegrityDeleteListener dl =
           new ReferentialIntegrityDeleteListener(dn, msg);
@@ -577,7 +577,7 @@
      */
     @Override
     public boolean isAddAcceptable(ManagementContext context,
-        ManagedObject<?> managedObject, Collection<Message> unacceptableReasons)
+        ManagedObject<?> managedObject, Collection<LocalizableMessage> unacceptableReasons)
         throws AuthorizationException, CommunicationException {
       // If all of this managed object's "enabled" properties are true
       // then any referenced managed objects must also be enabled.
@@ -587,7 +587,7 @@
       // Check the referenced managed objects exist and, if required,
       // are enabled.
       boolean isAcceptable = true;
-      Message ufn = getRelationDefinition().getUserFriendlyName();
+      LocalizableMessage ufn = getRelationDefinition().getUserFriendlyName();
       for (String name : managedObject
           .getPropertyValues(AggregationPropertyDefinition.this)) {
         // Retrieve the referenced managed object and make sure it
@@ -597,19 +597,19 @@
         try {
           ref = context.getManagedObject(path);
         } catch (DefinitionDecodingException e) {
-          Message msg = ERR_CLIENT_REFINT_TARGET_INVALID.get(ufn, name,
+          LocalizableMessage msg = ERR_CLIENT_REFINT_TARGET_INVALID.get(ufn, name,
               getName(), e.getMessageObject());
           unacceptableReasons.add(msg);
           isAcceptable = false;
           continue;
         } catch (ManagedObjectDecodingException e) {
-          Message msg = ERR_CLIENT_REFINT_TARGET_INVALID.get(ufn, name,
+          LocalizableMessage msg = ERR_CLIENT_REFINT_TARGET_INVALID.get(ufn, name,
               getName(), e.getMessageObject());
           unacceptableReasons.add(msg);
           isAcceptable = false;
           continue;
         } catch (ManagedObjectNotFoundException e) {
-          Message msg = ERR_CLIENT_REFINT_TARGET_DANGLING_REFERENCE.get(ufn,
+          LocalizableMessage msg = ERR_CLIENT_REFINT_TARGET_DANGLING_REFERENCE.get(ufn,
               name, getName());
           unacceptableReasons.add(msg);
           isAcceptable = false;
@@ -619,7 +619,7 @@
         // Make sure the reference managed object is enabled.
         if (needsEnabling) {
           if (!targetIsEnabledCondition.evaluate(context, ref)) {
-            Message msg = ERR_CLIENT_REFINT_TARGET_DISABLED.get(ufn, name,
+            LocalizableMessage msg = ERR_CLIENT_REFINT_TARGET_DISABLED.get(ufn, name,
                 getName());
             unacceptableReasons.add(msg);
             isAcceptable = false;
@@ -636,7 +636,7 @@
      */
     @Override
     public boolean isModifyAcceptable(ManagementContext context,
-        ManagedObject<?> managedObject, Collection<Message> unacceptableReasons)
+        ManagedObject<?> managedObject, Collection<LocalizableMessage> unacceptableReasons)
         throws AuthorizationException, CommunicationException {
       // The same constraint applies as for adds.
       return isAddAcceptable(context, managedObject, unacceptableReasons);
@@ -658,7 +658,7 @@
      */
     @Override
     public boolean isDeleteAcceptable(ManagementContext context,
-        ManagedObjectPath<?, ?> path, Collection<Message> unacceptableReasons)
+        ManagedObjectPath<?, ?> path, Collection<LocalizableMessage> unacceptableReasons)
         throws AuthorizationException, CommunicationException {
       // Any references to the deleted managed object should cause a
       // constraint violation.
@@ -667,12 +667,12 @@
           getManagedObjectDefinition(), path.getName())) {
         String name = mo.getManagedObjectPath().getName();
         if (name == null) {
-          Message msg = ERR_CLIENT_REFINT_CANNOT_DELETE_WITHOUT_NAME.get(
+          LocalizableMessage msg = ERR_CLIENT_REFINT_CANNOT_DELETE_WITHOUT_NAME.get(
               getName(), mo.getManagedObjectDefinition().getUserFriendlyName(),
               getManagedObjectDefinition().getUserFriendlyName());
           unacceptableReasons.add(msg);
         } else {
-          Message msg = ERR_CLIENT_REFINT_CANNOT_DELETE_WITH_NAME.get(
+          LocalizableMessage msg = ERR_CLIENT_REFINT_CANNOT_DELETE_WITH_NAME.get(
               getName(), mo.getManagedObjectDefinition().getUserFriendlyName(),
               name, getManagedObjectDefinition().getUserFriendlyName());
           unacceptableReasons.add(msg);
@@ -689,7 +689,7 @@
      */
     @Override
     public boolean isModifyAcceptable(ManagementContext context,
-        ManagedObject<?> managedObject, Collection<Message> unacceptableReasons)
+        ManagedObject<?> managedObject, Collection<LocalizableMessage> unacceptableReasons)
         throws AuthorizationException, CommunicationException {
       // If the modified managed object is disabled and there are some
       // active references then refuse the change.
@@ -706,13 +706,13 @@
         if (targetNeedsEnablingCondition.evaluate(context, mo)) {
           String name = mo.getManagedObjectPath().getName();
           if (name == null) {
-            Message msg = ERR_CLIENT_REFINT_CANNOT_DISABLE_WITHOUT_NAME.get(
+            LocalizableMessage msg = ERR_CLIENT_REFINT_CANNOT_DISABLE_WITHOUT_NAME.get(
                 managedObject.getManagedObjectDefinition()
                     .getUserFriendlyName(), getName(), mo
                     .getManagedObjectDefinition().getUserFriendlyName());
             unacceptableReasons.add(msg);
           } else {
-            Message msg = ERR_CLIENT_REFINT_CANNOT_DISABLE_WITH_NAME.get(
+            LocalizableMessage msg = ERR_CLIENT_REFINT_CANNOT_DISABLE_WITH_NAME.get(
                 managedObject.getManagedObjectDefinition()
                     .getUserFriendlyName(), getName(), mo
                     .getManagedObjectDefinition().getUserFriendlyName(), name);
@@ -1041,7 +1041,7 @@
    *         aggregation property definition in the default locale, or
    *         <code>null</code> if there is no constraint synopsis.
    */
-  public final Message getSourceConstraintSynopsis() {
+  public final LocalizableMessage getSourceConstraintSynopsis() {
     return getSourceConstraintSynopsis(Locale.getDefault());
   }
 
@@ -1062,7 +1062,7 @@
    *         or <code>null</code> if there is no constraint
    *         synopsis.
    */
-  public final Message getSourceConstraintSynopsis(Locale locale) {
+  public final LocalizableMessage getSourceConstraintSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + getName()
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/AliasDefaultBehaviorProvider.java b/opendj3-server-dev/src/server/org/opends/server/admin/AliasDefaultBehaviorProvider.java
index 093bb11..1c3ac32 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/AliasDefaultBehaviorProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/AliasDefaultBehaviorProvider.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.Locale;
 
@@ -88,7 +89,7 @@
    * @return Returns the synopsis of this alias default behavior in
    *         the default locale.
    */
-  public final Message getSynopsis() {
+  public final LocalizableMessage getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -103,7 +104,7 @@
    * @return Returns the synopsis of this alias default behavior in
    *         the specified locale.
    */
-  public final Message getSynopsis(Locale locale) {
+  public final LocalizableMessage getSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + propertyName
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/ClassLoaderProvider.java b/opendj3-server-dev/src/server/org/opends/server/admin/ClassLoaderProvider.java
index b30973b..0f65d44 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/ClassLoaderProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/ClassLoaderProvider.java
@@ -57,7 +57,7 @@
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.RootCfgDefn;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -418,7 +418,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_ADMIN_CANNOT_OPEN_JAR_FILE.
+        LocalizableMessage message = ERR_ADMIN_CANNOT_OPEN_JAR_FILE.
             get(extension.getName(), extension.getParent(),
                 stackTraceToSingleLineString(e));
         throw new InitializationException(message);
@@ -565,7 +565,7 @@
       if (!extensionsPath.exists()) {
         // The extensions directory does not exist. This is not a
         // critical problem.
-        Message message = ERR_ADMIN_NO_EXTENSIONS_DIR.get(
+        LocalizableMessage message = ERR_ADMIN_NO_EXTENSIONS_DIR.get(
                 String.valueOf(extensionsPath));
         logError(message);
         return;
@@ -574,7 +574,7 @@
       if (!extensionsPath.isDirectory()) {
         // The extensions directory is not a directory. This is more
         // critical.
-        Message message =
+        LocalizableMessage message =
             ERR_ADMIN_EXTENSIONS_DIR_NOT_DIRECTORY.get(
                     String.valueOf(extensionsPath));
         throw new InitializationException(message);
@@ -609,7 +609,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_ADMIN_EXTENSIONS_CANNOT_LIST_FILES.get(
+      LocalizableMessage message = ERR_ADMIN_EXTENSIONS_CANNOT_LIST_FILES.get(
           String.valueOf(extensionsPath), stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
     }
@@ -631,7 +631,7 @@
         + CORE_MANIFEST);
 
     if (is == null) {
-      Message message = ERR_ADMIN_CANNOT_FIND_CORE_MANIFEST.get(CORE_MANIFEST);
+      LocalizableMessage message = ERR_ADMIN_CANNOT_FIND_CORE_MANIFEST.get(CORE_MANIFEST);
       throw new InitializationException(message);
     }
 
@@ -642,7 +642,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CLASS_LOADER_CANNOT_LOAD_CORE.get(CORE_MANIFEST,
+      LocalizableMessage message = ERR_CLASS_LOADER_CANNOT_LOAD_CORE.get(CORE_MANIFEST,
           stackTraceToSingleLineString(e));
       throw new InitializationException(message);
     }
@@ -674,7 +674,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_ADMIN_CANNOT_READ_EXTENSION_MANIFEST.get(
+        LocalizableMessage message = ERR_ADMIN_CANNOT_READ_EXTENSION_MANIFEST.get(
             EXTENSION_MANIFEST, jarFile.getName(),
             stackTraceToSingleLineString(e));
         throw new InitializationException(message);
@@ -687,7 +687,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CLASS_LOADER_CANNOT_LOAD_EXTENSION.get(jarFile
+        LocalizableMessage message = ERR_CLASS_LOADER_CANNOT_LOAD_EXTENSION.get(jarFile
             .getName(), EXTENSION_MANIFEST, stackTraceToSingleLineString(e));
         throw new InitializationException(message);
       }
@@ -728,7 +728,7 @@
       try {
         className = reader.readLine();
       } catch (IOException e) {
-        Message msg = ERR_CLASS_LOADER_CANNOT_READ_MANIFEST_FILE.get(String
+        LocalizableMessage msg = ERR_CLASS_LOADER_CANNOT_READ_MANIFEST_FILE.get(String
             .valueOf(e.getMessage()));
         throw new InitializationException(msg, e);
       }
@@ -756,7 +756,7 @@
       try {
         theClass = Class.forName(className, true, loader);
       } catch (Exception e) {
-        Message msg = ERR_CLASS_LOADER_CANNOT_LOAD_CLASS.get(className, String
+        LocalizableMessage msg = ERR_CLASS_LOADER_CANNOT_LOAD_CLASS.get(className, String
             .valueOf(e.getMessage()));
         throw new InitializationException(msg, e);
       }
@@ -766,7 +766,7 @@
         try {
           method = theClass.getMethod("getInstance");
         } catch (Exception e) {
-          Message msg = ERR_CLASS_LOADER_CANNOT_FIND_GET_INSTANCE_METHOD.get(
+          LocalizableMessage msg = ERR_CLASS_LOADER_CANNOT_FIND_GET_INSTANCE_METHOD.get(
               className, String.valueOf(e.getMessage()));
           throw new InitializationException(msg, e);
         }
@@ -776,7 +776,7 @@
         try {
           d = (AbstractManagedObjectDefinition<?, ?>) method.invoke(null);
         } catch (Exception e) {
-          Message msg = ERR_CLASS_LOADER_CANNOT_INVOKE_GET_INSTANCE_METHOD.get(
+          LocalizableMessage msg = ERR_CLASS_LOADER_CANNOT_INVOKE_GET_INSTANCE_METHOD.get(
               className, String.valueOf(e.getMessage()));
           throw new InitializationException(msg, e);
         }
@@ -789,7 +789,7 @@
       try {
         d.initialize();
       } catch (Exception e) {
-        Message msg = ERR_CLASS_LOADER_CANNOT_INITIALIZE_DEFN.get(d.getName(),
+        LocalizableMessage msg = ERR_CLASS_LOADER_CANNOT_INITIALIZE_DEFN.get(d.getName(),
             d.getClass().getName(), String.valueOf(e.getMessage()));
         throw new InitializationException(msg, e);
       }
@@ -819,7 +819,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_ADMIN_CANNOT_OPEN_JAR_FILE.get(
+      LocalizableMessage message = ERR_ADMIN_CANNOT_OPEN_JAR_FILE.get(
           jar.getName(), jar.getParent(), stackTraceToSingleLineString(e));
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/DecodingException.java b/opendj3-server-dev/src/server/org/opends/server/admin/DecodingException.java
index 19e4cc8..90a1ad5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/DecodingException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/DecodingException.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -50,7 +51,7 @@
    * @param message
    *          The message.
    */
-  protected DecodingException(Message message) {
+  protected DecodingException(LocalizableMessage message) {
     super(message);
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/DefinitionDecodingException.java b/opendj3-server-dev/src/server/org/opends/server/admin/DefinitionDecodingException.java
index 224e156..e0f313f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/DefinitionDecodingException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/DefinitionDecodingException.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
@@ -30,7 +31,7 @@
 
 import static org.opends.messages.AdminMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -74,9 +75,9 @@
 
 
   // Create the message.
-  private static Message createMessage(AbstractManagedObjectDefinition<?, ?> d,
+  private static LocalizableMessage createMessage(AbstractManagedObjectDefinition<?, ?> d,
       Reason reason) {
-    Message ufn = d.getUserFriendlyName();
+    LocalizableMessage ufn = d.getUserFriendlyName();
     switch (reason) {
     case NO_TYPE_INFORMATION:
       return ERR_DECODING_EXCEPTION_NO_TYPE_INFO.get(ufn);
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/EnumPropertyDefinition.java b/opendj3-server-dev/src/server/org/opends/server/admin/EnumPropertyDefinition.java
index 1f30b6f..8a10845 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/EnumPropertyDefinition.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/EnumPropertyDefinition.java
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.admin;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -215,7 +215,7 @@
    *         of this enumeration property definition in the default
    *         locale.
    */
-  public final Message getValueSynopsis(E value) {
+  public final LocalizableMessage getValueSynopsis(E value) {
     return getValueSynopsis(Locale.getDefault(), value);
   }
 
@@ -233,7 +233,7 @@
    *         of this enumeration property definition in the specified
    *         locale.
    */
-  public final Message getValueSynopsis(Locale locale, E value) {
+  public final LocalizableMessage getValueSynopsis(Locale locale, E value) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + getName()
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/GenericConstraint.java b/opendj3-server-dev/src/server/org/opends/server/admin/GenericConstraint.java
index 0869013..de06cde 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/GenericConstraint.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/GenericConstraint.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin;
 
@@ -31,7 +32,7 @@
 import java.util.Collections;
 import java.util.Locale;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.client.AuthorizationException;
 import org.opends.server.admin.client.ClientConstraintHandler;
 import org.opends.server.admin.client.CommunicationException;
@@ -68,7 +69,7 @@
      */
     @Override
     public boolean isAddAcceptable(ManagementContext context,
-        ManagedObject<?> managedObject, Collection<Message> unacceptableReasons)
+        ManagedObject<?> managedObject, Collection<LocalizableMessage> unacceptableReasons)
         throws AuthorizationException, CommunicationException {
       if (!condition.evaluate(context, managedObject)) {
         unacceptableReasons.add(getSynopsis());
@@ -85,7 +86,7 @@
      */
     @Override
     public boolean isModifyAcceptable(ManagementContext context,
-        ManagedObject<?> managedObject, Collection<Message> unacceptableReasons)
+        ManagedObject<?> managedObject, Collection<LocalizableMessage> unacceptableReasons)
         throws AuthorizationException, CommunicationException {
       if (!condition.evaluate(context, managedObject)) {
         unacceptableReasons.add(getSynopsis());
@@ -116,7 +117,7 @@
      */
     @Override
     public boolean isUsable(ServerManagedObject<?> managedObject,
-        Collection<Message> unacceptableReasons) throws ConfigException {
+        Collection<LocalizableMessage> unacceptableReasons) throws ConfigException {
       if (!condition.evaluate(managedObject)) {
         unacceptableReasons.add(getSynopsis());
         return false;
@@ -188,7 +189,7 @@
    * @return Returns the synopsis of this constraint in the default
    *         locale.
    */
-  public final Message getSynopsis() {
+  public final LocalizableMessage getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -202,7 +203,7 @@
    * @return Returns the synopsis of this constraint in the specified
    *         locale.
    */
-  public final Message getSynopsis(Locale locale) {
+  public final LocalizableMessage getSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "constraint." + id + ".synopsis";
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/InstantiableRelationDefinition.java b/opendj3-server-dev/src/server/org/opends/server/admin/InstantiableRelationDefinition.java
index ba91980..eab2bb7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/InstantiableRelationDefinition.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/InstantiableRelationDefinition.java
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.admin;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -254,7 +254,7 @@
    * @return Returns the user friendly plural name of this relation
    *         definition in the default locale.
    */
-  public Message getUserFriendlyPluralName() {
+  public LocalizableMessage getUserFriendlyPluralName() {
     return getUserFriendlyPluralName(Locale.getDefault());
   }
 
@@ -269,7 +269,7 @@
    * @return Returns the user friendly plural name of this relation
    *         definition in the specified locale.
    */
-  public Message getUserFriendlyPluralName(Locale locale) {
+  public LocalizableMessage getUserFriendlyPluralName(Locale locale) {
     String property = "relation." + getName() + ".user-friendly-plural-name";
     return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
         getParentDefinition(), property, locale);
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/IntegerPropertyDefinition.java b/opendj3-server-dev/src/server/org/opends/server/admin/IntegerPropertyDefinition.java
index 2902aa7..3b89a9d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/IntegerPropertyDefinition.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/IntegerPropertyDefinition.java
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.admin;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -229,7 +229,7 @@
    *         definition in the default locale, or <code>null</code>
    *         if there is no unit synopsis.
    */
-  public Message getUnitSynopsis() {
+  public LocalizableMessage getUnitSynopsis() {
     return getUnitSynopsis(Locale.getDefault());
   }
 
@@ -245,7 +245,7 @@
    *         definition in the specified locale, or <code>null</code>
    *         if there is no unit synopsis.
    */
-  public Message getUnitSynopsis(Locale locale) {
+  public LocalizableMessage getUnitSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + getName() + ".syntax.integer.unit-synopsis";
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java b/opendj3-server-dev/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java
index 16925a7..840a776 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/ManagedObjectDefinitionI18NResource.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -133,7 +134,7 @@
    *           If the provided managed object definition was the
    *           {@link TopCfgDefn}.
    */
-  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d, String key)
+  public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d, String key)
       throws MissingResourceException, UnsupportedOperationException {
     return getMessage(d, key, Locale.getDefault(), (String[]) null);
   }
@@ -158,7 +159,7 @@
    *           If the provided managed object definition was the
    *           {@link TopCfgDefn}.
    */
-  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
+  public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d,
       String key, Locale locale) throws MissingResourceException,
       UnsupportedOperationException {
     return getMessage(d, key, locale, (String[]) null);
@@ -187,17 +188,17 @@
    *           If the provided managed object definition was the
    *           {@link TopCfgDefn}.
    */
-  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
+  public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d,
       String key, Locale locale, String... args)
       throws MissingResourceException, UnsupportedOperationException {
     ResourceBundle resource = getResourceBundle(d, locale);
 
     // TODO: use message framework directly
     if (args == null) {
-      return Message.raw(resource.getString(key));
+      return LocalizableMessage.raw(resource.getString(key));
     } else {
       MessageFormat mf = new MessageFormat(resource.getString(key));
-      return Message.raw(mf.format(args));
+      return LocalizableMessage.raw(mf.format(args));
     }
   }
 
@@ -222,7 +223,7 @@
    *           If the provided managed object definition was the
    *           {@link TopCfgDefn}.
    */
-  public Message getMessage(AbstractManagedObjectDefinition<?, ?> d,
+  public LocalizableMessage getMessage(AbstractManagedObjectDefinition<?, ?> d,
       String key, String... args) throws MissingResourceException,
       UnsupportedOperationException {
     return getMessage(d, key, Locale.getDefault(), args);
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/OperationsException.java b/opendj3-server-dev/src/server/org/opends/server/admin/OperationsException.java
index 94d4e1b..f72c0fb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/OperationsException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/OperationsException.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -53,7 +54,7 @@
    * @param cause
    *          The cause.
    */
-  protected OperationsException(Message message, Throwable cause) {
+  protected OperationsException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
@@ -65,7 +66,7 @@
    * @param message
    *          The message.
    */
-  protected OperationsException(Message message) {
+  protected OperationsException(LocalizableMessage message) {
     super(message);
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/PropertyDefinition.java b/opendj3-server-dev/src/server/org/opends/server/admin/PropertyDefinition.java
index 58c2229..75222a4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/PropertyDefinition.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/PropertyDefinition.java
@@ -37,7 +37,7 @@
 import java.util.MissingResourceException;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -469,7 +469,7 @@
    *         the default locale, or <code>null</code> if there is no
    *         description.
    */
-  public final Message getDescription() {
+  public final LocalizableMessage getDescription() {
     return getDescription(Locale.getDefault());
   }
 
@@ -485,7 +485,7 @@
    *         the specified locale, or <code>null</code> if there is
    *         no description.
    */
-  public final Message getDescription(Locale locale) {
+  public final LocalizableMessage getDescription(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + propertyName + ".description";
@@ -530,7 +530,7 @@
    * @return Returns the synopsis of this property definition in the
    *         default locale.
    */
-  public final Message getSynopsis() {
+  public final LocalizableMessage getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -545,7 +545,7 @@
    * @return Returns the synopsis of this property definition in the
    *         specified locale.
    */
-  public final Message getSynopsis(Locale locale) {
+  public final LocalizableMessage getSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + propertyName + ".synopsis";
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java b/opendj3-server-dev/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
index 27a9b66..9b80d01 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/PropertyDefinitionUsageBuilder.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 import java.text.NumberFormat;
@@ -45,7 +46,7 @@
    * Underlying implementation.
    */
   private class MyPropertyDefinitionVisitor extends
-      PropertyDefinitionVisitor<Message, Void> {
+      PropertyDefinitionVisitor<LocalizableMessage, Void> {
 
     // Flag indicating whether detailed syntax information will be
     // generated.
@@ -72,8 +73,8 @@
      */
     @Override
     public <C extends ConfigurationClient, S extends Configuration>
-    Message visitAggregation(AggregationPropertyDefinition<C, S> d, Void p) {
-      return Message.raw("NAME");
+    LocalizableMessage visitAggregation(AggregationPropertyDefinition<C, S> d, Void p) {
+      return LocalizableMessage.raw("NAME");
     }
 
 
@@ -82,29 +83,29 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitAttributeType(AttributeTypePropertyDefinition d,
+    public LocalizableMessage visitAttributeType(AttributeTypePropertyDefinition d,
         Void p) {
-      return Message.raw("OID");
+      return LocalizableMessage.raw("OID");
     }
 
     /**
      * {@inheritDoc}
      */
     @Override
-    public Message visitACI(ACIPropertyDefinition d,
+    public LocalizableMessage visitACI(ACIPropertyDefinition d,
         Void p) {
-      return Message.raw("ACI");
+      return LocalizableMessage.raw("ACI");
     }
 
     /**
      * {@inheritDoc}
      */
     @Override
-    public Message visitBoolean(BooleanPropertyDefinition d, Void p) {
+    public LocalizableMessage visitBoolean(BooleanPropertyDefinition d, Void p) {
       if (isDetailed) {
-        return Message.raw("false | true");
+        return LocalizableMessage.raw("false | true");
       } else {
-        return Message.raw("BOOLEAN");
+        return LocalizableMessage.raw("BOOLEAN");
       }
     }
 
@@ -114,11 +115,11 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitClass(ClassPropertyDefinition d, Void p) {
+    public LocalizableMessage visitClass(ClassPropertyDefinition d, Void p) {
       if (isDetailed && !d.getInstanceOfInterface().isEmpty()) {
-        return Message.raw("CLASS <= " + d.getInstanceOfInterface().get(0));
+        return LocalizableMessage.raw("CLASS <= " + d.getInstanceOfInterface().get(0));
       } else {
-        return Message.raw("CLASS");
+        return LocalizableMessage.raw("CLASS");
       }
     }
 
@@ -128,11 +129,11 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitDN(DNPropertyDefinition d, Void p) {
+    public LocalizableMessage visitDN(DNPropertyDefinition d, Void p) {
       if (isDetailed && d.getBaseDN() != null) {
-        return Message.raw("DN <= " + d.getBaseDN());
+        return LocalizableMessage.raw("DN <= " + d.getBaseDN());
       } else {
-        return Message.raw("DN");
+        return LocalizableMessage.raw("DN");
       }
     }
 
@@ -142,8 +143,8 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitDuration(DurationPropertyDefinition d, Void p) {
-      MessageBuilder builder = new MessageBuilder();
+    public LocalizableMessage visitDuration(DurationPropertyDefinition d, Void p) {
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
       DurationUnit unit = d.getBaseUnit();
 
       if (isDetailed && d.getLowerLimit() > 0) {
@@ -175,16 +176,16 @@
      * {@inheritDoc}
      */
     @Override
-    public <E extends Enum<E>> Message visitEnum(EnumPropertyDefinition<E> d,
+    public <E extends Enum<E>> LocalizableMessage visitEnum(EnumPropertyDefinition<E> d,
         Void p) {
       if (!isDetailed) {
         // Use the last word in the property name.
         String name = d.getName();
         int i = name.lastIndexOf('-');
         if (i == -1 || i == (name.length() - 1)) {
-          return Message.raw(name.toUpperCase());
+          return LocalizableMessage.raw(name.toUpperCase());
         } else {
-          return Message.raw(name.substring(i + 1).toUpperCase());
+          return LocalizableMessage.raw(name.substring(i + 1).toUpperCase());
         }
       } else {
         Set<String> values = new TreeSet<String>();
@@ -194,7 +195,7 @@
         }
 
         boolean isFirst = true;
-        MessageBuilder builder = new MessageBuilder();
+        LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
         for (String s : values) {
           if (!isFirst) {
             builder.append(" | ");
@@ -213,8 +214,8 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitInteger(IntegerPropertyDefinition d, Void p) {
-      MessageBuilder builder = new MessageBuilder();
+    public LocalizableMessage visitInteger(IntegerPropertyDefinition d, Void p) {
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
 
       if (isDetailed) {
         builder.append(String.valueOf(d.getLowerLimit()));
@@ -241,8 +242,8 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitIPAddress(IPAddressPropertyDefinition d, Void p) {
-      return Message.raw("HOST_NAME");
+    public LocalizableMessage visitIPAddress(IPAddressPropertyDefinition d, Void p) {
+      return LocalizableMessage.raw("HOST_NAME");
     }
 
 
@@ -251,9 +252,9 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitIPAddressMask(IPAddressMaskPropertyDefinition d,
+    public LocalizableMessage visitIPAddressMask(IPAddressMaskPropertyDefinition d,
         Void p) {
-      return Message.raw("IP_ADDRESS_MASK");
+      return LocalizableMessage.raw("IP_ADDRESS_MASK");
     }
 
 
@@ -262,8 +263,8 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitSize(SizePropertyDefinition d, Void p) {
-      MessageBuilder builder = new MessageBuilder();
+    public LocalizableMessage visitSize(SizePropertyDefinition d, Void p) {
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
 
       if (isDetailed && d.getLowerLimit() > 0) {
         SizeUnit unit = SizeUnit.getBestFitUnitExact(d.getLowerLimit());
@@ -315,19 +316,23 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitString(StringPropertyDefinition d, Void p) {
+    public LocalizableMessage visitString(StringPropertyDefinition d, Void p) {
       if (d.getPattern() != null) {
         if (isDetailed) {
-          MessageBuilder builder = new MessageBuilder();
+          LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
           builder.append(d.getPatternUsage());
           builder.append(" - ");
-          builder.append(d.getPatternSynopsis());
+          final LocalizableMessage synopsis = d.getPatternSynopsis();
+          if (synopsis != null)
+          {
+            builder.append(synopsis);
+          }
           return builder.toMessage();
         } else {
-          return Message.raw(d.getPatternUsage());
+          return LocalizableMessage.raw(d.getPatternUsage());
         }
       } else {
-        return Message.raw("STRING");
+        return LocalizableMessage.raw("STRING");
       }
     }
 
@@ -337,9 +342,9 @@
      * {@inheritDoc}
      */
     @Override
-    public <T> Message visitUnknown(PropertyDefinition<T> d, Void p)
+    public <T> LocalizableMessage visitUnknown(PropertyDefinition<T> d, Void p)
         throws PropertyException {
-      return Message.raw("?");
+      return LocalizableMessage.raw("?");
     }
   }
 
@@ -370,7 +375,7 @@
    * @return Returns the usage information for the provided property
    *         definition.
    */
-  public Message getUsage(PropertyDefinition<?> pd) {
+  public LocalizableMessage getUsage(PropertyDefinition<?> pd) {
     return pd.accept(pimpl, null);
   };
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/PropertyException.java b/opendj3-server-dev/src/server/org/opends/server/admin/PropertyException.java
index a1d0f8c..c715d37 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/PropertyException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/PropertyException.java
@@ -31,7 +31,7 @@
 
 import static org.opends.messages.AdminMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -173,7 +173,7 @@
 
 
   // Create the message.
-  private static Message createMessage(PropertyDefinition<?> pd, Object value)
+  private static LocalizableMessage createMessage(PropertyDefinition<?> pd, Object value)
   {
     PropertyDefinitionUsageBuilder builder = new PropertyDefinitionUsageBuilder(
         true);
@@ -183,8 +183,8 @@
 
 
 
-  // Message that explains the problem.
-  private final Message message;
+  // LocalizableMessage that explains the problem.
+  private final LocalizableMessage message;
 
   /*
    * The property definition associated with the property that caused the
@@ -194,7 +194,7 @@
 
 
 
-  private PropertyException(PropertyDefinition<?> pd, Message message)
+  private PropertyException(PropertyDefinition<?> pd, LocalizableMessage message)
   {
     super(message.toString());
     this.message = message;
@@ -203,7 +203,7 @@
 
 
 
-  private PropertyException(PropertyDefinition<?> pd, Message message,
+  private PropertyException(PropertyDefinition<?> pd, LocalizableMessage message,
       Throwable cause)
   {
     super(message.toString(), cause);
@@ -219,7 +219,7 @@
    * @return Returns the message describing the problem that occurred (never
    *         <code>null</code>).
    */
-  public Message getMessageObject()
+  public LocalizableMessage getMessageObject()
   {
     return message;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/RelationDefinition.java b/opendj3-server-dev/src/server/org/opends/server/admin/RelationDefinition.java
index 4af0601..5617e63 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/RelationDefinition.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/RelationDefinition.java
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.admin;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -258,7 +258,7 @@
    *         the default locale, or <code>null</code> if there is no
    *         description.
    */
-  public final Message getDescription() {
+  public final LocalizableMessage getDescription() {
     return getDescription(Locale.getDefault());
   }
 
@@ -274,7 +274,7 @@
    *         the specified locale, or <code>null</code> if there is
    *         no description.
    */
-  public final Message getDescription(Locale locale) {
+  public final LocalizableMessage getDescription(Locale locale) {
     try {
       String property = "relation." + common.name + ".description";
       return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
@@ -315,7 +315,7 @@
    * @return Returns the synopsis of this relation definition in the
    *         default locale.
    */
-  public final Message getSynopsis() {
+  public final LocalizableMessage getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -330,7 +330,7 @@
    * @return Returns the synopsis of this relation definition in the
    *         specified locale.
    */
-  public final Message getSynopsis(Locale locale) {
+  public final LocalizableMessage getSynopsis(Locale locale) {
     String property = "relation." + common.name + ".synopsis";
     return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
         getParentDefinition(), property, locale);
@@ -345,7 +345,7 @@
    * @return Returns the user friendly name of this relation
    *         definition in the default locale.
    */
-  public final Message getUserFriendlyName() {
+  public final LocalizableMessage getUserFriendlyName() {
     return getUserFriendlyName(Locale.getDefault());
   }
 
@@ -360,7 +360,7 @@
    * @return Returns the user friendly name of this relation
    *         definition in the specified locale.
    */
-  public final Message getUserFriendlyName(Locale locale) {
+  public final LocalizableMessage getUserFriendlyName(Locale locale) {
     String property = "relation." + common.name + ".user-friendly-name";
     return ManagedObjectDefinitionI18NResource.getInstance().getMessage(
         getParentDefinition(), property, locale);
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/SetRelationDefinition.java b/opendj3-server-dev/src/server/org/opends/server/admin/SetRelationDefinition.java
index 044863c..a0e7944 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/SetRelationDefinition.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/SetRelationDefinition.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin;
@@ -34,7 +35,7 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -231,7 +232,7 @@
    * @return Returns the user friendly plural name of this relation
    *         definition in the default locale.
    */
-  public Message getUserFriendlyPluralName()
+  public LocalizableMessage getUserFriendlyPluralName()
   {
     return getUserFriendlyPluralName(Locale.getDefault());
   }
@@ -247,7 +248,7 @@
    * @return Returns the user friendly plural name of this relation
    *         definition in the specified locale.
    */
-  public Message getUserFriendlyPluralName(Locale locale)
+  public LocalizableMessage getUserFriendlyPluralName(Locale locale)
   {
     String property =
         "relation." + getName() + ".user-friendly-plural-name";
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/StringPropertyDefinition.java b/opendj3-server-dev/src/server/org/opends/server/admin/StringPropertyDefinition.java
index 9e95f9b..203dadd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/StringPropertyDefinition.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/StringPropertyDefinition.java
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.admin;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -241,7 +241,7 @@
    *         there is no pattern matching defined for this string
    *         property definition).
    */
-  public Message getPatternSynopsis() {
+  public LocalizableMessage getPatternSynopsis() {
     return getPatternSynopsis(Locale.getDefault());
   }
 
@@ -259,7 +259,7 @@
    *         there is no pattern matching defined for this string
    *         property definition).
    */
-  public Message getPatternSynopsis(Locale locale) {
+  public LocalizableMessage getPatternSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "property." + getName()
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/Tag.java b/opendj3-server-dev/src/server/org/opends/server/admin/Tag.java
index 16be23f..3081d5e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/Tag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/Tag.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -165,7 +165,7 @@
    *
    * @return Returns the synopsis of this tag in the default locale.
    */
-  public final Message getSynopsis() {
+  public final LocalizableMessage getSynopsis() {
     return getSynopsis(Locale.getDefault());
   }
 
@@ -178,7 +178,7 @@
    *          The locale.
    * @return Returns the synopsis of this tag in the specified locale.
    */
-  public final Message getSynopsis(Locale locale) {
+  public final LocalizableMessage getSynopsis(Locale locale) {
     ManagedObjectDefinitionI18NResource resource =
       ManagedObjectDefinitionI18NResource.getInstance();
     String property = "tag." + name + ".synopsis";
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/AdminClientException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/AdminClientException.java
index ce44372..0de3e50 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/AdminClientException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/AdminClientException.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.admin.AdminException;
 
@@ -61,7 +62,7 @@
    * @param cause
    *          The cause.
    */
-  protected AdminClientException(Message message, Throwable cause) {
+  protected AdminClientException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
@@ -73,7 +74,7 @@
    * @param message
    *          The message.
    */
-  protected AdminClientException(Message message) {
+  protected AdminClientException(LocalizableMessage message) {
     super(message);
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/AdminSecurityException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/AdminSecurityException.java
index 2c62a03..c9ae5eb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/AdminSecurityException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/AdminSecurityException.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -55,7 +56,7 @@
    * @param cause
    *          The cause.
    */
-  protected AdminSecurityException(Message message, Throwable cause) {
+  protected AdminSecurityException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
@@ -67,7 +68,7 @@
    * @param message
    *          The message.
    */
-  protected AdminSecurityException(Message message) {
+  protected AdminSecurityException(LocalizableMessage message) {
     super(message);
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthenticationException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthenticationException.java
index 9e72d40..5fab149 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthenticationException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthenticationException.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client;
@@ -30,7 +31,7 @@
 
 import static org.opends.messages.AdminMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -78,7 +79,7 @@
    * @param cause
    *          The cause.
    */
-  public AuthenticationException(Message message, Throwable cause) {
+  public AuthenticationException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
@@ -90,7 +91,7 @@
    * @param message
    *          The message.
    */
-  public AuthenticationException(Message message) {
+  public AuthenticationException(LocalizableMessage message) {
     super(message);
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthenticationNotSupportedException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthenticationNotSupportedException.java
index 3a6f391..b3f308c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthenticationNotSupportedException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthenticationNotSupportedException.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client;
@@ -30,7 +31,7 @@
 
 import static org.opends.messages.AdminMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -80,7 +81,7 @@
    * @param cause
    *          The cause.
    */
-  public AuthenticationNotSupportedException(Message message, Throwable cause) {
+  public AuthenticationNotSupportedException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
@@ -92,7 +93,7 @@
    * @param message
    *          The message.
    */
-  public AuthenticationNotSupportedException(Message message) {
+  public AuthenticationNotSupportedException(LocalizableMessage message) {
     super(message);
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthorizationException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthorizationException.java
index 38d9d51..da3d51e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthorizationException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/AuthorizationException.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client;
@@ -30,7 +31,7 @@
 
 import static org.opends.messages.AdminMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -79,7 +80,7 @@
    * @param cause
    *          The cause.
    */
-  public AuthorizationException(Message message, Throwable cause) {
+  public AuthorizationException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
@@ -91,7 +92,7 @@
    * @param message
    *          The message.
    */
-  public AuthorizationException(Message message) {
+  public AuthorizationException(LocalizableMessage message) {
     super(message);
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/ClientConstraintHandler.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/ClientConstraintHandler.java
index 20a0358..3ac0701 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/ClientConstraintHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/ClientConstraintHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.client;
 
@@ -29,7 +30,7 @@
 
 import java.util.Collection;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.ManagedObjectPath;
 
 
@@ -86,7 +87,7 @@
    *           from being evaluated.
    */
   public boolean isAddAcceptable(ManagementContext context,
-      ManagedObject<?> managedObject, Collection<Message> unacceptableReasons)
+      ManagedObject<?> managedObject, Collection<LocalizableMessage> unacceptableReasons)
       throws AuthorizationException, CommunicationException {
     return true;
   }
@@ -121,7 +122,7 @@
    *           from being evaluated.
    */
   public boolean isModifyAcceptable(ManagementContext context,
-      ManagedObject<?> managedObject, Collection<Message> unacceptableReasons)
+      ManagedObject<?> managedObject, Collection<LocalizableMessage> unacceptableReasons)
       throws AuthorizationException, CommunicationException {
     return true;
   }
@@ -157,7 +158,7 @@
    *           from being evaluated.
    */
   public boolean isDeleteAcceptable(ManagementContext context,
-      ManagedObjectPath<?, ?> path, Collection<Message> unacceptableReasons)
+      ManagedObjectPath<?, ?> path, Collection<LocalizableMessage> unacceptableReasons)
       throws AuthorizationException, CommunicationException {
     return true;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/CommunicationException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/CommunicationException.java
index 9f803f6..ed45810 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/CommunicationException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/CommunicationException.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client;
@@ -30,7 +31,7 @@
 
 import static org.opends.messages.AdminMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -81,7 +82,7 @@
    * @param cause
    *          The cause.
    */
-  public CommunicationException(Message message, Throwable cause) {
+  public CommunicationException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
@@ -93,7 +94,7 @@
    * @param message
    *          The message.
    */
-  public CommunicationException(Message message) {
+  public CommunicationException(LocalizableMessage message) {
     super(message);
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/ConcurrentModificationException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/ConcurrentModificationException.java
index 589350e..98d23af 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/ConcurrentModificationException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/ConcurrentModificationException.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client;
@@ -30,7 +31,7 @@
 
 import static org.opends.messages.AdminMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.OperationsException;
 
 
@@ -81,7 +82,7 @@
    * @param cause
    *          The cause.
    */
-  public ConcurrentModificationException(Message message, Throwable cause) {
+  public ConcurrentModificationException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
@@ -93,7 +94,7 @@
    * @param message
    *          The message.
    */
-  public ConcurrentModificationException(Message message) {
+  public ConcurrentModificationException(LocalizableMessage message) {
     super(message);
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/IllegalManagedObjectNameException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/IllegalManagedObjectNameException.java
index 8c41e01..9ef6104 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/IllegalManagedObjectNameException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/IllegalManagedObjectNameException.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client;
@@ -30,7 +31,7 @@
 
 import static org.opends.messages.AdminMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.PropertyException;
 import org.opends.server.admin.OperationsException;
 import org.opends.server.admin.PropertyDefinition;
@@ -57,7 +58,7 @@
 
 
   // Create the message
-  private static Message createMessage(String illegalName,
+  private static LocalizableMessage createMessage(String illegalName,
       PropertyDefinition<?> namingPropertyDefinition) {
     if (illegalName.length() == 0) {
       return ERR_ILLEGAL_MANAGED_OBJECT_NAME_EXCEPTION_EMPTY.get();
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/ManagedObjectDecodingException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/ManagedObjectDecodingException.java
index 05e7147..572786d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/ManagedObjectDecodingException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/ManagedObjectDecodingException.java
@@ -31,8 +31,8 @@
 
 import static org.opends.messages.AdminMessages.*;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 import java.util.Collection;
 import java.util.Collections;
@@ -59,7 +59,7 @@
 
 
   // Create the message.
-  private static Message createMessage(ManagedObject<?> partialManagedObject,
+  private static LocalizableMessage createMessage(ManagedObject<?> partialManagedObject,
       Collection<PropertyException> causes) {
     Reject.ifNull(causes);
     Reject.ifFalse(!causes.isEmpty());
@@ -70,7 +70,7 @@
       return ERR_MANAGED_OBJECT_DECODING_EXCEPTION_SINGLE.get(d
           .getUserFriendlyName(), causes.iterator().next().getMessageObject());
     } else {
-      MessageBuilder builder = new MessageBuilder();
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
 
       boolean isFirst = true;
       for (PropertyException cause : causes) {
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/MissingMandatoryPropertiesException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/MissingMandatoryPropertiesException.java
index 2e8f9ec..6d0eb71 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/MissingMandatoryPropertiesException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/MissingMandatoryPropertiesException.java
@@ -35,8 +35,8 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.OperationsException;
 import org.opends.server.admin.PropertyException;
 import org.forgerock.util.Reject;
@@ -58,7 +58,7 @@
 
 
   // Create the message.
-  private static Message createMessage(Collection<PropertyException> causes)
+  private static LocalizableMessage createMessage(Collection<PropertyException> causes)
   {
     Reject.ifNull(causes);
     Reject.ifFalse(!causes.isEmpty());
@@ -67,7 +67,7 @@
       return ERR_MISSING_MANDATORY_PROPERTIES_EXCEPTION_SINGLE.get(causes
           .iterator().next().getPropertyDefinition().getName());
     } else {
-      MessageBuilder builder = new MessageBuilder();
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
 
       boolean isFirst = true;
       for (PropertyException cause : causes) {
@@ -92,7 +92,7 @@
 
   // The user friendly name of the component that caused this
   // exception.
-  private final Message ufn;
+  private final LocalizableMessage ufn;
 
 
 
@@ -110,7 +110,7 @@
    *          Indicates whether the exception occurred during managed
    *          object creation.
    */
-  public MissingMandatoryPropertiesException(Message ufn,
+  public MissingMandatoryPropertiesException(LocalizableMessage ufn,
       Collection<PropertyException> causes, boolean isCreate) {
     super(createMessage(causes));
 
@@ -153,7 +153,7 @@
    * @return Returns the user friendly name of the component that
    *         caused this exception.
    */
-  public Message getUserFriendlyName() {
+  public LocalizableMessage getUserFriendlyName() {
     return ufn;
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/OperationRejectedException.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/OperationRejectedException.java
index c6e314e..75ecb2d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/OperationRejectedException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/OperationRejectedException.java
@@ -35,8 +35,8 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.forgerock.util.Reject;
 
 
@@ -84,7 +84,7 @@
 
 
   // Gets the default message.
-  private static Message getDefaultMessage(Collection<Message> messages) {
+  private static LocalizableMessage getDefaultMessage(Collection<LocalizableMessage> messages) {
     Reject.ifNull(messages);
     Reject.ifFalse(!messages.isEmpty());
 
@@ -100,14 +100,14 @@
 
 
   // Merge the messages into a single message.
-  private static Message getSingleMessage(Collection<Message> messages) {
+  private static LocalizableMessage getSingleMessage(Collection<LocalizableMessage> messages) {
     if (messages.size() == 1) {
       return messages.iterator().next();
     } else {
-      MessageBuilder builder = new MessageBuilder();
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
 
       boolean isFirst = true;
-      for (Message m : messages) {
+      for (LocalizableMessage m : messages) {
         if (!isFirst) {
           builder.append(";  ");
         }
@@ -120,14 +120,14 @@
   }
 
   // The messages describing the constraint violations that occurred.
-  private final Collection<Message> messages;
+  private final Collection<LocalizableMessage> messages;
 
   // The type of operation that caused this exception.
   private final OperationType type;
 
   // The user friendly name of the component that caused this
   // exception.
-  private final Message ufn;
+  private final LocalizableMessage ufn;
 
 
 
@@ -141,7 +141,7 @@
    *          The user friendly name of the component that caused this
    *          exception.
    */
-  public OperationRejectedException(OperationType type, Message ufn) {
+  public OperationRejectedException(OperationType type, LocalizableMessage ufn) {
     this(type, ufn, ERR_OPERATION_REJECTED_DEFAULT.get());
   }
 
@@ -161,11 +161,11 @@
    *          occurred (must be non-<code>null</code> and
    *          non-empty).
    */
-  public OperationRejectedException(OperationType type, Message ufn,
-      Collection<Message> messages) {
+  public OperationRejectedException(OperationType type, LocalizableMessage ufn,
+      Collection<LocalizableMessage> messages) {
     super(getDefaultMessage(messages));
 
-    this.messages = new ArrayList<Message>(messages);
+    this.messages = new ArrayList<LocalizableMessage>(messages);
     this.type = type;
     this.ufn = ufn;
   }
@@ -185,8 +185,8 @@
    *          The message describing the constraint violation that
    *          occurred.
    */
-  public OperationRejectedException(OperationType type, Message ufn,
-      Message message) {
+  public OperationRejectedException(OperationType type, LocalizableMessage ufn,
+      LocalizableMessage message) {
     this(type, ufn, Collections.singleton(message));
   }
 
@@ -199,7 +199,7 @@
    * @return Returns an unmodifiable collection view of the messages
    *         describing the constraint violations that occurred.
    */
-  public Collection<Message> getMessages() {
+  public Collection<LocalizableMessage> getMessages() {
     return Collections.unmodifiableCollection(messages);
   }
 
@@ -212,7 +212,7 @@
    * @return Returns a single message listing all the messages
    *         combined into a single list separated by semi-colons.
    */
-  public Message getMessagesAsSingleMessage() {
+  public LocalizableMessage getMessagesAsSingleMessage() {
     return getSingleMessage(messages);
   }
 
@@ -236,7 +236,7 @@
    * @return Returns the user friendly name of the component that
    *         caused this exception.
    */
-  public Message getUserFriendlyName() {
+  public LocalizableMessage getUserFriendlyName() {
     return ufn;
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliGlobalAdmin.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliGlobalAdmin.java
index e60167d..04f9561 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliGlobalAdmin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliGlobalAdmin.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.admin.client.cli;
 
@@ -51,8 +51,8 @@
 import org.opends.admin.ads.ADSContextException;
 import org.opends.admin.ads.ADSContext.AdministratorProperty;
 import org.opends.admin.ads.ADSContextException.ErrorType;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.tools.dsconfig.ArgumentExceptionFactory;
 import org.opends.server.types.Privilege;
 import org.opends.server.util.args.Argument;
@@ -68,19 +68,19 @@
 public class DsFrameworkCliGlobalAdmin implements DsFrameworkCliSubCommandGroup
 {
   // Strings used in property help.
-  private final static Message DESCRIPTION_OPTIONS_TITLE =
+  private final static LocalizableMessage DESCRIPTION_OPTIONS_TITLE =
     INFO_DSCFG_HELP_DESCRIPTION_OPTION.get();
 
-  private final static Message DESCRIPTION_OPTIONS_READ =
+  private final static LocalizableMessage DESCRIPTION_OPTIONS_READ =
     INFO_DSCFG_HELP_DESCRIPTION_READ.get();
 
-  private final static Message DESCRIPTION_OPTIONS_WRITE =
+  private final static LocalizableMessage DESCRIPTION_OPTIONS_WRITE =
     INFO_DSCFG_HELP_DESCRIPTION_WRITE.get();
 
-  private final static Message DESCRIPTION_OPTIONS_MANDATORY =
+  private final static LocalizableMessage DESCRIPTION_OPTIONS_MANDATORY =
     INFO_DSCFG_HELP_DESCRIPTION_MANDATORY.get();
 
-  private final static Message DESCRIPTION_OPTIONS_SINGLE =
+  private final static LocalizableMessage DESCRIPTION_OPTIONS_SINGLE =
     INFO_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED.get();
 
   /**
@@ -364,7 +364,7 @@
       AdministratorProperty prop = AdministratorProperty.UID;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          attName, false, false, true, Message.raw(""), null, null, null);
+          attName, false, false, true, LocalizableMessage.raw(""), null, null, null);
       userAdminProperties.put(prop, arg);
     }
 
@@ -376,7 +376,7 @@
       AdministratorProperty prop = AdministratorProperty.PASSWORD;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          attName, false, false, true, Message.raw(""), null, null, null);
+          attName, false, false, true, LocalizableMessage.raw(""), null, null, null);
       userAdminProperties.put(prop, arg);
     }
 
@@ -387,7 +387,7 @@
       AdministratorProperty prop = AdministratorProperty.DESCRIPTION;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          attName, false, false, true, Message.raw(""), null, null, null);
+          attName, false, false, true, LocalizableMessage.raw(""), null, null, null);
       userAdminProperties.put(prop, arg);
     }
 
@@ -398,7 +398,7 @@
       AdministratorProperty prop = AdministratorProperty.ADMINISTRATOR_DN;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          attName, false, false, true, Message.raw(""), null, null, null);
+          attName, false, false, true, LocalizableMessage.raw(""), null, null, null);
       userAdminProperties.put(prop, arg);
       readonlyadminUserProperties.add(prop);
     }
@@ -410,7 +410,7 @@
       AdministratorProperty prop = AdministratorProperty.PRIVILEGE;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          attName, true, true, true, Message.raw(""), "root", null, null);
+          attName, true, true, true, LocalizableMessage.raw(""), "root", null, null);
       userAdminProperties.put(prop, arg);
     }
   }
@@ -704,23 +704,23 @@
           .getAdminUserPropFromName(propertyName);
       if (adminUserProperty == null)
       {
-        Message message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
+        LocalizableMessage message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
         throw new ArgumentException(message);
       }
 
       // Check that propName is not hidden.
       if (userAdminProperties.get(adminUserProperty).isHidden())
       {
-        Message message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
+        LocalizableMessage message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
         throw new ArgumentException(message);
       }
 
       // Check the property Syntax.
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       Argument arg = userAdminProperties.get(adminUserProperty) ;
       if ( ! arg.valueIsAcceptable(value, invalidReason))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CLI_ERROR_INVALID_PROPERTY_VALUE.get(propertyName, value);
         throw new ArgumentException(message);
       }
@@ -741,7 +741,7 @@
           }
           if (Privilege.privilegeForName(valueToCheck) == null)
           {
-            Message message = ERR_CLI_ERROR_INVALID_PROPERTY_VALUE.get(
+            LocalizableMessage message = ERR_CLI_ERROR_INVALID_PROPERTY_VALUE.get(
                 AdministratorProperty.PRIVILEGE.getAttributeName(),
                 valueToCheck);
             throw new ArgumentException(message);
@@ -809,7 +809,7 @@
       // but not yet is the map. Check if we have a default value.
       if (arg.getDefaultValue() == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CLI_ERROR_MISSING_PROPERTY.get(s.getAttributeName());
         throw new ArgumentException(message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliMain.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliMain.java
index 7ebe21d..5f25b17 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliMain.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliMain.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.admin.client.cli;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.OutputStream;
 import java.io.PrintStream;
@@ -36,6 +36,7 @@
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.NullOutputStream;
 import org.opends.server.util.BuildVersion;
+import org.opends.server.util.StaticUtils;
 import org.opends.server.util.args.ArgumentException;
 
 import static org.opends.server.admin.client.cli.DsFrameworkCliReturnCode.*;
@@ -43,7 +44,8 @@
 import static org.opends.messages.DSConfigMessages.*;
 import static org.opends.messages.ToolMessages.*;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
+
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -153,14 +155,14 @@
     DsFrameworkCliParser argParser ;
     try
     {
-      Message toolDescription = INFO_ADMIN_TOOL_DESCRIPTION.get();
+      LocalizableMessage toolDescription = INFO_ADMIN_TOOL_DESCRIPTION.get();
       argParser = new DsFrameworkCliParser(CLASS_NAME,
           toolDescription, false);
       argParser.initializeParser(out);
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CANNOT_INITIALIZE_ARGS.getReturnCode();
@@ -173,7 +175,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -199,7 +201,7 @@
 
     if (argParser.getSubCommand() == null)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(
               ERR_DSCFG_ERROR_MISSING_SUBCOMMAND.get());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println();
@@ -260,13 +262,13 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CANNOT_INITIALIZE_ARGS.getReturnCode();
     }
 
-    Message msg = returnCode.getMessage();
+    LocalizableMessage msg = returnCode.getMessage();
     if ( (returnCode == SUCCESSFUL)
          ||
          (returnCode == SUCCESSFUL_NOP))
@@ -277,10 +279,9 @@
       }
     }
     else
-    if (msg != null &&
-            msg.getDescriptor().getId() != ERR_ADMIN_NO_MESSAGE.getId())
+    if (msg != null && StaticUtils.hasDescriptor(msg, ERR_ADMIN_NO_MESSAGE))
     {
-      MessageBuilder mb = new MessageBuilder(INFO_ADMIN_ERROR.get());
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder(INFO_ADMIN_ERROR.get());
       mb.append(msg);
       err.println(wrapText(mb.toString(), MAX_LINE_WIDTH));
       if (argParser.isVerbose() && (adsException != null))
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java
index c8d60c1..7bc489d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliParser.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.client.cli;
 
@@ -45,7 +46,7 @@
 
 import org.opends.admin.ads.ADSContextException;
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.util.args.ArgumentException;
 import org.opends.server.util.args.BooleanArgument;
 import org.opends.server.util.args.SubCommand;
@@ -80,7 +81,7 @@
    *          Indicates whether subcommand and long argument names
    *          should be treated in a case-sensitive manner.
    */
-  public DsFrameworkCliParser(String mainClassName, Message toolDescription,
+  public DsFrameworkCliParser(String mainClassName, LocalizableMessage toolDescription,
       boolean longArgumentsCaseSensitive)
   {
     super(mainClassName, toolDescription, longArgumentsCaseSensitive);
@@ -222,7 +223,7 @@
       }
       catch (NamingException e)
       {
-        Message message = ERR_ADMIN_CANNOT_CONNECT_TO_ADS.get(host);
+        LocalizableMessage message = ERR_ADMIN_CANNOT_CONNECT_TO_ADS.get(host);
         try
         {
           err.write(wrapText(message, MAX_LINE_WIDTH).getBytes());
@@ -245,7 +246,7 @@
       }
       catch (NamingException e)
       {
-        Message message = ERR_ADMIN_CANNOT_CONNECT_TO_ADS.get(host);
+        LocalizableMessage message = ERR_ADMIN_CANNOT_CONNECT_TO_ADS.get(host);
         try
         {
           err.write(wrapText(message, MAX_LINE_WIDTH).getBytes());
@@ -267,7 +268,7 @@
       }
       catch (NamingException e)
       {
-        Message message = ERR_ADMIN_CANNOT_CONNECT_TO_ADS.get(host);
+        LocalizableMessage message = ERR_ADMIN_CANNOT_CONNECT_TO_ADS.get(host);
         try
         {
           err.write(wrapText(message, MAX_LINE_WIDTH).getBytes());
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliReturnCode.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliReturnCode.java
index 4daecab..6805c99 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliReturnCode.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliReturnCode.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.client.cli;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.AdminMessages.*;
 
@@ -153,10 +154,10 @@
     private final int returnCode;
 
     // The message id to be used of the value.
-    private final Message message;
+    private final LocalizableMessage message;
 
     // Private constructor.
-    private DsFrameworkCliReturnCode(int returnCode, Message message)
+    private DsFrameworkCliReturnCode(int returnCode, LocalizableMessage message)
     {
       this.returnCode = returnCode;
       this.message = message;
@@ -167,7 +168,7 @@
      *
      * @return The corresponding message.
      */
-    public Message getMessage()
+    public LocalizableMessage getMessage()
     {
       return message;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java
index 94dcaf0..19b96f2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/DsFrameworkCliServer.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.client.cli;
 
@@ -50,8 +51,8 @@
 import org.opends.admin.ads.ADSContextException;
 import org.opends.admin.ads.ADSContext.ServerProperty;
 import org.opends.admin.ads.ADSContextException.ErrorType;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.tools.dsconfig.ArgumentExceptionFactory;
 import org.opends.server.util.args.Argument;
 import org.opends.server.util.args.ArgumentException;
@@ -67,19 +68,19 @@
 public class DsFrameworkCliServer implements DsFrameworkCliSubCommandGroup
 {
   // Strings used in property help.
-  private final static Message DESCRIPTION_OPTIONS_TITLE =
+  private final static LocalizableMessage DESCRIPTION_OPTIONS_TITLE =
     INFO_DSCFG_HELP_DESCRIPTION_OPTION.get();
 
-  private final static Message DESCRIPTION_OPTIONS_READ =
+  private final static LocalizableMessage DESCRIPTION_OPTIONS_READ =
     INFO_DSCFG_HELP_DESCRIPTION_READ.get();
 
-  private final static Message DESCRIPTION_OPTIONS_WRITE =
+  private final static LocalizableMessage DESCRIPTION_OPTIONS_WRITE =
     INFO_DSCFG_HELP_DESCRIPTION_WRITE.get();
 
-  private final static Message DESCRIPTION_OPTIONS_MANDATORY =
+  private final static LocalizableMessage DESCRIPTION_OPTIONS_MANDATORY =
     INFO_DSCFG_HELP_DESCRIPTION_MANDATORY.get();
 
-  private final static Message DESCRIPTION_OPTIONS_SINGLE =
+  private final static LocalizableMessage DESCRIPTION_OPTIONS_SINGLE =
     INFO_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED.get();
 
   /**
@@ -362,7 +363,7 @@
       ServerProperty prop = ServerProperty.ID;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null,
-          prop.getAttributeName(), false, false, true, Message.raw(""), null,
+          prop.getAttributeName(), false, false, true, LocalizableMessage.raw(""), null,
           null, null);
       serverProperties.put(prop, arg);
     }
@@ -375,7 +376,7 @@
       String attName = prop.getAttributeName();
       readonlyServerProperties.add(prop);
       StringArgument arg = new StringArgument(attName, null, attName, true,
-          false, true, Message.raw(""), "localhost", null, null);
+          false, true, LocalizableMessage.raw(""), "localhost", null, null);
       serverProperties.put(prop, arg);
     }
 
@@ -386,7 +387,7 @@
       ServerProperty prop = ServerProperty.LDAP_PORT;
       String attName = prop.getAttributeName();
       IntegerArgument arg = new IntegerArgument(attName, null, attName, true,
-          true, true, Message.raw(attName), 389, null, null);
+          true, true, LocalizableMessage.raw(attName), 389, null, null);
       serverProperties.put(prop, arg);
     }
 
@@ -397,7 +398,7 @@
       ServerProperty prop = ServerProperty.JMX_PORT;
       String attName = prop.getAttributeName();
       IntegerArgument arg = new IntegerArgument(attName, null, attName,
-          false, true, Message.raw(attName), null);
+          false, true, LocalizableMessage.raw(attName), null);
       arg.setMultiValued(true);
       serverProperties.put(prop, arg);
     }
@@ -409,7 +410,7 @@
       ServerProperty prop = ServerProperty.JMXS_PORT;
       String attName = prop.getAttributeName();
       IntegerArgument arg = new IntegerArgument(attName, null, attName,
-          false, true, Message.raw(attName), null);
+          false, true, LocalizableMessage.raw(attName), null);
       arg.setMultiValued(true);
       serverProperties.put(prop, arg);
     }
@@ -421,7 +422,7 @@
       ServerProperty prop = ServerProperty.LDAPS_PORT;
       String attName = prop.getAttributeName();
       IntegerArgument arg = new IntegerArgument(attName, null, attName,
-          false, true, Message.raw(attName), null);
+          false, true, LocalizableMessage.raw(attName), null);
       arg.setMultiValued(true);
       serverProperties.put(prop, arg);
     }
@@ -433,7 +434,7 @@
       ServerProperty prop = ServerProperty.CERTIFICATE;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null, attName, false,
-          false, true, Message.raw(attName), null, null, null);
+          false, true, LocalizableMessage.raw(attName), null, null, null);
       serverProperties.put(prop, arg);
     }
 
@@ -444,7 +445,7 @@
       ServerProperty prop = ServerProperty.INSTANCE_PATH;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null, attName, false,
-          false, true, Message.raw(attName), null, null, null);
+          false, true, LocalizableMessage.raw(attName), null, null, null);
       serverProperties.put(prop, arg);
     }
 
@@ -455,7 +456,7 @@
       ServerProperty prop = ServerProperty.DESCRIPTION;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null, attName, false,
-          false, true, Message.raw(attName), null, null, null);
+          false, true, LocalizableMessage.raw(attName), null, null, null);
       serverProperties.put(prop, arg);
     }
 
@@ -466,7 +467,7 @@
       ServerProperty prop = ServerProperty.HOST_OS;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null, attName, false,
-          false, true, Message.raw(attName), null, null, null);
+          false, true, LocalizableMessage.raw(attName), null, null, null);
       serverProperties.put(prop, arg);
     }
 
@@ -532,7 +533,7 @@
       ServerProperty prop = ServerProperty.LOCATION;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null, attName, false,
-          false, true, Message.raw(attName), null, null, null);
+          false, true, LocalizableMessage.raw(attName), null, null, null);
       serverProperties.put(prop, arg);
     }
 
@@ -543,7 +544,7 @@
       ServerProperty prop = ServerProperty.GROUPS;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null, attName, false,
-          true, true, Message.raw(attName), null, null, null);
+          true, true, LocalizableMessage.raw(attName), null, null, null);
       arg.setHidden(true);
       serverProperties.put(prop, arg);
     }
@@ -555,7 +556,7 @@
       ServerProperty prop = ServerProperty.INSTANCE_KEY_ID;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null, prop
-          .getAttributeName(), false, false, true, Message.raw(""), null, null,
+          .getAttributeName(), false, false, true, LocalizableMessage.raw(""), null, null,
           null);
       serverProperties.put(prop, arg);
     }
@@ -567,7 +568,7 @@
       ServerProperty prop = ServerProperty.INSTANCE_PUBLIC_KEY_CERTIFICATE;
       String attName = prop.getAttributeName();
       StringArgument arg = new StringArgument(attName, null, prop
-          .getAttributeName(), false, false, true, Message.raw(""), null, null,
+          .getAttributeName(), false, false, true, LocalizableMessage.raw(""), null, null,
           null);
       serverProperties.put(prop, arg);
     }
@@ -922,23 +923,23 @@
           .getServerPropFromName(propertyName);
       if (serverProperty == null)
       {
-        Message message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
+        LocalizableMessage message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
         throw new ArgumentException(message);
       }
 
       // Check that propName is not hidden.
       if (serverProperties.get(serverProperty).isHidden())
       {
-        Message message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
+        LocalizableMessage message = ERR_CLI_ERROR_PROPERTY_UNRECOGNIZED.get(propertyName);
         throw new ArgumentException(message);
       }
 
       // Check the property Syntax.
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       Argument arg = serverProperties.get(serverProperty) ;
       if ( ! arg.valueIsAcceptable(value, invalidReason))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CLI_ERROR_INVALID_PROPERTY_VALUE.get(propertyName, value);
         throw new ArgumentException(message);
       }
@@ -969,7 +970,7 @@
       // but not yet is the map. Check if we have a default value.
       if (arg.getDefaultValue() == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CLI_ERROR_MISSING_PROPERTY.get(s.getAttributeName());
         throw new ArgumentException(message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/SecureConnectionCliArgs.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/SecureConnectionCliArgs.java
index af56420..4954532 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/SecureConnectionCliArgs.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/SecureConnectionCliArgs.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.admin.client.cli;
@@ -32,8 +32,8 @@
 import static org.opends.server.loggers.debug.DebugLogger.getTracer;
 import static org.opends.messages.AdminToolMessages.*;
 import static org.opends.messages.ToolMessages.*;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.tools.ToolConstants.*;
 import static org.opends.server.util.ServerConstants.MAX_LINE_WIDTH;
 import static org.opends.server.util.StaticUtils.wrapText;
@@ -315,7 +315,7 @@
         // read the password from the stdin.
         try
         {
-          out.write(INFO_LDAPAUTH_PASSWORD_PROMPT.get(dn).getBytes());
+          out.write(INFO_LDAPAUTH_PASSWORD_PROMPT.get(dn).toString().getBytes());
           out.flush();
           char[] pwChars = PasswordReader.readPassword();
           bindPasswordValue = new String(pwChars);
@@ -481,7 +481,7 @@
     argList.add(hostNameArg);
 
 
-    Message portDescription = INFO_DESCRIPTION_PORT.get();
+    LocalizableMessage portDescription = INFO_DESCRIPTION_PORT.get();
     if (alwaysSSL) {
       portDescription = INFO_DESCRIPTION_ADMIN_PORT.get();
     }
@@ -640,15 +640,15 @@
   /**
    * Indication if provided global options are validate.
    *
-   * @param buf the MessageBuilder to write the error messages.
+   * @param buf the LocalizableMessageBuilder to write the error messages.
    * @return return code.
    */
-  public int validateGlobalOptions(MessageBuilder buf)
+  public int validateGlobalOptions(LocalizableMessageBuilder buf)
   {
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     // Couldn't have at the same time bindPassword and bindPasswordFile
     if (bindPasswordArg.isPresent() && bindPasswordFileArg.isPresent()) {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           bindPasswordArg.getLongIdentifier(),
           bindPasswordFileArg.getLongIdentifier());
       errors.add(message);
@@ -657,19 +657,19 @@
     // Couldn't have at the same time trustAll and
     // trustStore related arg
     if (trustAllArg.isPresent() && trustStorePathArg.isPresent()) {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           trustAllArg.getLongIdentifier(),
           trustStorePathArg.getLongIdentifier());
       errors.add(message);
     }
     if (trustAllArg.isPresent() && trustStorePasswordArg.isPresent()) {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           trustAllArg.getLongIdentifier(),
           trustStorePasswordArg.getLongIdentifier());
       errors.add(message);
     }
     if (trustAllArg.isPresent() && trustStorePasswordFileArg.isPresent()) {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           trustAllArg.getLongIdentifier(),
           trustStorePasswordFileArg.getLongIdentifier());
       errors.add(message);
@@ -679,7 +679,7 @@
     // trustStorePasswordFileArg
     if (trustStorePasswordArg.isPresent()
         && trustStorePasswordFileArg.isPresent()) {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           trustStorePasswordArg.getLongIdentifier(),
           trustStorePasswordFileArg.getLongIdentifier());
       errors.add(message);
@@ -691,7 +691,7 @@
       String value = trustStorePathArg.getValue();
       if (!canRead(trustStorePathArg.getValue()))
       {
-        Message message = ERR_CANNOT_READ_TRUSTSTORE.get(
+        LocalizableMessage message = ERR_CANNOT_READ_TRUSTSTORE.get(
             value);
         errors.add(message);
       }
@@ -703,7 +703,7 @@
       String value = keyStorePathArg.getValue();
       if (!canRead(trustStorePathArg.getValue()))
       {
-        Message message = ERR_CANNOT_READ_KEYSTORE.get(
+        LocalizableMessage message = ERR_CANNOT_READ_KEYSTORE.get(
             value);
         errors.add(message);
       }
@@ -713,14 +713,14 @@
     // useSSLArg
     if (useStartTLSArg.isPresent()
         && useSSLArg.isPresent()) {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           useStartTLSArg
           .getLongIdentifier(), useSSLArg.getLongIdentifier());
       errors.add(message);
     }
     if (errors.size() > 0)
     {
-      for (Message error : errors)
+      for (LocalizableMessage error : errors)
       {
         if (buf.length() > 0)
         {
@@ -741,7 +741,7 @@
    */
   public int validateGlobalOptions(PrintStream err)
   {
-    MessageBuilder buf = new MessageBuilder();
+    LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
     int returnValue = validateGlobalOptions(buf);
     if (buf.length() > 0)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/SecureConnectionCliParser.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/SecureConnectionCliParser.java
index 30ffdee..2928949 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/SecureConnectionCliParser.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/cli/SecureConnectionCliParser.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client.cli;
@@ -42,8 +43,8 @@
 import javax.net.ssl.KeyManager;
 
 import org.opends.admin.ads.util.ApplicationTrustManager;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.util.PasswordReader;
@@ -115,7 +116,7 @@
    *          should be treated in a case-sensitive manner.
    */
   protected SecureConnectionCliParser(String mainClassName,
-      Message toolDescription, boolean longArgumentsCaseSensitive)
+      LocalizableMessage toolDescription, boolean longArgumentsCaseSensitive)
   {
     super(mainClassName, toolDescription, longArgumentsCaseSensitive);
   }
@@ -171,7 +172,7 @@
         // read the password from the stdin.
         try
         {
-          out.write(INFO_LDAPAUTH_PASSWORD_PROMPT.get(dn).getBytes());
+          out.write(INFO_LDAPAUTH_PASSWORD_PROMPT.get(dn).toString().getBytes());
           out.flush();
           char[] pwChars = PasswordReader.readPassword();
           bindPasswordValue = new String(pwChars);
@@ -368,10 +369,10 @@
   /**
    * Indication if provided global options are validate.
    *
-   * @param buf the MessageBuilder to write the error messages.
+   * @param buf the LocalizableMessageBuilder to write the error messages.
    * @return return code.
    */
-  public int validateGlobalOptions(MessageBuilder buf)
+  public int validateGlobalOptions(LocalizableMessageBuilder buf)
   {
     int ret = secureArgsList.validateGlobalOptions(buf) ;
 
@@ -380,7 +381,7 @@
     if (noPropertiesFileArg.isPresent()
         && propertiesFileArg.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           noPropertiesFileArg.getLongIdentifier(), propertiesFileArg
               .getLongIdentifier());
       if (buf.length() > 0)
@@ -401,7 +402,7 @@
    */
   public int validateGlobalOptions(PrintStream err)
   {
-    MessageBuilder buf = new MessageBuilder();
+    LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
     int returnValue = validateGlobalOptions(buf);
     if (buf.length() > 0)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/ldap/LDAPDriver.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/ldap/LDAPDriver.java
index 0f1ff08..73a3082 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/ldap/LDAPDriver.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/ldap/LDAPDriver.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.admin.client.ldap;
 
@@ -47,7 +47,7 @@
 import javax.naming.directory.Attributes;
 import javax.naming.ldap.LdapName;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.AggregationPropertyDefinition;
 import org.opends.server.admin.Configuration;
@@ -480,7 +480,7 @@
         throw new OperationRejectedException(OperationType.DELETE, d
             .getUserFriendlyName());
       } else {
-        Message m = Message.raw("%s", e.getMessage());
+        LocalizableMessage m = LocalizableMessage.raw("%s", e.getMessage());
         throw new OperationRejectedException(OperationType.DELETE, d
             .getUserFriendlyName(), m);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/ldap/LDAPManagedObject.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/ldap/LDAPManagedObject.java
index 355c6e5..31e5f4e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/ldap/LDAPManagedObject.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/ldap/LDAPManagedObject.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client.ldap;
@@ -39,7 +40,7 @@
 import javax.naming.ldap.LdapName;
 import javax.naming.ldap.Rdn;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AggregationPropertyDefinition;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.ConfigurationClient;
@@ -216,7 +217,7 @@
             throw new OperationRejectedException(OperationType.CREATE, d
                 .getUserFriendlyName());
           } else {
-            Message m = Message.raw("%s", e.getMessage());
+            LocalizableMessage m = LocalizableMessage.raw("%s", e.getMessage());
             throw new OperationRejectedException(OperationType.CREATE, d
                 .getUserFriendlyName(), m);
           }
@@ -267,7 +268,7 @@
         throw new OperationRejectedException(OperationType.CREATE, d
             .getUserFriendlyName());
       } else {
-        Message m = Message.raw("%s", e.getMessage());
+        LocalizableMessage m = LocalizableMessage.raw("%s", e.getMessage());
         throw new OperationRejectedException(OperationType.CREATE, d
             .getUserFriendlyName(), m);
       }
@@ -322,7 +323,7 @@
           throw new OperationRejectedException(OperationType.MODIFY, d
               .getUserFriendlyName());
         } else {
-          Message m = Message.raw("%s", e.getMessage());
+          LocalizableMessage m = LocalizableMessage.raw("%s", e.getMessage());
           throw new OperationRejectedException(OperationType.MODIFY, d
               .getUserFriendlyName(), m);
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/spi/AbstractManagedObject.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/spi/AbstractManagedObject.java
index a0b51e0..4ec9b48 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/spi/AbstractManagedObject.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/spi/AbstractManagedObject.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.client.spi;
 
@@ -35,7 +36,7 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.ConfigurationClient;
@@ -317,7 +318,7 @@
     }
 
     // Now enforce any constraints.
-    List<Message> messages = new LinkedList<Message>();
+    List<LocalizableMessage> messages = new LinkedList<LocalizableMessage>();
     boolean isAcceptable = true;
     ManagementContext context = getDriver().getManagementContext();
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/client/spi/Driver.java b/opendj3-server-dev/src/server/org/opends/server/admin/client/spi/Driver.java
index a069354..4a78d09 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/client/spi/Driver.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/client/spi/Driver.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.admin.client.spi;
@@ -37,7 +38,7 @@
 import java.util.List;
 import java.util.SortedSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AbsoluteInheritedDefaultBehaviorProvider;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.AliasDefaultBehaviorProvider;
@@ -777,7 +778,7 @@
     // The targeted managed object is guaranteed to exist, so enforce
     // any constraints.
     AbstractManagedObjectDefinition<?, ?> d = path.getManagedObjectDefinition();
-    List<Message> messages = new LinkedList<Message>();
+    List<LocalizableMessage> messages = new LinkedList<LocalizableMessage>();
     boolean isAcceptable = true;
 
     for (Constraint constraint : d.getAllConstraints()) {
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/doc/ConfigGuideGeneration.java b/opendj3-server-dev/src/server/org/opends/server/admin/doc/ConfigGuideGeneration.java
index 78d233f..5603848 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/doc/ConfigGuideGeneration.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/doc/ConfigGuideGeneration.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.admin.doc;
 
@@ -34,7 +34,7 @@
 import java.util.Properties;
 import java.util.TreeMap;
 import java.util.TreeSet;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.ACIPropertyDefinition;
 import org.opends.server.admin.AbsoluteInheritedDefaultBehaviorProvider;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
@@ -715,7 +715,7 @@
 
     String action = "None";
     if (prop.getAdministratorAction() != null) {
-      Message synopsis = prop.getAdministratorAction().getSynopsis();
+      LocalizableMessage synopsis = prop.getAdministratorAction().getSynopsis();
       Type actionType = prop.getAdministratorAction().getType();
       String actionStr = "";
       if (actionType == Type.COMPONENT_RESTART) {
@@ -1451,7 +1451,7 @@
     return "<br>\n";
   }
 
-  private void paragraph(Message description) {
+  private void paragraph(LocalizableMessage description) {
     if (description != null) {
       paragraph(description.toString());
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/AbstractConfigListenerAdaptor.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/AbstractConfigListenerAdaptor.java
index c59b137..60235e6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/AbstractConfigListenerAdaptor.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/AbstractConfigListenerAdaptor.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -29,8 +30,8 @@
 
 import java.util.Collection;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 
@@ -56,10 +57,10 @@
    * @param unacceptableReason
    *          The single message to which messages should be appended.
    */
-  protected final void generateUnacceptableReason(Collection<Message> reasons,
-      MessageBuilder unacceptableReason) {
+  protected final void generateUnacceptableReason(Collection<LocalizableMessage> reasons,
+      LocalizableMessageBuilder unacceptableReason) {
     boolean isFirst = true;
-    for (Message reason : reasons) {
+    for (LocalizableMessage reason : reasons) {
       if (isFirst) {
         isFirst = false;
       } else {
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 85d2f20..20bd5c8 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
@@ -33,8 +33,8 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.Constraint;
 import org.opends.server.admin.DecodingException;
@@ -213,7 +213,7 @@
    * {@inheritDoc}
    */
   public boolean configAddIsAcceptable(ConfigEntry configEntry,
-      MessageBuilder unacceptableReason) {
+      LocalizableMessageBuilder unacceptableReason) {
     DN dn = configEntry.getDN();
     AttributeValue av = dn.rdn().getAttributeValue(0);
     String name = av.getValue().toString().trim();
@@ -257,7 +257,7 @@
     }
 
     // Let the add listener decide.
-    List<Message> reasons = new LinkedList<Message>();
+    List<LocalizableMessage> reasons = new LinkedList<LocalizableMessage>();
     if (listener.isConfigurationAddAcceptable(cachedManagedObject, reasons)) {
       return true;
     } else {
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 7bcaa36..67e89df 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
@@ -37,8 +37,8 @@
 import java.util.Set;
 
 import org.opends.messages.AdminMessages;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.AbsoluteInheritedDefaultBehaviorProvider;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.AliasDefaultBehaviorProvider;
@@ -262,7 +262,7 @@
 
 
       public boolean configChangeIsAcceptable(ConfigEntry configEntry,
-          MessageBuilder unacceptableReason) {
+          LocalizableMessageBuilder unacceptableReason) {
         ConfigEntry dependentConfigEntry = getConfigEntry(dn);
         if (dependentConfigEntry != null) {
           return ConfigChangeListenerAdaptor.this.configChangeIsAcceptable(
@@ -310,7 +310,7 @@
 
 
       public boolean configDeleteIsAcceptable(ConfigEntry configEntry,
-          MessageBuilder unacceptableReason) {
+          LocalizableMessageBuilder unacceptableReason) {
         // Always acceptable.
         return true;
       }
@@ -369,7 +369,7 @@
    * {@inheritDoc}
    */
   public boolean configChangeIsAcceptable(ConfigEntry configEntry,
-      MessageBuilder unacceptableReason) {
+      LocalizableMessageBuilder unacceptableReason) {
     return configChangeIsAcceptable(configEntry, unacceptableReason,
         configEntry);
   }
@@ -396,7 +396,7 @@
    *         does not.
    */
   public boolean configChangeIsAcceptable(ConfigEntry configEntry,
-      MessageBuilder unacceptableReason, ConfigEntry newConfigEntry) {
+      LocalizableMessageBuilder unacceptableReason, ConfigEntry newConfigEntry) {
     try {
       ServerManagementContext context = ServerManagementContext.getInstance();
       cachedManagedObject = context.decode(path, configEntry, newConfigEntry);
@@ -414,7 +414,7 @@
     }
 
     // Let the change listener decide.
-    List<Message> reasons = new LinkedList<Message>();
+    List<LocalizableMessage> reasons = new LinkedList<LocalizableMessage>();
     if (listener.isConfigurationChangeAcceptable(cachedManagedObject,reasons)) {
       return true;
     } else {
@@ -471,7 +471,7 @@
       if (configEntry != null) {
         return configEntry;
       } else {
-        Message message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST
+        LocalizableMessage message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST
             .get(String.valueOf(dn));
         ErrorLogger.logError(message);
       }
@@ -481,7 +481,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = AdminMessages.ERR_ADMIN_CANNOT_GET_MANAGED_OBJECT.get(
+      LocalizableMessage message = AdminMessages.ERR_ADMIN_CANNOT_GET_MANAGED_OBJECT.get(
           String.valueOf(dn), StaticUtils.getExceptionMessage(e));
       ErrorLogger.logError(message);
     }
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 99f5d3d..cd99cc4 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
@@ -34,8 +34,8 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.Constraint;
 import org.opends.server.admin.DecodingException;
@@ -214,7 +214,7 @@
    * {@inheritDoc}
    */
   public boolean configDeleteIsAcceptable(ConfigEntry configEntry,
-      MessageBuilder unacceptableReason) {
+      LocalizableMessageBuilder unacceptableReason) {
     DN dn = configEntry.getDN();
     AttributeValue av = dn.rdn().getAttributeValue(0);
     String name = av.getValue().toString().trim();
@@ -249,7 +249,7 @@
       return false;
     }
 
-    List<Message> reasons = new LinkedList<Message>();
+    List<LocalizableMessage> reasons = new LinkedList<LocalizableMessage>();
 
     // Enforce any constraints.
     boolean isDeleteAllowed = true;
@@ -263,7 +263,7 @@
             isDeleteAllowed = false;
           }
         } catch (ConfigException e) {
-          Message message = ERR_SERVER_CONSTRAINT_EXCEPTION.get(e
+          LocalizableMessage message = ERR_SERVER_CONSTRAINT_EXCEPTION.get(e
               .getMessageObject());
           reasons.add(message);
           isDeleteAllowed = false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigExceptionFactory.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigExceptionFactory.java
index 4c9b237..bcb3003 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigExceptionFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigExceptionFactory.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -77,7 +78,7 @@
    */
   public ConfigException createDecodingExceptionAdaptor(DN dn,
       DefinitionDecodingException e) {
-    Message message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM.
+    LocalizableMessage message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM.
         get(String.valueOf(dn), stackTraceToSingleLineString(e));
     return new ConfigException(message, e);
   }
@@ -96,7 +97,7 @@
   public ConfigException createDecodingExceptionAdaptor(
       ServerManagedObjectDecodingException e) {
     DN dn = e.getPartialManagedObject().getDN();
-    Message message =
+    LocalizableMessage message =
             AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM.get(
                     String.valueOf(dn),
         stackTraceToSingleLineString(e));
@@ -116,7 +117,7 @@
   public ConfigException createDecodingExceptionAdaptor(
       ConstraintViolationException e) {
     DN dn = e.getManagedObject().getDN();
-    Message message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM
+    LocalizableMessage message = AdminMessages.ERR_ADMIN_MANAGED_OBJECT_DECODING_PROBLEM
         .get(String.valueOf(dn), stackTraceToSingleLineString(e));
     return new ConfigException(message, e);
   }
@@ -139,7 +140,7 @@
 
   public ConfigException createClassLoadingExceptionAdaptor(DN dn,
       String className, Exception e) {
-    Message message = AdminMessages.ERR_ADMIN_CANNOT_INSTANTIATE_CLASS.
+    LocalizableMessage message = AdminMessages.ERR_ADMIN_CANNOT_INSTANTIATE_CLASS.
         get(String.valueOf(className), String.valueOf(dn),
             stackTraceToSingleLineString(e));
     return new ConfigException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationAddListener.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationAddListener.java
index 37d4bbe..817f424 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationAddListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationAddListener.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -59,7 +60,7 @@
    *         acceptable, or <code>false</code> if it is not.
    */
   public boolean isConfigurationAddAcceptable(T configuration,
-      List<Message> unacceptableReasons);
+      List<LocalizableMessage> unacceptableReasons);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationChangeListener.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationChangeListener.java
index dc89c3f..383eb1a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationChangeListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationChangeListener.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -60,7 +61,7 @@
    *         acceptable, or <code>false</code> if it is not.
    */
   public boolean isConfigurationChangeAcceptable(T configuration,
-      List<Message> unacceptableReasons);
+      List<LocalizableMessage> unacceptableReasons);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationDeleteListener.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationDeleteListener.java
index 73e49d9..7006ae8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationDeleteListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConfigurationDeleteListener.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -59,7 +60,7 @@
    *         acceptable, or <code>false</code> if it is not.
    */
   public boolean isConfigurationDeleteAcceptable(T configuration,
-      List<Message> unacceptableReasons);
+      List<LocalizableMessage> unacceptableReasons);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConstraintViolationException.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConstraintViolationException.java
index 960d893..26cb265 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ConstraintViolationException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ConstraintViolationException.java
@@ -35,8 +35,8 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.DecodingException;
 import org.forgerock.util.Reject;
 
@@ -60,7 +60,7 @@
 
 
   // Gets the default message.
-  private static Message getDefaultMessage(Collection<Message> messages) {
+  private static LocalizableMessage getDefaultMessage(Collection<LocalizableMessage> messages) {
     Reject.ifNull(messages);
     Reject.ifFalse(!messages.isEmpty());
 
@@ -76,14 +76,14 @@
 
 
   // Merge the messages into a single message.
-  private static Message getSingleMessage(Collection<Message> messages) {
+  private static LocalizableMessage getSingleMessage(Collection<LocalizableMessage> messages) {
     if (messages.size() == 1) {
       return messages.iterator().next();
     } else {
-      MessageBuilder builder = new MessageBuilder();
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
 
       boolean isFirst = true;
-      for (Message m : messages) {
+      for (LocalizableMessage m : messages) {
         if (!isFirst) {
           builder.append(";  ");
         }
@@ -96,7 +96,7 @@
   }
 
   // The messages describing the constraint violations that occurred.
-  private final Collection<Message> messages;
+  private final Collection<LocalizableMessage> messages;
 
 
 
@@ -113,11 +113,11 @@
    *          non-empty).
    */
   public ConstraintViolationException(ServerManagedObject<?> managedObject,
-      Collection<Message> messages) {
+      Collection<LocalizableMessage> messages) {
     super(getDefaultMessage(messages));
 
     this.managedObject = managedObject;
-    this.messages = new ArrayList<Message>(messages);
+    this.messages = new ArrayList<LocalizableMessage>(messages);
   }
 
 
@@ -134,7 +134,7 @@
    *          occurred.
    */
   public ConstraintViolationException(ServerManagedObject<?> managedObject,
-      Message message) {
+      LocalizableMessage message) {
     this(managedObject, Collections.singleton(message));
   }
 
@@ -147,7 +147,7 @@
    * @return Returns an unmodifiable collection view of the messages
    *         describing the constraint violations that occurred.
    */
-  public Collection<Message> getMessages() {
+  public Collection<LocalizableMessage> getMessages() {
     return Collections.unmodifiableCollection(messages);
   }
 
@@ -160,7 +160,7 @@
    * @return Returns a single message listing all the messages
    *         combined into a single list separated by semi-colons.
    */
-  public Message getMessagesAsSingleMessage() {
+  public LocalizableMessage getMessagesAsSingleMessage() {
     return getSingleMessage(messages);
   }
 
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 11df7dc..c0baff1 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
@@ -40,7 +40,7 @@
 import org.opends.server.types.DN;
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.ResultCode;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -155,7 +155,7 @@
    * {@inheritDoc}
    */
   public boolean configAddIsAcceptable(ConfigEntry configEntry,
-      MessageBuilder unacceptableReason) {
+      LocalizableMessageBuilder unacceptableReason) {
     // Always acceptable.
     return true;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerConstraintHandler.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerConstraintHandler.java
index c49070f..c23db48 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerConstraintHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerConstraintHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -29,7 +30,7 @@
 
 import java.util.Collection;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.config.ConfigException;
 
 
@@ -90,7 +91,7 @@
    *           from being evaluated.
    */
   public boolean isDeleteAllowed(ServerManagedObject<?> managedObject,
-      Collection<Message> unacceptableReasons) throws ConfigException {
+      Collection<LocalizableMessage> unacceptableReasons) throws ConfigException {
     return true;
   }
 
@@ -123,7 +124,7 @@
    *           from being evaluated.
    */
   public boolean isUsable(ServerManagedObject<?> managedObject,
-      Collection<Message> unacceptableReasons) throws ConfigException {
+      Collection<LocalizableMessage> unacceptableReasons) throws ConfigException {
     return true;
   }
 
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 4490d1c..e755f9c 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
@@ -40,7 +40,7 @@
 import java.util.Set;
 import java.util.SortedSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.Constraint;
 import org.opends.server.admin.InstantiableRelationDefinition;
@@ -1174,7 +1174,7 @@
   void ensureIsUsable() throws ConstraintViolationException {
     // Enforce any constraints.
     boolean isUsable = true;
-    List<Message> reasons = new LinkedList<Message>();
+    List<LocalizableMessage> reasons = new LinkedList<LocalizableMessage>();
     for (Constraint constraint : definition.getAllConstraints()) {
       for (ServerConstraintHandler handler : constraint
           .getServerConstraintHandlers()) {
@@ -1183,7 +1183,7 @@
             isUsable = false;
           }
         } catch (ConfigException e) {
-          Message message = ERR_SERVER_CONSTRAINT_EXCEPTION.get(e
+          LocalizableMessage message = ERR_SERVER_CONSTRAINT_EXCEPTION.get(e
               .getMessageObject());
           reasons.add(message);
           isUsable = false;
@@ -1365,7 +1365,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_ADMIN_CANNOT_GET_LISTENER_BASE.get(
+      LocalizableMessage message = ERR_ADMIN_CANNOT_GET_LISTENER_BASE.get(
           String.valueOf(dn), stackTraceToSingleLineString(e));
       throw new ConfigException(message, e);
     }
@@ -1411,7 +1411,7 @@
     }
 
     // No parent entry could be found.
-    Message message = ERR_ADMIN_UNABLE_TO_REGISTER_LISTENER
+    LocalizableMessage message = ERR_ADMIN_UNABLE_TO_REGISTER_LISTENER
         .get(String.valueOf(baseDN));
     throw new ConfigException(message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectAddListener.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectAddListener.java
index 715dc7f..488d20a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectAddListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectAddListener.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.List;
 
@@ -60,7 +61,7 @@
    *         acceptable, or <code>false</code> if it is not.
    */
   public boolean isConfigurationAddAcceptable(
-      ServerManagedObject<? extends T> mo, List<Message> unacceptableReasons);
+      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectAddListenerAdaptor.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectAddListenerAdaptor.java
index bff285c..0b4771c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectAddListenerAdaptor.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectAddListenerAdaptor.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -29,7 +30,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.types.ConfigChangeResult;
 
@@ -91,7 +92,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(
-      ServerManagedObject<? extends T> mo, List<Message> unacceptableReasons) {
+      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons) {
     return listener.isConfigurationAddAcceptable(mo.getConfiguration(),
         unacceptableReasons);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectChangeListener.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectChangeListener.java
index 10b391c..349a11f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectChangeListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectChangeListener.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.List;
 
@@ -61,7 +62,7 @@
    *         acceptable, or <code>false</code> if it is not.
    */
   public boolean isConfigurationChangeAcceptable(
-      ServerManagedObject<? extends T> mo, List<Message> unacceptableReasons);
+      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectChangeListenerAdaptor.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectChangeListenerAdaptor.java
index 65635a5..f19ab36 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectChangeListenerAdaptor.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectChangeListenerAdaptor.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -29,7 +30,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.types.ConfigChangeResult;
 
@@ -93,7 +94,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      ServerManagedObject<? extends T> mo, List<Message> unacceptableReasons) {
+      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons) {
     return listener.isConfigurationChangeAcceptable(mo.getConfiguration(),
         unacceptableReasons);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDecodingException.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDecodingException.java
index 7e5126c..07b2e94 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDecodingException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDecodingException.java
@@ -35,8 +35,8 @@
 import java.util.Collections;
 import java.util.LinkedList;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.DecodingException;
 import org.opends.server.admin.ManagedObjectDefinition;
 import org.opends.server.admin.PropertyException;
@@ -58,7 +58,7 @@
 
 
   // Create the message.
-  private static Message createMessage(
+  private static LocalizableMessage createMessage(
       ServerManagedObject<?> partialManagedObject,
       Collection<PropertyException> causes) {
     Reject.ifNull(causes);
@@ -70,7 +70,7 @@
       return ERR_MANAGED_OBJECT_DECODING_EXCEPTION_SINGLE.get(d
           .getUserFriendlyName(), causes.iterator().next().getMessageObject());
     } else {
-      MessageBuilder builder = new MessageBuilder();
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
 
       boolean isFirst = true;
       for (PropertyException cause : causes) {
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDeleteListener.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDeleteListener.java
index 1594a24..cb23df6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDeleteListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDeleteListener.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.List;
 
@@ -61,7 +62,7 @@
    *         acceptable, or <code>false</code> if it is not.
    */
   public boolean isConfigurationDeleteAcceptable(
-      ServerManagedObject<? extends T> mo, List<Message> unacceptableReasons);
+      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDeleteListenerAdaptor.java b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDeleteListenerAdaptor.java
index e71d26b..9fa16f9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDeleteListenerAdaptor.java
+++ b/opendj3-server-dev/src/server/org/opends/server/admin/server/ServerManagedObjectDeleteListenerAdaptor.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -29,7 +30,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.types.ConfigChangeResult;
 
@@ -92,7 +93,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(
-      ServerManagedObject<? extends T> mo, List<Message> unacceptableReasons) {
+      ServerManagedObject<? extends T> mo, List<LocalizableMessage> unacceptableReasons) {
     return listener.isConfigurationDeleteAcceptable(mo.getConfiguration(),
         unacceptableReasons);
   }
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 50dc83a..2018081 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
@@ -45,7 +45,7 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AbsoluteInheritedDefaultBehaviorProvider;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.AggregationPropertyDefinition;
@@ -948,7 +948,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_ADMIN_CANNOT_GET_MANAGED_OBJECT.get(
+      LocalizableMessage message = ERR_ADMIN_CANNOT_GET_MANAGED_OBJECT.get(
           String.valueOf(dn), stackTraceToSingleLineString(e));
       throw new ConfigException(message, e);
     }
@@ -956,7 +956,7 @@
     // The configuration handler is free to return null indicating
     // that the entry does not exist.
     if (configEntry == null) {
-      Message message = ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST
+      LocalizableMessage message = ERR_ADMIN_MANAGED_OBJECT_DOES_NOT_EXIST
           .get(String.valueOf(dn));
       throw new ConfigException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/AccessControlHandler.java b/opendj3-server-dev/src/server/org/opends/server/api/AccessControlHandler.java
index d3805f1..3027477 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/AccessControlHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/AccessControlHandler.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.api;
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.AccessControlHandlerCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.*;
@@ -96,7 +96,7 @@
    */
   public boolean isConfigurationAcceptable(
       AccessControlHandlerCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation. It should be overridden by access control handler
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/AccessLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/api/AccessLogPublisher.java
index c3bb489..6cfdc2e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/AccessLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/AccessLogPublisher.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.api;
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.AccessLogPublisherCfg;
 import org.opends.server.core.*;
 import org.opends.server.types.*;
@@ -53,7 +53,7 @@
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationAcceptable(T configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation. It should be overridden by access log publisher
@@ -96,7 +96,7 @@
    *          information about the disconnect.
    */
   public void logDisconnect(ClientConnection clientConnection,
-      DisconnectReason disconnectReason, Message message)
+      DisconnectReason disconnectReason, LocalizableMessage message)
   {
     // Do nothing
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/AccountStatusNotificationHandler.java b/opendj3-server-dev/src/server/org/opends/server/api/AccountStatusNotificationHandler.java
index 96fffe8..b4cde83 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/AccountStatusNotificationHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/AccountStatusNotificationHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
 
@@ -29,7 +30,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.
        AccountStatusNotificationHandlerCfg;
 import org.opends.server.config.ConfigException;
@@ -106,7 +107,7 @@
   public boolean isConfigurationAcceptable(
                       AccountStatusNotificationHandlerCfg
                            configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by account status
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/AlertHandler.java b/opendj3-server-dev/src/server/org/opends/server/api/AlertHandler.java
index 1ca61f7..70d14a8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/AlertHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/AlertHandler.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -96,7 +97,7 @@
    */
   public boolean isConfigurationAcceptable(
                       AlertHandlerCfg configuration,
-                      List<Message> unacceptableReasons);
+                      List<LocalizableMessage> unacceptableReasons);
 
 
 
@@ -118,6 +119,6 @@
    */
   public void sendAlertNotification(AlertGenerator generator,
                                     String alertType,
-                                    Message alertMessage);
+                                    LocalizableMessage alertMessage);
 }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/AttributeSyntax.java b/opendj3-server-dev/src/server/org/opends/server/api/AttributeSyntax.java
index d7ad807..ce1551d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/AttributeSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/AttributeSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -36,7 +36,7 @@
 import org.opends.server.types.InitializationException;
 import org.forgerock.opendj.ldap.ByteSequence;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -97,7 +97,7 @@
    */
   public boolean isConfigurationAcceptable(
                       AttributeSyntaxCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by attribute syntax
@@ -210,7 +210,7 @@
    *          with this syntax, or {@code false} if not.
    */
   public abstract boolean valueIsAcceptable(ByteSequence value,
-                               MessageBuilder invalidReason);
+                               LocalizableMessageBuilder invalidReason);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicy.java b/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicy.java
index 8166b1f..31eef30 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicy.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  *      Portions Copyright 2014 ForgeRock AS
  */
 
@@ -31,16 +31,13 @@
 
 import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.config.ConfigConstants.*;
-import static org.opends.server.loggers.ErrorLogger.logError;
-import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.util.StaticUtils.stackTraceToSingleLineString;
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.slf4j.LocalizedLogger;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.loggers.debug.DebugLogger;
-import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.*;
 import org.opends.server.util.TimeThread;
 
@@ -54,9 +51,7 @@
   /**
    * The tracer object for the debug logger.
    */
-  private static final DebugTracer TRACER = DebugLogger.getTracer();
-
-
+  private static final LocalizedLogger logger = LocalizedLogger.getLocalizedLogger(AuthenticationPolicy.class);
 
   /**
    * Returns the authentication policy for the user provided user. The following
@@ -104,27 +99,25 @@
         }
         catch (Exception e)
         {
-          if (debugEnabled())
+          logger.trace(e.getMessage(), e);
+
+          if (logger.isTraceEnabled())
           {
-            TRACER.debugCaught(DebugLogLevel.ERROR, e);
+            logger.trace("Could not parse password policy subentry "
+                + "DN %s for user %s", v.getValue(),
+                userDNString, e);
           }
 
-          if (debugEnabled())
-          {
-            TRACER.debugError("Could not parse password policy subentry "
-                + "DN %s for user %s: %s", v.getValue().toString(),
-                userDNString, stackTraceToSingleLineString(e));
-          }
-
-          Message message = ERR_PWPSTATE_CANNOT_DECODE_SUBENTRY_VALUE_AS_DN
-              .get(v.getValue().toString(), userDNString, e.getMessage());
           if (useDefaultOnError)
           {
-            logError(message);
+            logger.error(ERR_PWPSTATE_CANNOT_DECODE_SUBENTRY_VALUE_AS_DN,
+                v.getValue().toString(), userDNString, e.getMessage());
             return DirectoryServer.getDefaultPasswordPolicy();
           }
           else
           {
+            LocalizableMessage message = ERR_PWPSTATE_CANNOT_DECODE_SUBENTRY_VALUE_AS_DN
+                .get(v.getValue().toString(), userDNString, e.getMessage());
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message,
                 e);
           }
@@ -134,18 +127,15 @@
             .getAuthenticationPolicy(subentryDN);
         if (policy == null)
         {
-          if (debugEnabled())
-          {
-            TRACER.debugError("Password policy subentry %s for user %s "
+          logger.trace("Password policy subentry %s for user %s "
                 + "is not defined in the Directory Server.",
-                String.valueOf(subentryDN), userDNString);
-          }
+                subentryDN, userDNString);
 
-          Message message = ERR_PWPSTATE_NO_SUCH_POLICY.get(userDNString,
+          LocalizableMessage message = ERR_PWPSTATE_NO_SUCH_POLICY.get(userDNString,
               String.valueOf(subentryDN));
           if (useDefaultOnError)
           {
-            logError(message);
+            //logger.error(message);
             return DirectoryServer.getDefaultPasswordPolicy();
           }
           else
@@ -155,11 +145,8 @@
           }
         }
 
-        if (debugEnabled())
-        {
-          TRACER.debugInfo("Using password policy subentry %s for user %s.",
-              String.valueOf(subentryDN), userDNString);
-        }
+        logger.trace("Using password policy subentry %s for user %s.",
+              subentryDN, userDNString);
 
         return policy;
       }
@@ -183,12 +170,9 @@
             {
               // This shouldn't happen but if it does debug log
               // this problem and fall back to default policy.
-              if (debugEnabled())
-              {
-                TRACER.debugError("Found unknown password policy subentry "
-                    + "DN %s for user %s", subentry.getDN().toString(),
+              logger.trace("Found unknown password policy subentry "
+                    + "DN %s for user %s", subentry.getDN(),
                     userDNString);
-              }
               break;
             }
             return policy;
@@ -196,10 +180,9 @@
         }
         catch (Exception e)
         {
-          if (debugEnabled())
-          {
-            TRACER.debugError("Could not parse password policy subentry "
-                + "DN %s for user %s: %s", subentry.getDN().toString(),
+          if (logger.isTraceEnabled()) {
+            logger.trace("Could not parse password policy subentry "
+                + "DN %s for user %s: %s", subentry.getDN(),
                 userDNString, stackTraceToSingleLineString(e));
           }
         }
@@ -207,11 +190,8 @@
     }
 
     // No authentication policy found, so use the global default.
-    if (debugEnabled())
-    {
-      TRACER.debugInfo("Using the default password policy for user %s",
+    logger.trace("Using the default password policy for user %s",
           userDNString);
-    }
 
     return DirectoryServer.getDefaultPasswordPolicy();
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyFactory.java b/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyFactory.java
index b08daa9..c97653f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyFactory.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 
 package org.opends.server.api;
@@ -30,7 +30,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.AuthenticationPolicyCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.InitializationException;
@@ -81,5 +81,5 @@
    *         configuration is acceptable, or <code>false</code> if it is not.
    */
   boolean isConfigurationAcceptable(T configuration,
-      List<Message> unacceptableReasons);
+      List<LocalizableMessage> unacceptableReasons);
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyState.java b/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyState.java
index 3b115e3..133864f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyState.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/AuthenticationPolicyState.java
@@ -38,7 +38,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.schema.GeneralizedTimeSyntax;
@@ -160,7 +160,7 @@
               attributeType.getNameOrOID(), entry.getName().toString());
         }
 
-        final Message message = ERR_PWPSTATE_CANNOT_DECODE_BOOLEAN
+        final LocalizableMessage message = ERR_PWPSTATE_CANNOT_DECODE_BOOLEAN
             .get(valueString, attributeType.getNameOrOID(), entry.getName()
                 .toString());
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -228,7 +228,7 @@
                 stackTraceToSingleLineString(e));
           }
 
-          final Message message = ERR_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME
+          final LocalizableMessage message = ERR_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME
               .get(v.getValue().toString(), attributeType.getNameOrOID(), entry
                   .getName().toString(), String.valueOf(e));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/Backend.java b/opendj3-server-dev/src/server/org/opends/server/api/Backend.java
index 370a7a3..432eb1e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/Backend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/Backend.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -149,7 +150,7 @@
    */
   public boolean isConfigurationAcceptable(
                       Configuration configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by backend implementations
@@ -1084,7 +1085,7 @@
           {
             if (subBaseDNs.length > 1)
             {
-              Message message =
+              LocalizableMessage message =
                       ERR_BACKEND_CANNOT_REMOVE_MULTIBASE_SUB_SUFFIX.
                               get(String.valueOf(subSuffixDN),
                                       String.valueOf(parentDN));
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/CertificateMapper.java b/opendj3-server-dev/src/server/org/opends/server/api/CertificateMapper.java
index 8082af7..82eba33 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/CertificateMapper.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/CertificateMapper.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -98,7 +99,7 @@
    */
   public boolean isConfigurationAcceptable(
                       CertificateMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by certificate mapper
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 950812b..25d4159 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
@@ -40,7 +40,7 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.plugin.PluginResult;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.PersistentSearch;
@@ -179,7 +179,7 @@
     mustEvaluateNetworkGroup = true;
     if (debugEnabled())
       {
-        Message message =
+        LocalizableMessage message =
                 INFO_CHANGE_NETWORK_GROUP.get(
                   getConnectionID(),
                   "null",
@@ -659,7 +659,7 @@
    */
   public abstract void disconnect(DisconnectReason disconnectReason,
                                   boolean sendNotification,
-                                  Message message);
+                                  LocalizableMessage message);
 
 
 
@@ -1063,7 +1063,7 @@
       {
         DN authDN = authenticationInfo.getAuthenticationDN();
 
-        Message message = INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGE
+        LocalizableMessage message = INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGE
                 .get(getConnectionID(), -1L,
                      String.valueOf(authDN),
                      privilege.getName(), result);
@@ -1082,7 +1082,7 @@
         {
           DN authDN = authenticationInfo.getAuthenticationDN();
 
-          Message message =
+          LocalizableMessage message =
                   INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGE.get(
                     getConnectionID(),
                     operation.getOperationID(),
@@ -1172,7 +1172,7 @@
       {
         DN authDN = authenticationInfo.getAuthenticationDN();
 
-        Message message =
+        LocalizableMessage message =
                 INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGES.get(
                   getConnectionID(), -1L,
                   String.valueOf(authDN),
@@ -1184,7 +1184,7 @@
       {
         DN authDN = authenticationInfo.getAuthenticationDN();
 
-        Message message = INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGES
+        LocalizableMessage message = INFO_CLIENTCONNECTION_AUDIT_HASPRIVILEGES
                 .get(
                   getConnectionID(),
                   operation.getOperationID(),
@@ -1711,7 +1711,7 @@
     if (this.networkGroup != networkGroup) {
       if (debugEnabled())
       {
-        Message message =
+        LocalizableMessage message =
                 INFO_CHANGE_NETWORK_GROUP.get(
                   getConnectionID(),
                   this.networkGroup.getID(),
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/CompressedSchema.java b/opendj3-server-dev/src/server/org/opends/server/api/CompressedSchema.java
index 78b075f..b03eb73 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/CompressedSchema.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/CompressedSchema.java
@@ -44,7 +44,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeBuilder;
@@ -123,7 +123,7 @@
     Entry<AttributeType, Set<String>> ad = adDecodeMap.get(id);
     if (ad == null)
     {
-      final Message message = ERR_COMPRESSEDSCHEMA_UNRECOGNIZED_AD_TOKEN
+      final LocalizableMessage message = ERR_COMPRESSEDSCHEMA_UNRECOGNIZED_AD_TOKEN
           .get(String.valueOf(id));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message);
@@ -209,7 +209,7 @@
     }
     else
     {
-      final Message message = ERR_COMPRESSEDSCHEMA_UNKNOWN_OC_TOKEN.get(String
+      final LocalizableMessage message = ERR_COMPRESSEDSCHEMA_UNKNOWN_OC_TOKEN.get(String
           .valueOf(id));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/ConfigAddListener.java b/opendj3-server-dev/src/server/org/opends/server/api/ConfigAddListener.java
index b67c64d..02da16c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/ConfigAddListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/ConfigAddListener.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
 
@@ -29,7 +30,7 @@
 
 import org.opends.server.config.ConfigEntry;
 import org.opends.server.types.ConfigChangeResult;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -60,7 +61,7 @@
    *          not.
    */
   public boolean configAddIsAcceptable(ConfigEntry configEntry,
-                      MessageBuilder unacceptableReason);
+                      LocalizableMessageBuilder unacceptableReason);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/ConfigChangeListener.java b/opendj3-server-dev/src/server/org/opends/server/api/ConfigChangeListener.java
index 12fe569..9263cea 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/ConfigChangeListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/ConfigChangeListener.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
 
@@ -29,7 +30,7 @@
 
 import org.opends.server.config.ConfigEntry;
 import org.opends.server.types.ConfigChangeResult;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -60,7 +61,7 @@
    *          not.
    */
   public boolean configChangeIsAcceptable(ConfigEntry configEntry,
-                      MessageBuilder unacceptableReason);
+                      LocalizableMessageBuilder unacceptableReason);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/ConfigDeleteListener.java b/opendj3-server-dev/src/server/org/opends/server/api/ConfigDeleteListener.java
index 91ec094..68b4703 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/ConfigDeleteListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/ConfigDeleteListener.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
 
@@ -29,7 +30,7 @@
 
 import org.opends.server.config.ConfigEntry;
 import org.opends.server.types.ConfigChangeResult;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -59,7 +60,7 @@
    *          the configuration, or {@code false} if not.
    */
   public boolean configDeleteIsAcceptable(ConfigEntry configEntry,
-                      MessageBuilder unacceptableReason);
+                      LocalizableMessageBuilder unacceptableReason);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/ConnectionHandler.java b/opendj3-server-dev/src/server/org/opends/server/api/ConnectionHandler.java
index f1e09b0..ba8d149 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/ConnectionHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/ConnectionHandler.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.api;
 
@@ -33,7 +33,7 @@
 import java.util.Collections;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.ConnectionHandlerCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.monitors.ConnectionHandlerMonitor;
@@ -93,7 +93,7 @@
    *          finalized.
    */
   public abstract void finalizeConnectionHandler(
-      Message finalizeReason);
+      LocalizableMessage finalizeReason);
 
 
 
@@ -228,7 +228,7 @@
    */
   public boolean isConfigurationAcceptable(
                       ConnectionHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by connection handler
@@ -313,7 +313,7 @@
       int cpus = Runtime.getRuntime().availableProcessors();
       int value = Math.max(2, cpus / 2);
 
-      Message message =
+      LocalizableMessage message =
           INFO_ERGONOMIC_SIZING_OF_REQUEST_HANDLER_THREADS.get(friendlyName,
               value);
       logError(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/DebugLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/api/DebugLogPublisher.java
index da33a00..c37d309 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/DebugLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/DebugLogPublisher.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.api;
 
@@ -36,9 +36,8 @@
 import com.sleepycat.je.OperationStatus;
 import com.sleepycat.je.Transaction;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.DebugLogPublisherCfg;
-import org.opends.server.loggers.LogLevel;
 import org.opends.server.loggers.debug.TraceSettings;
 import org.opends.server.types.DebugLogLevel;
 
@@ -86,7 +85,7 @@
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationAcceptable(T configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation. It should be overridden by debug log publisher
@@ -345,94 +344,7 @@
 
 
   /**
-   * Log a constructor entry.
-   *
-   * @param  level           The log level for the message.
-   * @param  settings        The current trace settings in effect.
-   * @param  signature       The constructor signature.
-   * @param  sourceLocation  The location of the method in the source.
-   * @param  args            The parameters provided to the
-   *                         constructor.
-   * @param  stackTrace      The stack trace at the time the
-   *                         constructor is executed or null if its
-   *                         not available.
-   */
-  public abstract void traceConstructor(LogLevel level,
-                                        TraceSettings settings,
-                                        String signature,
-                                        String sourceLocation,
-                                        Object[] args,
-                                      StackTraceElement[] stackTrace);
-
-
-
-  /**
-   * Log a non-static method entry.
-   *
-   * @param  level           The log level for the message.
-   * @param  settings        The current trace settings in effect.
-   * @param  signature       The method signature.
-   * @param  sourceLocation  The location of the method in the source.
-   * @param  obj             The object instance on which the method
-   *                         has been invoked.
-   * @param  args            The parameters provided to the method.
-   * @param  stackTrace      The stack trace at the time the method
-   *                         is executed or null if its not available.
-   */
-  public abstract void traceMethodEntry(LogLevel level,
-                                               TraceSettings settings,
-                                               String signature,
-                                               String sourceLocation,
-                                               Object obj,
-                                               Object[] args,
-                                      StackTraceElement[] stackTrace);
-
-
-
-  /**
-   * Log a static method entry.
-   *
-   * @param  level           The log level for the message.
-   * @param  settings        The current trace settings in effect.
-   * @param  signature       The method signature.
-   * @param  sourceLocation  The location of the method in the source.
-   * @param  args            The parameters provided to the method.
-   * @param  stackTrace      The stack trace at the time the method
-   *                         is executed or null if its not available.
-   */
-  public abstract void traceStaticMethodEntry(LogLevel level,
-                                              TraceSettings settings,
-                                              String signature,
-                                              String sourceLocation,
-                                              Object[] args,
-                                      StackTraceElement[] stackTrace);
-
-
-
-  /**
-   * Log a method return.
-   *
-   * @param  level           The log level for the message.
-   * @param  settings        The current trace settings in effect.
-   * @param  signature       The method signature.
-   * @param  sourceLocation  The location of the method in the source.
-   * @param  ret             The return value for the method.
-   * @param  stackTrace      The stack trace at the time the method
-   *                         is returned or null if its not available.
-   */
-  public abstract void traceReturn(LogLevel level,
-                                   TraceSettings settings,
-                                   String signature,
-                                   String sourceLocation,
-                                   Object ret,
-                                   StackTraceElement[] stackTrace);
-
-
-
-  /**
    * Log an arbitrary event in a method.
-   *
-   * @param  level           The log level for the message.
    * @param  settings        The current trace settings in effect.
    * @param  signature       The method signature.
    * @param  sourceLocation  The location of the method in the source.
@@ -440,8 +352,7 @@
    * @param  stackTrace      The stack trace at the time the message
    *                         is logged or null if its not available.
    */
-  public abstract void traceMessage(LogLevel level,
-                                    TraceSettings settings,
+  public abstract void traceMessage(TraceSettings settings,
                                     String signature,
                                     String sourceLocation,
                                     String msg,
@@ -450,49 +361,25 @@
 
 
   /**
-   * Log a thrown exception in a method.
-   *
-   * @param  level           The log level for the message.
-   * @param  settings        The current trace settings in effect.
-   * @param  signature       The method signature.
-   * @param  sourceLocation  The location of the method in the source.
-   * @param  ex              The exception that was thrown.
-   * @param  stackTrace      The stack trace at the time the exception
-   *                         is thrown or null if its not available.
-   */
-  public abstract void traceThrown(LogLevel level,
-                                   TraceSettings settings,
-                                   String signature,
-                                   String sourceLocation,
-                                   Throwable ex,
-                                   StackTraceElement[] stackTrace);
-
-
-
-  /**
    * Log a caught exception in a method.
-   *
-   * @param  level           The log level for the message.
    * @param  settings        The current trace settings in effect.
    * @param  signature       The method signature.
    * @param  sourceLocation  The location of the method in the source.
+   * @param msg TODO
    * @param  ex              The exception that was caught.
    * @param  stackTrace      The stack trace at the time the exception
    *                         is caught or null if its not available.
    */
-  public abstract void traceCaught(LogLevel level,
-                                   TraceSettings settings,
+  public abstract void traceCaught(TraceSettings settings,
                                    String signature,
                                    String sourceLocation,
-                                   Throwable ex,
-                                   StackTraceElement[] stackTrace);
+                                   String msg,
+                                   Throwable ex, StackTraceElement[] stackTrace);
 
 
 
   /**
    * Log an JE database access in a method.
-   *
-   * @param  level           The log level for the message.
    * @param  settings        The current trace settings in effect.
    * @param  signature       The method signature.
    * @param  sourceLocation  The location of the method in the source.
@@ -505,8 +392,7 @@
    * @param  stackTrace      The stack trace at the time the access
    *                         occurred or null if its not available.
    */
-  public abstract void traceJEAccess(LogLevel level,
-                                     TraceSettings settings,
+  public abstract void traceJEAccess(TraceSettings settings,
                                      String signature,
                                      String sourceLocation,
                                      OperationStatus status,
@@ -519,29 +405,7 @@
 
 
   /**
-   * Log raw data in a method.
-   *
-   * @param  level           The log level for the message.
-   * @param  settings        The current trace settings in effect.
-   * @param  signature       The method signature.
-   * @param  sourceLocation  The location of the method in the source.
-   * @param  data            The data to dump.
-   * @param  stackTrace      The stack trace at the time the data
-   *                         is logged or null if its not available.
-   */
-  public abstract void traceData(LogLevel level,
-                                 TraceSettings settings,
-                                 String signature,
-                                 String sourceLocation,
-                                 byte[] data,
-                                 StackTraceElement[] stackTrace);
-
-
-
-  /**
    * Log a protocol element in a method.
-   *
-   * @param  level           The log level for the message.
    * @param  settings        The current trace settings in effect.
    * @param  signature       The method signature.
    * @param  sourceLocation  The location of the method in the source.
@@ -551,11 +415,10 @@
    *                         element is logged or null if its not
    *                         available.
    */
-  public abstract void traceProtocolElement(LogLevel level,
-                                            TraceSettings settings,
+  public abstract void traceProtocolElement(TraceSettings settings,
                                             String signature,
                                             String sourceLocation,
                                             String decodedForm,
-                                      StackTraceElement[] stackTrace);
+                                            StackTraceElement[] stackTrace);
 
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/DirectoryThread.java b/opendj3-server-dev/src/server/org/opends/server/api/DirectoryThread.java
index fcb38b5..adff4a5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/DirectoryThread.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/DirectoryThread.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.api;
 
@@ -32,7 +32,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.backends.task.Task;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -257,7 +257,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_UNCAUGHT_THREAD_EXCEPTION.get(
+      LocalizableMessage message = ERR_UNCAUGHT_THREAD_EXCEPTION.get(
           t.getName(), stackTraceToSingleLineString(e));
       logError(message);
       DirectoryServer.sendAlertNotification(this,
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/EntryCache.java b/opendj3-server-dev/src/server/org/opends/server/api/EntryCache.java
index 49769bb..64df4d0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/EntryCache.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/EntryCache.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -166,7 +166,7 @@
    */
   public boolean isConfigurationAcceptable(
                       EntryCacheCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by entry cache
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/ErrorLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/api/ErrorLogPublisher.java
index f876cb6..63db1bc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/ErrorLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/ErrorLogPublisher.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.api;
 
@@ -32,8 +32,7 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.admin.std.server.ErrorLogPublisherCfg;
 
@@ -56,8 +55,8 @@
    * The hash map that will be used to define specific log severities
    * for the various categories.
    */
-  protected Map<Category, Set<Severity>> definedSeverities =
-      new HashMap<Category, Set<Severity>>();
+  protected Map<String, Set<Severity>> definedSeverities =
+      new HashMap<String, Set<Severity>>();
 
 
 
@@ -72,7 +71,7 @@
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationAcceptable(T configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation. It should be overridden by error log publisher
@@ -80,15 +79,46 @@
     return true;
   }
 
-
+  /**
+   * Writes a message to the error log using the provided information. The
+   * message's category and severity information will be used to determine
+   * whether to actually log this message.
+   *
+   * @param message
+   *          The message to be logged.
+   */
+  public void logError(LocalizableMessage message) {
+    // TODO : to remove
+  }
 
   /**
    * Writes a message to the error log using the provided information.
-   * The message's category and severity information will be used to
-   * determine whether to actually log this message.
+   * <p>
+   * The category and severity information are used to determine whether to
+   * actually log this message.
    *
-   * @param  message   The message to be logged.
+   * @param category
+   *          The category of the message.
+   * @param severity
+   *          The severity of the message.
+   * @param message
+   *          The message to be logged.
+   * @param exception
+   *          The exception to be logged.
    */
-  public abstract void logError(Message message);
+  public abstract void log(String category, Severity severity,
+      LocalizableMessage message, Throwable exception);
+
+  /**
+   * Check if a message should be logged for the provided category and severity.
+   *
+   * @param category
+   *          The category of the message.
+   * @param severity
+   *          The severity of the message.
+   * @return {@code true} if the message should be logged, {@code false}
+   *         otherwise
+   */
+  public abstract boolean isEnabledFor(String category, Severity severity);
 
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/ExtendedOperationHandler.java b/opendj3-server-dev/src/server/org/opends/server/api/ExtendedOperationHandler.java
index 4b499fb..b9541b6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/ExtendedOperationHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/ExtendedOperationHandler.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.api;
 
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.ExtendedOperationHandlerCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
@@ -134,7 +134,7 @@
    */
   public boolean isConfigurationAcceptable(
                       ExtendedOperationHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by extended operation
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/Extension.java b/opendj3-server-dev/src/server/org/opends/server/api/Extension.java
index 3a74929..e81f63d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/Extension.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/Extension.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.List;
 import org.opends.server.admin.std.server.ExtensionCfg;
@@ -93,7 +94,7 @@
    */
   public boolean isConfigurationAcceptable(
                       ExtensionCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by extension
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/Group.java b/opendj3-server-dev/src/server/org/opends/server/api/Group.java
index d63c28c..6cea16e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/Group.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/Group.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -118,7 +118,7 @@
    */
   public boolean isConfigurationAcceptable(
                       GroupImplementationCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by group implementations
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/HTTPAccessLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/api/HTTPAccessLogPublisher.java
index c5b6abb..e7439b9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/HTTPAccessLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/HTTPAccessLogPublisher.java
@@ -21,13 +21,13 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.api;
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.HTTPAccessLogPublisherCfg;
 import org.opends.server.loggers.HTTPRequestInfo;
 
@@ -51,7 +51,7 @@
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationAcceptable(T configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation. It should be overridden by HTTP access log publisher
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/IdentityMapper.java b/opendj3-server-dev/src/server/org/opends/server/api/IdentityMapper.java
index 3014067..18a8d51 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/IdentityMapper.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/IdentityMapper.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -100,7 +101,7 @@
    */
   public boolean isConfigurationAcceptable(
                       IdentityMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by identity mapper
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/KeyManagerProvider.java b/opendj3-server-dev/src/server/org/opends/server/api/KeyManagerProvider.java
index 26ae47f..d228cbd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/KeyManagerProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/KeyManagerProvider.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -99,7 +100,7 @@
    */
   public boolean isConfigurationAcceptable(
                       T configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by key manager provider
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/LogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/api/LogPublisher.java
index d018e9a..8623965 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/LogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/LogPublisher.java
@@ -22,16 +22,17 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.api;
 
 import java.io.Closeable;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.LogPublisherCfg;
 import org.opends.server.config.ConfigException;
+import org.opends.server.core.ServerContext;
 import org.opends.server.types.DN;
 import org.opends.server.types.InitializationException;
 
@@ -58,6 +59,8 @@
    * @param config
    *          The publisher configuration that contains the information to use
    *          to initialize this publisher.
+   * @param serverContext
+   *          The server context.
    * @throws ConfigException
    *           If an unrecoverable problem arises in the process of performing
    *           the initialization as a result of the server configuration.
@@ -65,7 +68,7 @@
    *           If a problem occurs during initialization that is not related to
    *           the server configuration.
    */
-  void initializeLogPublisher(T config) throws ConfigException,
+  void initializeLogPublisher(T config, ServerContext serverContext) throws ConfigException,
       InitializationException;
 
 
@@ -90,7 +93,7 @@
    *         log publisher, or {@code false} if not.
    */
   boolean isConfigurationAcceptable(T configuration,
-      List<Message> unacceptableReasons);
+      List<LocalizableMessage> unacceptableReasons);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/MatchingRuleFactory.java b/opendj3-server-dev/src/server/org/opends/server/api/MatchingRuleFactory.java
index 53614cd..aaa512a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/MatchingRuleFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/MatchingRuleFactory.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
 
@@ -31,7 +32,7 @@
 
 import org.opends.server.admin.std.server.MatchingRuleCfg;
 import org.opends.server.config.ConfigException;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.InitializationException;
 
 /**
@@ -103,7 +104,7 @@
    */
   public  boolean isConfigurationAcceptable(
                       T configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by matching rule
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/MonitorProvider.java b/opendj3-server-dev/src/server/org/opends/server/api/MonitorProvider.java
index 8e61949..32c5f38 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/MonitorProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/MonitorProvider.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -128,7 +129,7 @@
    */
   public boolean isConfigurationAcceptable(
                       MonitorProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by monitor provider
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/PasswordGenerator.java b/opendj3-server-dev/src/server/org/opends/server/api/PasswordGenerator.java
index 28d6f73..416b6dd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/PasswordGenerator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/PasswordGenerator.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -99,7 +99,7 @@
    */
   public boolean isConfigurationAcceptable(
                       PasswordGeneratorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by password generator
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/api/PasswordStorageScheme.java
index eca9a8a..ffbdf7e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/PasswordStorageScheme.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -104,7 +104,7 @@
    */
   public boolean isConfigurationAcceptable(
                       PasswordStorageSchemeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by password storage scheme
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/PasswordValidator.java b/opendj3-server-dev/src/server/org/opends/server/api/PasswordValidator.java
index 7da98c8..d369e7b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/PasswordValidator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/PasswordValidator.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -36,7 +36,7 @@
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -98,7 +98,7 @@
    */
   public boolean isConfigurationAcceptable(
                       PasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by password validator
@@ -151,6 +151,6 @@
                                Set<ByteString> currentPasswords,
                                Operation operation,
                                Entry userEntry,
-                               MessageBuilder invalidReason);
+                               LocalizableMessageBuilder invalidReason);
 }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/QOSPolicyFactory.java b/opendj3-server-dev/src/server/org/opends/server/api/QOSPolicyFactory.java
index f7b9dbb..e3c6357 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/QOSPolicyFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/QOSPolicyFactory.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.api;
@@ -30,7 +31,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.QOSPolicyCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.InitializationException;
@@ -84,5 +85,5 @@
    *         it is not.
    */
   boolean isConfigurationAcceptable(T configuration,
-      List<Message> unacceptableReasons);
+      List<LocalizableMessage> unacceptableReasons);
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/SASLMechanismHandler.java b/opendj3-server-dev/src/server/org/opends/server/api/SASLMechanismHandler.java
index 5dc88ae..0fcae52 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/SASLMechanismHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/SASLMechanismHandler.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -100,7 +101,7 @@
    */
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by SASL mechanism handler
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/ServerShutdownListener.java b/opendj3-server-dev/src/server/org/opends/server/api/ServerShutdownListener.java
index de8e150..4a97ed7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/ServerShutdownListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/ServerShutdownListener.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -56,6 +57,6 @@
    *
    * @param  reason  The human-readable reason for the shutdown.
    */
-  public void processServerShutdown(Message reason);
+  public void processServerShutdown(LocalizableMessage reason);
 }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/SynchronizationProvider.java b/opendj3-server-dev/src/server/org/opends/server/api/SynchronizationProvider.java
index e29ae23..e75016b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/SynchronizationProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/SynchronizationProvider.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -104,7 +105,7 @@
    */
   public boolean isConfigurationAcceptable(
                       SynchronizationProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by synchronization
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/TrustManagerProvider.java b/opendj3-server-dev/src/server/org/opends/server/api/TrustManagerProvider.java
index 9db4d34..38028fc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/TrustManagerProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/TrustManagerProvider.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -101,7 +102,7 @@
    */
   public boolean isConfigurationAcceptable(
                       TrustManagerProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by trust manager provider
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/VirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/api/VirtualAttributeProvider.java
index aaad731..48ca4b8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/VirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/VirtualAttributeProvider.java
@@ -31,7 +31,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.VirtualAttributeCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.SearchOperation;
@@ -106,7 +106,7 @@
    */
   public boolean isConfigurationAcceptable(
                       VirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by virtual attribute
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/WorkQueue.java b/opendj3-server-dev/src/server/org/opends/server/api/WorkQueue.java
index 642938b..9beb46f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/WorkQueue.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/WorkQueue.java
@@ -22,14 +22,14 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.api;
 
 import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.loggers.ErrorLogger.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.WorkQueueCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.DirectoryException;
@@ -87,7 +87,7 @@
    * @param  reason  The human-readable reason that the work queue is
    *                 being shut down.
    */
-  public abstract void finalizeWorkQueue(Message reason);
+  public abstract void finalizeWorkQueue(LocalizableMessage reason);
 
 
 
@@ -167,7 +167,7 @@
       int cpus = Runtime.getRuntime().availableProcessors();
       int value = Math.max(24, cpus * 2);
 
-      Message message = INFO_ERGONOMIC_SIZING_OF_WORKER_THREAD_POOL.get(value);
+      LocalizableMessage message = INFO_ERGONOMIC_SIZING_OF_WORKER_THREAD_POOL.get(value);
       logError(message);
 
       return value;
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/plugin/DirectoryServerPlugin.java b/opendj3-server-dev/src/server/org/opends/server/api/plugin/DirectoryServerPlugin.java
index 554e60c..bc10d5a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/plugin/DirectoryServerPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/plugin/DirectoryServerPlugin.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api.plugin;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -99,7 +100,7 @@
    *          for this plugin, or {@code false} if not.
    */
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // This default implementation does not perform any special
     // validation.  It should be overridden by plugin implementations
@@ -243,7 +244,7 @@
    */
   public PluginResult.Startup doStartup()
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
         String.valueOf(pluginDN), PluginType.STARTUP.getName());
     throw new UnsupportedOperationException(message.toString());
   }
@@ -259,9 +260,9 @@
    *
    * @param  reason  The human-readable reason for the shutdown.
    */
-  public void doShutdown(Message reason)
+  public void doShutdown(LocalizableMessage reason)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
         String.valueOf(pluginDN), PluginType.SHUTDOWN.getName());
     throw new UnsupportedOperationException(message.toString());
   }
@@ -282,7 +283,7 @@
   public PluginResult.PostConnect doPostConnect(ClientConnection
                                                     clientConnection)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
         String.valueOf(pluginDN), PluginType.POST_CONNECT.getName());
     throw new UnsupportedOperationException(message.toString());
   }
@@ -306,9 +307,9 @@
   public PluginResult.PostDisconnect
               doPostDisconnect(ClientConnection clientConnection,
                                DisconnectReason disconnectReason,
-                               Message message)
+                               LocalizableMessage message)
   {
-    Message msg = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage msg = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_DISCONNECT.getName());
     throw new UnsupportedOperationException(msg.toString());
@@ -330,7 +331,7 @@
   public PluginResult.ImportLDIF
     doLDIFImport(LDIFImportConfig importConfig, Entry entry)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
         String.valueOf(pluginDN), PluginType.LDIF_IMPORT.getName());
     throw new UnsupportedOperationException(message.toString());
   }
@@ -344,7 +345,7 @@
    */
   public void doLDIFImportEnd(LDIFImportConfig importConfig)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
         String.valueOf(pluginDN),
         PluginType.LDIF_IMPORT_END.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -360,7 +361,7 @@
    */
   public void doLDIFImportBegin(LDIFImportConfig importConfig)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
         String.valueOf(pluginDN),
         PluginType.LDIF_IMPORT_BEGIN.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -379,7 +380,7 @@
   public PluginResult.ImportLDIF
     doLDIFExport(LDIFExportConfig exportConfig, Entry entry)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
         String.valueOf(pluginDN), PluginType.LDIF_EXPORT.getName());
     throw new UnsupportedOperationException(message.toString());
   }
@@ -398,7 +399,7 @@
   public PluginResult.PreParse
        doPreParse(PreParseAbandonOperation abandonOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_PARSE_ABANDON.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -419,7 +420,7 @@
   public PluginResult.PostOperation
        doPostOperation(PostOperationAbandonOperation abandonOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_OPERATION_ABANDON.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -441,7 +442,7 @@
   public PluginResult.PreParse
        doPreParse(PreParseAddOperation addOperation)
        throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
         String.valueOf(pluginDN), PluginType.PRE_PARSE_ADD.getName());
     throw new UnsupportedOperationException(message.toString());
   }
@@ -465,7 +466,7 @@
   public PluginResult.PreOperation
        doPreOperation(PreOperationAddOperation addOperation)
       throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_OPERATION_ADD.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -487,7 +488,7 @@
   public PluginResult.PostOperation
        doPostOperation(PostOperationAddOperation addOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_OPERATION_ADD.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -509,7 +510,7 @@
   public PluginResult.PostResponse
        doPostResponse(PostResponseAddOperation addOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_RESPONSE_ADD.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -528,7 +529,7 @@
   public void doPostSynchronization(
                    PostSynchronizationAddOperation addOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_SYNCHRONIZATION_ADD.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -548,7 +549,7 @@
   public PluginResult.PreParse
        doPreParse(PreParseBindOperation bindOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_PARSE_BIND.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -568,7 +569,7 @@
   public PluginResult.PreOperation
        doPreOperation(PreOperationBindOperation bindOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_OPERATION_BIND.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -590,7 +591,7 @@
   public PluginResult.PostOperation
        doPostOperation(PostOperationBindOperation bindOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_OPERATION_BIND.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -612,7 +613,7 @@
   public PluginResult.PostResponse
        doPostResponse(PostResponseBindOperation bindOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_RESPONSE_BIND.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -635,7 +636,7 @@
   public PluginResult.PreParse
        doPreParse(PreParseCompareOperation compareOperation)
        throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_PARSE_COMPARE.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -658,7 +659,7 @@
   public PluginResult.PreOperation
        doPreOperation(PreOperationCompareOperation compareOperation)
       throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_OPERATION_COMPARE.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -680,7 +681,7 @@
   public PluginResult.PostOperation
        doPostOperation(PostOperationCompareOperation compareOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_OPERATION_COMPARE.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -702,7 +703,7 @@
   public PluginResult.PostResponse
        doPostResponse(PostResponseCompareOperation compareOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_RESPONSE_COMPARE.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -725,7 +726,7 @@
   public PluginResult.PreParse
        doPreParse(PreParseDeleteOperation deleteOperation)
        throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_PARSE_DELETE.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -750,7 +751,7 @@
   public PluginResult.PreOperation
        doPreOperation(PreOperationDeleteOperation deleteOperation)
       throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_OPERATION_DELETE.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -772,7 +773,7 @@
   public PluginResult.PostOperation
        doPostOperation(PostOperationDeleteOperation deleteOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_OPERATION_DELETE.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -794,7 +795,7 @@
   public PluginResult.PostResponse
        doPostResponse(PostResponseDeleteOperation deleteOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_RESPONSE_DELETE.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -813,7 +814,7 @@
   public void doPostSynchronization(
                    PostSynchronizationDeleteOperation deleteOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_SYNCHRONIZATION_DELETE.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -836,7 +837,7 @@
   public PluginResult.PreParse
        doPreParse(PreParseExtendedOperation extendedOperation)
        throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_PARSE_EXTENDED.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -860,7 +861,7 @@
   public PluginResult.PreOperation
        doPreOperation(PreOperationExtendedOperation extendedOperation)
       throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_OPERATION_EXTENDED.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -884,7 +885,7 @@
        doPostOperation(PostOperationExtendedOperation
                             extendedOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_OPERATION_EXTENDED.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -906,7 +907,7 @@
   public PluginResult.PostResponse
        doPostResponse(PostResponseExtendedOperation extendedOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_RESPONSE_EXTENDED.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -929,7 +930,7 @@
   public PluginResult.PreParse
        doPreParse(PreParseModifyOperation modifyOperation)
        throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_PARSE_MODIFY.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -954,7 +955,7 @@
   public PluginResult.PreOperation
        doPreOperation(PreOperationModifyOperation modifyOperation)
       throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_OPERATION_MODIFY.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -976,7 +977,7 @@
   public PluginResult.PostOperation
        doPostOperation(PostOperationModifyOperation modifyOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_OPERATION_MODIFY.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -998,7 +999,7 @@
   public PluginResult.PostResponse
        doPostResponse(PostResponseModifyOperation modifyOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_RESPONSE_MODIFY.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1017,7 +1018,7 @@
   public void doPostSynchronization(
                    PostSynchronizationModifyOperation modifyOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_SYNCHRONIZATION_MODIFY.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1040,7 +1041,7 @@
   public PluginResult.PreParse
        doPreParse(PreParseModifyDNOperation modifyDNOperation)
        throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_PARSE_MODIFY_DN.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1066,7 +1067,7 @@
   public PluginResult.PreOperation
        doPreOperation(PreOperationModifyDNOperation modifyDNOperation)
       throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_OPERATION_MODIFY_DN.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1106,7 +1107,7 @@
                                   Entry oldEntry, Entry newEntry,
                                   List<Modification> modifications)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
             String.valueOf(pluginDN),
             PluginType.SUBORDINATE_MODIFY_DN.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1128,7 +1129,7 @@
        processSubordinateDelete(DeleteOperation
          deleteOperation, Entry entry)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.get(
             String.valueOf(pluginDN),
             PluginType.SUBORDINATE_MODIFY_DN.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1151,7 +1152,7 @@
        doPostOperation(PostOperationModifyDNOperation
                             modifyDNOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_OPERATION_MODIFY_DN.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1173,7 +1174,7 @@
   public PluginResult.PostResponse
        doPostResponse(PostResponseModifyDNOperation modifyDNOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_RESPONSE_MODIFY_DN.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1193,7 +1194,7 @@
   public void doPostSynchronization(
               PostSynchronizationModifyDNOperation modifyDNOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_SYNCHRONIZATION_MODIFY_DN.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1216,7 +1217,7 @@
   public PluginResult.PreParse
        doPreParse(PreParseSearchOperation searchOperation)
        throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_PARSE_SEARCH.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1239,7 +1240,7 @@
   public PluginResult.PreOperation
        doPreOperation(PreOperationSearchOperation searchOperation)
       throws CanceledOperationException {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_OPERATION_SEARCH.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1267,7 +1268,7 @@
        processSearchEntry(SearchEntrySearchOperation searchOperation,
                           SearchResultEntry searchEntry)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.SEARCH_RESULT_ENTRY.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1292,7 +1293,7 @@
                                    searchOperation,
                               SearchResultReference searchReference)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.SEARCH_RESULT_REFERENCE.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1314,7 +1315,7 @@
   public PluginResult.PostOperation
        doPostOperation(PostOperationSearchOperation searchOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_OPERATION_SEARCH.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1336,7 +1337,7 @@
   public PluginResult.PostResponse
        doPostResponse(PostResponseSearchOperation searchOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_RESPONSE_SEARCH.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1356,7 +1357,7 @@
   public PluginResult.PreParse
        doPreParse(PreParseUnbindOperation unbindOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.PRE_PARSE_UNBIND.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1377,7 +1378,7 @@
   public PluginResult.PostOperation
        doPostOperation(PostOperationUnbindOperation unbindOperation)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.POST_OPERATION_UNBIND.getName());
     throw new UnsupportedOperationException(message.toString());
@@ -1398,7 +1399,7 @@
               processIntermediateResponse(
                    IntermediateResponse intermediateResponse)
   {
-    Message message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_PLUGIN_TYPE_NOT_SUPPORTED.
         get(String.valueOf(pluginDN),
             PluginType.INTERMEDIATE_RESPONSE.getName());
     throw new UnsupportedOperationException(message.toString());
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/plugin/InternalDirectoryServerPlugin.java b/opendj3-server-dev/src/server/org/opends/server/api/plugin/InternalDirectoryServerPlugin.java
index bd54917..0bf67ab 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/plugin/InternalDirectoryServerPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/plugin/InternalDirectoryServerPlugin.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.api.plugin;
@@ -31,7 +32,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.PluginCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.DN;
@@ -86,7 +87,7 @@
    * {@inheritDoc}
    */
   public final boolean isConfigurationAcceptable(
-      PluginCfg configuration, List<Message> unacceptableReasons)
+      PluginCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     // Unused.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/api/plugin/PluginResult.java b/opendj3-server-dev/src/server/org/opends/server/api/plugin/PluginResult.java
index e85ac6d..de9cfcf 100644
--- a/opendj3-server-dev/src/server/org/opends/server/api/plugin/PluginResult.java
+++ b/opendj3-server-dev/src/server/org/opends/server/api/plugin/PluginResult.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api.plugin;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.ResultCode;
 import org.opends.server.types.DN;
 import org.opends.server.types.DisconnectReason;
@@ -56,7 +57,7 @@
     private final boolean continuePluginProcessing;
 
     // An message explaining why startup should stop.
-    private final Message errorMessage;
+    private final LocalizableMessage errorMessage;
 
     private static Startup DEFAULT_RESULT =
         new Startup(true, true, null);
@@ -72,7 +73,7 @@
      */
     private Startup(boolean continueProcessing,
                     boolean continuePluginProcessing,
-                    Message errorMessage)
+                    LocalizableMessage errorMessage)
     {
       this.continueProcessing = continueProcessing;
       this.errorMessage = errorMessage;
@@ -108,7 +109,7 @@
      *
      * @return a new stop processing startup plugin result.
      */
-    public static Startup stopStartup(Message errorMessage)
+    public static Startup stopStartup(LocalizableMessage errorMessage)
     {
       return new Startup(false, false, errorMessage);
     }
@@ -143,7 +144,7 @@
      * @return An error message explaining why processing should
      * stop or <code>null</code> if none is provided.
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return errorMessage;
     }
@@ -164,7 +165,7 @@
     private final boolean continuePluginProcessing;
 
     // An message explaining why processing should stop.
-    private final Message errorMessage;
+    private final LocalizableMessage errorMessage;
 
     // The matched DN for this result.
     private final DN matchedDN;
@@ -193,7 +194,7 @@
      */
     private PreParse (boolean continueProcessing,
                       boolean continuePluginProcessing,
-                      Message errorMessage,
+                      LocalizableMessage errorMessage,
                       ResultCode resultCode, DN matchedDN,
                       List<String> referralURLs)
     {
@@ -239,7 +240,7 @@
      * @return a new stop processing pre parse plugin result.
      */
     public static PreParse stopProcessing(ResultCode resultCode,
-                                          Message errorMessage,
+                                          LocalizableMessage errorMessage,
                                           DN matchedDN,
                                           List<String> referralURLs)
     {
@@ -257,7 +258,7 @@
      * @return a new stop processing pre parse plugin result.
      */
     public static PreParse stopProcessing(ResultCode resultCode,
-                                          Message errorMessage)
+                                          LocalizableMessage errorMessage)
     {
       return new PreParse(false, false, errorMessage, resultCode,
           null, null);
@@ -293,7 +294,7 @@
      * @return An error message explaining why processing should
      * stop or <code>null</code> if none is provided.
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return errorMessage;
     }
@@ -350,7 +351,7 @@
     private final boolean continuePluginProcessing;
 
     // An message explaining why processing should stop.
-    private final Message errorMessage;
+    private final LocalizableMessage errorMessage;
 
     // The matched DN for this result.
     private final DN matchedDN;
@@ -379,7 +380,7 @@
      */
     private PreOperation (boolean continueProcessing,
                           boolean continuePluginProcessing,
-                          Message errorMessage,
+                          LocalizableMessage errorMessage,
                           ResultCode resultCode, DN matchedDN,
                           List<String> referralURLs)
     {
@@ -425,7 +426,7 @@
      * @return a new stop processing pre operation plugin result.
      */
     public static PreOperation stopProcessing(
-        ResultCode resultCode, Message errorMessage, DN matchedDN,
+        ResultCode resultCode, LocalizableMessage errorMessage, DN matchedDN,
         List<String> referralURLs)
     {
       return new PreOperation(false, false, errorMessage, resultCode,
@@ -442,7 +443,7 @@
      * @return a new stop processing pre operation plugin result.
      */
     public static PreOperation stopProcessing(ResultCode resultCode,
-                                              Message errorMessage)
+                                              LocalizableMessage errorMessage)
     {
       return new PreOperation(false, false, errorMessage, resultCode,
           null, null);
@@ -478,7 +479,7 @@
      * @return An error message explaining why processing should
      * stop or <code>null</code> if none is provided.
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return errorMessage;
     }
@@ -532,7 +533,7 @@
     private final boolean continueProcessing;
 
     // An message explaining why processing should stop.
-    private final Message errorMessage;
+    private final LocalizableMessage errorMessage;
 
     // The matched DN for this result.
     private final DN matchedDN;
@@ -557,7 +558,7 @@
      * @param referralURLs The set of referral URLs for this result.
      */
     private PostOperation(boolean continueProcessing,
-                          Message errorMessage,
+                          LocalizableMessage errorMessage,
                           ResultCode resultCode, DN matchedDN,
                           List<String> referralURLs)
     {
@@ -590,7 +591,7 @@
      * @return a new stop processing post operation plugin result.
      */
     public static PostOperation stopProcessing(
-        ResultCode resultCode, Message errorMessage, DN matchedDN,
+        ResultCode resultCode, LocalizableMessage errorMessage, DN matchedDN,
         List<String> referralURLs)
     {
       return new PostOperation(false, errorMessage, resultCode,
@@ -607,7 +608,7 @@
      * @return a new stop processing post operation plugin result.
      */
     public static PostOperation stopProcessing(ResultCode resultCode,
-                                               Message errorMessage)
+                                               LocalizableMessage errorMessage)
     {
       return new PostOperation(false, errorMessage, resultCode, null,
           null);
@@ -631,7 +632,7 @@
      * @return An error message explaining why processing should
      * stop or <code>null</code> if none is provided.
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return errorMessage;
     }
@@ -747,7 +748,7 @@
     private final boolean continuePluginProcessing;
 
     // An message explaining why processing should stop.
-    private final Message errorMessage;
+    private final LocalizableMessage errorMessage;
 
     private static ImportLDIF DEFAULT_RESULT =
         new ImportLDIF(true, true, null);
@@ -763,7 +764,7 @@
      */
     private ImportLDIF(boolean continueProcessing,
                        boolean continuePluginProcessing,
-                       Message errorMessage)
+                       LocalizableMessage errorMessage)
     {
       this.continueProcessing = continueProcessing;
       this.errorMessage = errorMessage;
@@ -800,7 +801,7 @@
      *
      * @return a new stop processing LDIF import plugin result.
      */
-    public static ImportLDIF stopEntryProcessing(Message errorMessage)
+    public static ImportLDIF stopEntryProcessing(LocalizableMessage errorMessage)
     {
       return new ImportLDIF(false, false, errorMessage);
     }
@@ -835,7 +836,7 @@
      * @return An error message explaining why processing should
      * stop or <code>null</code> if none is provided.
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return errorMessage;
     }
@@ -856,7 +857,7 @@
     private final boolean continuePluginProcessing;
 
     // An message explaining why processing should stop.
-    private final Message errorMessage;
+    private final LocalizableMessage errorMessage;
 
     // The matched DN for this result.
     private final DN matchedDN;
@@ -885,7 +886,7 @@
      */
     private SubordinateModifyDN(boolean continueProcessing,
                                 boolean continuePluginProcessing,
-                                Message errorMessage,
+                                LocalizableMessage errorMessage,
                                 ResultCode resultCode, DN matchedDN,
                                 List<String> referralURLs)
     {
@@ -936,7 +937,7 @@
      * result.
      */
     public static SubordinateModifyDN stopProcessing(
-        ResultCode resultCode, Message errorMessage, DN matchedDN,
+        ResultCode resultCode, LocalizableMessage errorMessage, DN matchedDN,
         List<String> referralURLs)
     {
       return new SubordinateModifyDN(false, false, errorMessage,
@@ -955,7 +956,7 @@
      * result.
      */
     public static SubordinateModifyDN stopProcessing(
-        ResultCode resultCode, Message errorMessage)
+        ResultCode resultCode, LocalizableMessage errorMessage)
     {
       return new SubordinateModifyDN(false, false, errorMessage,
           resultCode, null, null);
@@ -991,7 +992,7 @@
      * @return An error message explaining why processing should
      * stop or <code>null</code> if none is provided.
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return errorMessage;
     }
@@ -1048,7 +1049,7 @@
     private final boolean continuePluginProcessing;
 
     // An message explaining why processing should stop.
-    private final Message errorMessage;
+    private final LocalizableMessage errorMessage;
 
     // The matched DN for this result.
     private final DN matchedDN;
@@ -1077,7 +1078,7 @@
      */
     private SubordinateDelete(boolean continueProcessing,
                               boolean continuePluginProcessing,
-                              Message errorMessage,
+                              LocalizableMessage errorMessage,
                               ResultCode resultCode, DN matchedDN,
                               List<String> referralURLs)
     {
@@ -1128,7 +1129,7 @@
      * result.
      */
     public static SubordinateDelete stopProcessing(
-        ResultCode resultCode, Message errorMessage, DN matchedDN,
+        ResultCode resultCode, LocalizableMessage errorMessage, DN matchedDN,
         List<String> referralURLs)
     {
       return new SubordinateDelete(false, false, errorMessage,
@@ -1147,7 +1148,7 @@
      * result.
      */
     public static SubordinateDelete stopProcessing(
-        ResultCode resultCode, Message errorMessage)
+        ResultCode resultCode, LocalizableMessage errorMessage)
     {
       return new SubordinateDelete(false, false, errorMessage,
           resultCode, null, null);
@@ -1183,7 +1184,7 @@
      * @return An error message explaining why processing should
      * stop or <code>null</code> if none is provided.
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return errorMessage;
     }
@@ -1243,7 +1244,7 @@
     private final boolean sendResponse;
 
     // An message explaining why processing should stop.
-    private final Message errorMessage;
+    private final LocalizableMessage errorMessage;
 
     // The matched DN for this result.
     private final DN matchedDN;
@@ -1276,7 +1277,7 @@
     private IntermediateResponse(boolean continueProcessing,
                                  boolean continuePluginProcessing,
                                  boolean sendResponse,
-                                 Message errorMessage,
+                                 LocalizableMessage errorMessage,
                                  ResultCode resultCode, DN matchedDN,
                                  List<String> referralURLs)
     {
@@ -1346,7 +1347,7 @@
      */
     public static IntermediateResponse stopProcessing(
         boolean sendResponse, ResultCode resultCode,
-        Message errorMessage, DN matchedDN, List<String> referralURLs)
+        LocalizableMessage errorMessage, DN matchedDN, List<String> referralURLs)
     {
       return new IntermediateResponse(false, false, sendResponse,
           errorMessage, resultCode, matchedDN, referralURLs);
@@ -1367,7 +1368,7 @@
      */
     public static IntermediateResponse stopProcessing(
         boolean sendResponse, ResultCode resultCode,
-        Message errorMessage)
+        LocalizableMessage errorMessage)
     {
       return new IntermediateResponse(false, false, sendResponse,
           errorMessage, resultCode, null, null);
@@ -1414,7 +1415,7 @@
      * @return An error message explaining why processing should
      * stop or <code>null</code> if none is provided.
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return errorMessage;
     }
@@ -1470,7 +1471,7 @@
     private final boolean continuePluginProcessing;
 
     // An message explaining why processing should stop.
-    private final Message errorMessage;
+    private final LocalizableMessage errorMessage;
 
     // The disconnect reason that provides the generic cause for the
     // disconnect.
@@ -1496,7 +1497,7 @@
      */
     private PostConnect(boolean continueProcessing,
                         boolean continuePluginProcessing,
-                        Message errorMessage,
+                        LocalizableMessage errorMessage,
                         DisconnectReason disconnectReason,
                         boolean sendDisconnectNotification)
     {
@@ -1542,7 +1543,7 @@
      */
     public static PostConnect disconnectClient(
         DisconnectReason disconnectReason,
-        boolean sendDisconnectNotification, Message errorMessage)
+        boolean sendDisconnectNotification, LocalizableMessage errorMessage)
     {
       return new PostConnect(false, false, errorMessage,
           disconnectReason, sendDisconnectNotification);
@@ -1578,7 +1579,7 @@
      * @return An error message explaining why processing should
      * stop or <code>null</code> if none is provided.
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return errorMessage;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Aci.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Aci.java
index 5b04e08..0d5607c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Aci.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Aci.java
@@ -33,7 +33,7 @@
 import java.util.Set;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.ldap.ByteSequence;
 import org.opends.server.types.DN;
 
@@ -369,7 +369,7 @@
         //Perform a quick pattern check against the string to catch any
         //obvious syntax errors.
         if (!Pattern.matches(aciRegex, input)) {
-            Message message = WARN_ACI_SYNTAX_GENERAL_PARSE_FAILED.get(input);
+            LocalizableMessage message = WARN_ACI_SYNTAX_GENERAL_PARSE_FAILED.get(input);
             throw new AciException(message);
         }
         //Decode the body first.
@@ -546,7 +546,7 @@
    *
    * @throws AciException If the specified expression string is invalid.
    */
-    public static Set<String> decodeOID(String expr, Message msg)
+    public static Set<String> decodeOID(String expr, LocalizableMessage msg)
     throws AciException {
       Set<String> OIDs = new HashSet<String>();
       //Quick check to see if the expression is valid.
@@ -586,13 +586,13 @@
       while ((pos < length) && ((c = oidStr.charAt(pos++)) != ' ')) {
         if (c == '.') {
           if (lastWasPeriod) {
-            Message message = WARN_ACI_SYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID.get(
+            LocalizableMessage message = WARN_ACI_SYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID.get(
                 oidStr, pos-1);
             throw new AciException(message);
           }
           lastWasPeriod = true;
         }  else if (! isDigit(c)) {
-          Message message =
+          LocalizableMessage message =
               WARN_ACI_SYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID.get(oidStr, c, pos-1);
           throw new AciException(message);
         }  else
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciBody.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciBody.java
index 968b337..b33590c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciBody.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciBody.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.authorization.dseecompat;
 
@@ -34,7 +34,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This class represents the body of an ACI. The body of the ACI is the
@@ -186,7 +186,7 @@
             startPos=bodyMatcher.start();
             version  = bodyMatcher.group(VERSION);
             if (!version.equalsIgnoreCase(supportedVersion)) {
-                Message message = WARN_ACI_SYNTAX_INVAILD_VERSION.get(version);
+                LocalizableMessage message = WARN_ACI_SYNTAX_INVAILD_VERSION.get(version);
                 throw new AciException(message);
             }
             name = bodyMatcher.group(NAME);
@@ -211,7 +211,7 @@
 
         if (lastIndex >= 0 && input.charAt(lastIndex) != ')')
         {
-          Message message = WARN_ACI_SYNTAX_GENERAL_PARSE_FAILED.get(input);
+          LocalizableMessage message = WARN_ACI_SYNTAX_GENERAL_PARSE_FAILED.get(input);
           throw new AciException(message);
         }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciException.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciException.java
index 18d3b0f..983ddd7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciException.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.IdentifiedException;
 
@@ -59,7 +60,7 @@
      *
      * @param  message    The message to use for this ACI exception.
      */
-    public AciException(Message message) {
+    public AciException(LocalizableMessage message) {
       super(message);
     }
 
@@ -71,7 +72,7 @@
      * @param  cause      The exception that was caught to trigger this
      *                    exception.
      */
-    public AciException(Message message, Throwable cause) {
+    public AciException(LocalizableMessage message, Throwable cause) {
       super(message, cause);
     }
 
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 d8d68c8..89ae08e 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
@@ -40,7 +40,7 @@
 import java.util.*;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.DseeCompatAccessControlHandlerCfg;
 import org.opends.server.api.AccessControlHandler;
 import org.opends.server.api.ClientConnection;
@@ -638,7 +638,7 @@
       catch (DirectoryException ex)
       {
         // Log a message and keep going.
-        Message message = WARN_ACI_NOT_VALID_DN.get(DNString);
+        LocalizableMessage message = WARN_ACI_NOT_VALID_DN.get(DNString);
         logError(message);
       }
     }
@@ -826,7 +826,7 @@
           && !operation.getClientConnection().hasPrivilege(
               Privilege.MODIFY_ACL, operation))
       {
-        Message message =
+        LocalizableMessage message =
             INFO_ACI_MODIFY_FAILED_PRIVILEGE.get(String.valueOf(container
                 .getResourceDN()), String.valueOf(container.getClientDN()));
         logError(message);
@@ -932,7 +932,7 @@
             }
             catch (AciException ex)
             {
-              Message message =
+              LocalizableMessage message =
                   WARN_ACI_MODIFY_FAILED_DECODE.get(String.valueOf(dn),
                       ex.getMessage());
               throw new DirectoryException(
@@ -1006,7 +1006,7 @@
     final Lock entryLock = LockManager.lockRead(superiorDN);
     if (entryLock == null)
     {
-      Message message =
+      LocalizableMessage message =
           WARN_ACI_HANDLER_CANNOT_LOCK_NEW_SUPERIOR_USER.get(String
               .valueOf(superiorDN));
       logError(message);
@@ -1182,7 +1182,7 @@
   {
     Set<String> requestAttrs = new LinkedHashSet<String>(1);
     requestAttrs.add("aci");
-    LinkedList<Message> failedACIMsgs = new LinkedList<Message>();
+    LinkedList<LocalizableMessage> failedACIMsgs = new LinkedList<LocalizableMessage>();
     InternalClientConnection conn =
         InternalClientConnection.getRootConnection();
 
@@ -1227,7 +1227,7 @@
           {
             aciListenerMgr.logMsgsSetLockDownMode(failedACIMsgs);
           }
-          Message message =
+          LocalizableMessage message =
             INFO_ACI_ADD_LIST_ACIS.get(Integer.toString(validAcis),
                 String.valueOf(baseDN));
           logError(message);
@@ -1235,7 +1235,7 @@
       }
       catch (Exception e)
       {
-        Message message = INFO_ACI_HANDLER_FAIL_PROCESS_ACI.get();
+        LocalizableMessage message = INFO_ACI_HANDLER_FAIL_PROCESS_ACI.get();
         throw new InitializationException(message, e);
       }
     }
@@ -1277,7 +1277,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = INFO_ACI_HANDLER_FAIL_PROCESS_GLOBAL_ACI.get(
+      LocalizableMessage message = INFO_ACI_HANDLER_FAIL_PROCESS_GLOBAL_ACI.get(
           String.valueOf(configuration.dn()));
       throw new InitializationException(message, e);
     }
@@ -1472,7 +1472,7 @@
       if (!operation.getClientConnection().hasPrivilege(
           Privilege.MODIFY_ACL, operation))
       {
-        Message message = INFO_ACI_ADD_FAILED_PRIVILEGE.get(
+        LocalizableMessage message = INFO_ACI_ADD_FAILED_PRIVILEGE.get(
             String.valueOf(entry.getName()), String.valueOf(clientDN));
         logError(message);
         return false;
@@ -1489,7 +1489,7 @@
           }
           catch (AciException ex)
           {
-            Message message = WARN_ACI_ADD_FAILED_DECODE.get(
+            LocalizableMessage message = WARN_ACI_ADD_FAILED_DECODE.get(
                 String.valueOf(entry.getName()), ex.getMessage());
             throw new DirectoryException(
                 ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
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 3a7d8e5..114333c 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
@@ -33,7 +33,7 @@
 import java.util.*;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.Backend;
 import org.opends.server.api.DITCacheMap;
 import org.opends.server.types.*;
@@ -140,7 +140,7 @@
    * @return The number of valid ACI attribute values added to the ACI list.
    */
   public int addAci(List<? extends Entry> entries,
-                                 LinkedList<Message> failedACIMsgs)
+                                 LinkedList<LocalizableMessage> failedACIMsgs)
   {
     int validAcis=0;
 
@@ -197,7 +197,7 @@
    */
   public int addAci(Entry entry,  boolean hasAci,
                                  boolean hasGlobalAci,
-                                 LinkedList<Message> failedACIMsgs) {
+                                 LinkedList<LocalizableMessage> failedACIMsgs) {
     int validAcis=0;
 
     lock.writeLock().lock();
@@ -244,7 +244,7 @@
   private static int addAciAttributeList(DITCacheMap<List<Aci>> aciList,
                                          DN dn, DN configDN,
                                          List<Attribute> attributeList,
-                                         LinkedList<Message> failedACIMsgs) {
+                                         LinkedList<LocalizableMessage> failedACIMsgs) {
 
     if (attributeList == null) {
       return 0;
@@ -263,7 +263,7 @@
           if(dn == DN.rootDN()) {
             msgDN=configDN;
           }
-          Message message = WARN_ACI_ADD_LIST_FAILED_DECODE.get(
+          LocalizableMessage message = WARN_ACI_ADD_LIST_FAILED_DECODE.get(
                   value.getValue().toString(),
                   String.valueOf(msgDN),
                   ex.getMessage());
@@ -296,7 +296,7 @@
     lock.writeLock().lock();
     try
     {
-      LinkedList<Message>failedACIMsgs=new LinkedList<Message>();
+      LinkedList<LocalizableMessage>failedACIMsgs=new LinkedList<LocalizableMessage>();
       //Process "aci" attribute types.
       if(hasAci) {
           aciList.remove(oldEntry.getName());
@@ -449,7 +449,7 @@
               //This should never happen since only a copy of the
               //ACI with a new DN is being made. Log a message if it does and
               //keep going.
-              Message message = WARN_ACI_ADD_LIST_FAILED_DECODE.get(
+              LocalizableMessage message = WARN_ACI_ADD_LIST_FAILED_DECODE.get(
                   aci.toString(), String.valueOf(relocateDN), ex.getMessage());
               logError(message);
             }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciListenerManager.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciListenerManager.java
index 710f879..f3e4c20 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciListenerManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AciListenerManager.java
@@ -29,7 +29,7 @@
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.workflowelement.localbackend.*;
 import org.opends.server.api.BackendInitializationListener;
@@ -248,7 +248,7 @@
       {
         // Ignore this list, the ACI syntax has already passed and it
         // should be empty.
-        LinkedList<Message> failedACIMsgs = new LinkedList<Message>();
+        LinkedList<LocalizableMessage> failedACIMsgs = new LinkedList<LocalizableMessage>();
 
         aciList.addAci(addedEntry, hasAci, hasGlobalAci, failedACIMsgs);
       }
@@ -433,7 +433,7 @@
 
     InternalClientConnection conn =
         InternalClientConnection.getRootConnection();
-    LinkedList<Message> failedACIMsgs = new LinkedList<Message>();
+    LinkedList<LocalizableMessage> failedACIMsgs = new LinkedList<LocalizableMessage>();
     // Add manageDsaIT control so any ACIs in referral entries will be
     // picked up.
     ArrayList<Control> controls = new ArrayList<Control>(1);
@@ -487,7 +487,7 @@
                 failedACIMsgs);
         if (!failedACIMsgs.isEmpty())
           logMsgsSetLockDownMode(failedACIMsgs);
-        Message message =
+        LocalizableMessage message =
             INFO_ACI_ADD_LIST_ACIS.get(Integer.toString(validAcis),
                 String.valueOf(baseDN));
         logError(message);
@@ -566,12 +566,12 @@
    * @param failedACIMsgs
    *          List of exception messages from failed ACI decodes.
    */
-  public void logMsgsSetLockDownMode(LinkedList<Message> failedACIMsgs)
+  public void logMsgsSetLockDownMode(LinkedList<LocalizableMessage> failedACIMsgs)
   {
 
-    for (Message msg : failedACIMsgs)
+    for (LocalizableMessage msg : failedACIMsgs)
     {
-      Message message = WARN_ACI_SERVER_DECODE_FAILED.get(msg);
+      LocalizableMessage message = WARN_ACI_SERVER_DECODE_FAILED.get(msg);
       logError(message);
     }
     if (!inLockDownMode)
@@ -591,7 +591,7 @@
       inLockDownMode = true;
       // Send ALERT_TYPE_ACCESS_CONTROL_PARSE_FAILED alert that
       // lockdown is about to be entered.
-      Message lockDownMsg = WARN_ACI_ENTER_LOCKDOWN_MODE.get();
+      LocalizableMessage lockDownMsg = WARN_ACI_ENTER_LOCKDOWN_MODE.get();
       DirectoryServer.sendAlertNotification(this,
           ALERT_TYPE_ACCESS_CONTROL_PARSE_FAILED, lockDownMsg);
       // Enter lockdown mode.
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 77b5201..3d490b4 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
@@ -32,7 +32,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.DN;
 import org.opends.server.types.SearchScope;
@@ -252,7 +252,7 @@
         while (targetMatcher.find())
         {
             if (targetMatcher.groupCount() != targetElementCount) {
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_TARGET_SYNTAX.get(input);
                 throw new AciException(message);
             }
@@ -260,7 +260,7 @@
             EnumTargetKeyword targetKeyword  =
                 EnumTargetKeyword.createKeyword(keyword);
             if (targetKeyword == null) {
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_TARGET_KEYWORD.get(keyword);
                 throw new AciException(message);
             }
@@ -269,7 +269,7 @@
             EnumTargetOperator targetOperator =
                 EnumTargetOperator.createOperator(operator);
             if (targetOperator == null) {
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_TARGETS_OPERATOR.get(operator);
                 throw new AciException(message);
             }
@@ -283,7 +283,7 @@
                 }
                 else
                 {
-                  Message message =
+                  LocalizableMessage message =
                           WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
                                   get("target", input);
                   throw new AciException(message);
@@ -298,7 +298,7 @@
               }
               else
               {
-                Message message =
+                LocalizableMessage message =
                         WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
                                 get("targetcontrol", input);
                 throw new AciException(message);
@@ -312,7 +312,7 @@
               }
               else
               {
-                Message message =
+                LocalizableMessage message =
                         WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
                                 get("extop", input);
                 throw new AciException(message);
@@ -326,7 +326,7 @@
                             expression);
                 }
                 else {
-                  Message message =
+                  LocalizableMessage message =
                           WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
                                   get("targetattr", input);
                   throw new AciException(message);
@@ -337,7 +337,7 @@
             {
                 // Check the operator for the targetscope is EQUALITY
                 if (targetOperator == EnumTargetOperator.NOT_EQUALITY) {
-                    Message message =
+                    LocalizableMessage message =
                             WARN_ACI_SYNTAX_INVALID_TARGET_NOT_OPERATOR.
                               get(operator, targetKeyword.name());
                     throw new AciException(message);
@@ -352,7 +352,7 @@
                             expression);
                 }
                 else {
-                  Message message =
+                  LocalizableMessage message =
                           WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
                                   get("targetfilter", input);
                   throw new AciException(message);
@@ -364,7 +364,7 @@
                 if (targAttrFilters == null){
                     // Check the operator for the targattrfilters is EQUALITY
                     if (targetOperator == EnumTargetOperator.NOT_EQUALITY) {
-                      Message message =
+                      LocalizableMessage message =
                               WARN_ACI_SYNTAX_INVALID_TARGET_NOT_OPERATOR.
                                       get(operator, targetKeyword.name());
                       throw new AciException(message);
@@ -373,7 +373,7 @@
                             expression);
                 }
                 else {
-                  Message message =
+                  LocalizableMessage message =
                           WARN_ACI_SYNTAX_INVALID_TARGET_DUPLICATE_KEYWORDS.
                                   get("targattrfilters", input);
                   throw new AciException(message);
@@ -406,7 +406,7 @@
         else if(expression.equalsIgnoreCase("subordinate"))
             return SearchScope.SUBORDINATE_SUBTREE;
         else {
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_TARGETSCOPE_EXPRESSION.get(expression);
             throw new AciException(message);
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AuthMethod.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AuthMethod.java
index 19641f3..c46353a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AuthMethod.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/AuthMethod.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.loggers.ErrorLogger.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 
 /**
@@ -98,7 +98,7 @@
         return new AuthMethod(EnumAuthMethod.AUTHMETHOD_SASL, saslMech, type);
       }
 
-      Message message = WARN_ACI_SYNTAX_INVALID_AUTHMETHOD_EXPRESSION.get(expr);
+      LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_AUTHMETHOD_EXPRESSION.get(expr);
       throw new AciException(message);
     }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/BindRule.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/BindRule.java
index 60cdc9c..a155266 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/BindRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/BindRule.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;
 
@@ -33,7 +33,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This class represents a single bind rule of an ACI permission-bind rule
@@ -215,7 +215,7 @@
            * Raise an exception otherwise.
            */
           if (numOpen > numClose) {
-              Message message =
+              LocalizableMessage message =
                   ERR_ACI_SYNTAX_BIND_RULE_MISSING_CLOSE_PAREN.get(input);
               throw new AciException(message);
           }
@@ -266,7 +266,7 @@
             }
           }
           else {
-              Message message =
+              LocalizableMessage message =
                   ERR_ACI_SYNTAX_INVALID_BIND_RULE_SYNTAX.get(input);
               throw new AciException(message);
           }
@@ -293,7 +293,7 @@
         keyword = EnumBindRuleKeyword.createBindRuleKeyword(keywordStr);
         if (keyword == null)
         {
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD.get(keywordStr);
             throw new AciException(message);
         }
@@ -301,14 +301,14 @@
         // Get the operator
         operator = EnumBindRuleType.createBindruleOperand(operatorStr);
         if (operator == null) {
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_BIND_RULE_OPERATOR.get(operatorStr);
             throw new AciException(message);
         }
 
         //expression can't be null
         if (expression == null) {
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_MISSING_BIND_RULE_EXPRESSION.get(operatorStr);
             throw new AciException(message);
         }
@@ -344,7 +344,7 @@
             if ((operand == null)
                     || ((operand != EnumBooleanTypes.AND_BOOLEAN_TYPE) &&
                             (operand != EnumBooleanTypes.OR_BOOLEAN_TYPE))) {
-                Message message =
+                LocalizableMessage message =
                         WARN_ACI_SYNTAX_INVALID_BIND_RULE_BOOLEAN_OPERATOR
                                 .get(remainingOperand);
                 throw new AciException(message);
@@ -363,7 +363,7 @@
             bindrule_2.setNegate(negate);
             return new BindRule(bindrule, bindrule_2, operand);
         } else {
-            Message message = ERR_ACI_SYNTAX_INVALID_BIND_RULE_SYNTAX.get(
+            LocalizableMessage message = ERR_ACI_SYNTAX_INVALID_BIND_RULE_SYNTAX.get(
                 remainingBindruleStr);
             throw new AciException(message);
         }
@@ -432,7 +432,7 @@
         case DAYOFWEEK:
             if ((op != EnumBindRuleType.EQUAL_BINDRULE_TYPE)
                     && (op != EnumBindRuleType.NOT_EQUAL_BINDRULE_TYPE)) {
-                Message message =
+                LocalizableMessage message =
                   WARN_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD_OPERATOR_COMBO
                           .get(keyword.toString(), op.toString());
                 throw new AciException(message);
@@ -476,7 +476,7 @@
             {
                 //The roledn keyword is not supported. Throw an exception with
                 //a message if it is seen in the ACI.
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_ROLEDN_NOT_SUPPORTED.get(expr);
                 throw new AciException(message);
             }
@@ -521,7 +521,7 @@
                 break;
             }
             default:  {
-                Message message = WARN_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD.get(
+                LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_BIND_RULE_KEYWORD.get(
                     keyword.toString());
                 throw new AciException(message);
             }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/DNS.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/DNS.java
index 062b79f..765f785 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/DNS.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/DNS.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;
 
@@ -38,7 +38,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
 
@@ -88,7 +88,7 @@
     throws AciException
     {
         if (!Pattern.matches(valuesRegExGroup, expr)) {
-            Message message = WARN_ACI_SYNTAX_INVALID_DNS_EXPRESSION.get(expr);
+            LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_DNS_EXPRESSION.get(expr);
             throw new AciException(message);
         }
         List<String> dns = new LinkedList<String>();
@@ -100,7 +100,7 @@
             String[] hnArray=hn.split("\\.", -1);
             for(int i=1, n=hnArray.length; i < n; i++) {
                 if(hnArray[i].equals("*")) {
-                    Message message =
+                    LocalizableMessage message =
                         WARN_ACI_SYNTAX_INVALID_DNS_WILDCARD.get(expr);
                     throw new AciException(message);
                 }
@@ -132,14 +132,14 @@
                     {
                       dns.add(canonicalName);
 
-                      Message message =
+                      LocalizableMessage message =
                         WARN_ACI_LOCALHOST_DOESNT_MATCH_CANONICAL_VALUE.
                             get(expr, hn, canonicalName);
                       logError(message);
                     }
                     else
                     {
-                      Message message =
+                      LocalizableMessage message =
                         WARN_ACI_HOSTNAME_DOESNT_MATCH_CANONICAL_VALUE.
                             get(expr, hn, addr.getHostAddress(),
                                 addr.getCanonicalHostName());
@@ -155,7 +155,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, e);
                 }
 
-                Message message = WARN_ACI_ERROR_CHECKING_CANONICAL_HOSTNAME.
+                LocalizableMessage message = WARN_ACI_ERROR_CHECKING_CANONICAL_HOSTNAME.
                     get(hn, expr, getExceptionMessage(e));
                 logError(message);
               }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/DayOfWeek.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/DayOfWeek.java
index 1bbfb10..b404236 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/DayOfWeek.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/DayOfWeek.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;
 
@@ -33,7 +33,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This class implements the dayofweek bind rule keyword.
@@ -74,7 +74,7 @@
           EnumDayOfWeek day=EnumDayOfWeek.createDayOfWeek(element);
           if (day == null)
           {
-              Message message = WARN_ACI_SYNTAX_INVALID_DAYOFWEEK.get(expr);
+              LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_DAYOFWEEK.get(expr);
               throw new AciException(message);
           }
           days.add(day);
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 57eaf8b..21b0f39 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
@@ -34,7 +34,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.Group;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.GroupManager;
@@ -80,7 +80,7 @@
     public static KeywordBindRule decode(String expr, EnumBindRuleType type)
     throws AciException  {
         if (!Pattern.matches(LDAP_URLS, expr)) {
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_GROUPDN_EXPRESSION.get(expr);
             throw new AciException(message);
         }
@@ -94,7 +94,7 @@
                DN dn=LDAPURL.decode(value, true).getBaseDN();
                groupDNs.add(dn);
             } catch (DirectoryException ex) {
-                Message message = WARN_ACI_SYNTAX_INVALID_GROUPDN_URL.get(
+                LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_GROUPDN_URL.get(
                     ex.getMessageObject());
                 throw new AciException(message);
             }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/IP.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/IP.java
index 22229d3..4832763 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/IP.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/IP.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.AccessControlMessages.*;
 import java.util.regex.Pattern;
@@ -85,7 +85,7 @@
         List<PatternIP> patternIPList= new LinkedList<PatternIP>();
         for (String ipStr : ipStrs) {
             if (!Pattern.matches(ipRegEx, ipStr)) {
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_IP_EXPRESSION.get(expr);
                 throw new AciException(message);
             }
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 3996018..79af60c 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
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.authorization.dseecompat;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
@@ -98,7 +98,7 @@
         if (skipParse) {
             //The "parent[" pattern is invalid for ROLEDN user attr keyword.
             if(pattern.startsWith(parentPat)) {
-                Message message =
+                LocalizableMessage message =
                   WARN_ACI_SYNTAX_INVALID_USERATTR_ROLEDN_INHERITANCE_PATTERN
                           .get(pattern);
                 throw new AciException(message);
@@ -108,7 +108,7 @@
                 Matcher matcher=pattern1.matcher(pattern);
                //Check if valid attribute type name.
                if(!matcher.find() || matcher.groupCount() != 1) {
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_ATTRIBUTE_TYPE_NAME.get(pattern);
                 throw new AciException(message);
                }
@@ -139,7 +139,7 @@
              */
             String[] toks=p.split("\\.");
             if(toks.length != 2) {
-                Message message =
+                LocalizableMessage message =
                   WARN_ACI_SYNTAX_INVALID_USERATTR_INHERITANCE_PATTERN
                           .get(pattern);
                 throw new AciException(message);
@@ -148,7 +148,7 @@
             Matcher matcher=pattern1.matcher(toks[1]);
             //Check if valid attribute type name.
             if(!matcher.find() || matcher.groupCount() != 1) {
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_ATTRIBUTE_TYPE_NAME.get(toks[1]);
                 throw new AciException(message);
             }
@@ -164,13 +164,13 @@
                     if(numLevels < MAX_LEVELS) {
                         levels[numLevels++]=Integer.decode(v);
                     } else {
-                        Message message =
+                        LocalizableMessage message =
                         WARN_ACI_SYNTAX_MAX_USERATTR_INHERITANCE_LEVEL_EXCEEDED.
                               get(pattern, Integer.toString(MAX_LEVELS));
                         throw new AciException(message);
                     }
                 } catch (NumberFormatException ex) {
-                    Message message =
+                    LocalizableMessage message =
                         WARN_ACI_SYNTAX_INVALID_INHERITANCE_VALUE.get(pattern);
                     throw new AciException(message);
                 }
@@ -182,19 +182,19 @@
               LDAPURL url=LDAPURL.decode(pattern, true);
               LinkedHashSet<String>attrs=url.getAttributes();
               if(attrs.size() != 1) {
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_USERATTR_ATTR_URL.get(pattern);
                 throw new AciException(message);
               }
               baseDN=url.getBaseDN();
               if(baseDN.isRootDN()){
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_USERATTR_BASEDN_URL.get(pattern);
                 throw new AciException(message);
               }
               attrTypeStr=attrs.iterator().next();
             } catch (DirectoryException ex) {
-              Message message = WARN_ACI_SYNTAX_INVALID_USERATTR_URL.get(
+              LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_USERATTR_URL.get(
                   ex.getMessageObject());
               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 8e4bdcd..56bb8d5 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
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.authorization.dseecompat;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
@@ -427,7 +427,7 @@
       }
       else
       {
-        Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(
             dnString, attributeName.toString(), c);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -493,7 +493,7 @@
       {
         // This should not happen.  At any rate, it's an illegal
         // character, so throw an exception.
-        Message message = ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(dnString, c, pos);
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(dnString, c, pos);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
       }
@@ -522,7 +522,7 @@
         // because that would be invalid.
         if (pos >= length)
         {
-          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
               dnString, attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -542,7 +542,7 @@
             // This means that we hit the end of the value before
             // finding a '='.  This is illegal because there is no
             // attribute-value separator.
-            Message message =
+            LocalizableMessage message =
                 ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(dnString, name);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                          message);
@@ -562,7 +562,7 @@
         }
         else
         {
-          Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(dnString, name, c);
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(dnString, name, c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
         }
@@ -630,7 +630,7 @@
         {
           // This should not happen.  At any rate, it's an illegal
           // character, so throw an exception.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -725,7 +725,7 @@
           // know that there is at least one RDN component, and
           // therefore the last non-space character of the DN must
           // have been a comma. This is not acceptable.
-          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_COMMA.get(dnString);
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_COMMA.get(dnString);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
         }
@@ -760,7 +760,7 @@
         case ')':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -992,7 +992,7 @@
     // have at least one character.
     if (attributeName.length() == 0)
     {
-      Message message = ERR_ATTR_SYNTAX_DN_ATTR_NO_NAME.get(dnString);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_NO_NAME.get(dnString);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                    message);
     }
@@ -1067,7 +1067,7 @@
 
       if (! validOID)
       {
-        Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD.get(
             dnString, attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -1121,7 +1121,7 @@
       StringBuilder hexString = new StringBuilder();
       if ((pos+2) > length)
       {
-        Message message = ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(dnString);
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(dnString);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
       }
@@ -1135,7 +1135,7 @@
         }
         else
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(dnString, c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -1162,7 +1162,7 @@
             }
             else
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(dnString, c);
               throw new DirectoryException(
                              ResultCode.INVALID_DN_SYNTAX, message);
@@ -1170,7 +1170,7 @@
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(dnString);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                          message);
@@ -1184,7 +1184,7 @@
         }
         else
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(dnString, c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -1208,7 +1208,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.get(
             dnString, String.valueOf(e));
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -1230,7 +1230,7 @@
         {
           // We hit the end of the DN before the closing quote.
           // That's an error.
-          Message message = ERR_ATTR_SYNTAX_DN_UNMATCHED_QUOTE.get(dnString);
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_UNMATCHED_QUOTE.get(dnString);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
         }
@@ -1323,7 +1323,7 @@
             // value.
             if (pos >= length)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID.get(dnString);
               throw new DirectoryException(
                              ResultCode.INVALID_DN_SYNTAX, message);
@@ -1338,7 +1338,7 @@
               }
               else
               {
-                Message message =
+                LocalizableMessage message =
                     ERR_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID.get(dnString);
                 throw new DirectoryException(
                                ResultCode.INVALID_DN_SYNTAX, message);
@@ -1374,7 +1374,7 @@
           appendHexChars(dnString, valueString, hexChars);
           if (valueString.length() == 0)
           {
-            Message message =
+            LocalizableMessage message =
                 WARN_PATTERN_DN_CONSECUTIVE_WILDCARDS_IN_VALUE.get(dnString);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                          message);
@@ -1452,7 +1452,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.get(
           dnString, String.valueOf(e));
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                    message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternIP.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternIP.java
index 58906a9..a9e437d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternIP.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternIP.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 
 package org.opends.server.authorization.dseecompat;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.AccessControlMessages.*;
 import java.util.BitSet;
@@ -239,7 +240,7 @@
         try {
             //Can only have one prefix value and one address string.
             if((numParts  < 1) || (numParts > 2) ) {
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_PREFIX_FORMAT.get(expr);
                 throw new AciException(message);
             }
@@ -247,12 +248,12 @@
                 prefix = Integer.parseInt(prefixStr);
             //Must be between 0 to maxprefix.
             if((prefix < 0) || (prefix > maxPrefix)) {
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_PREFIX_VALUE.get(expr);
                 throw new AciException(message);
             }
         } catch(NumberFormatException nfex) {
-            Message msg = WARN_ACI_SYNTAX_PREFIX_NOT_NUMERIC.get(expr);
+            LocalizableMessage msg = WARN_ACI_SYNTAX_PREFIX_NOT_NUMERIC.get(expr);
             throw new AciException(msg);
         }
         return prefix;
@@ -303,12 +304,12 @@
         //Look up the string in the valid netmask hash table. If it isn't
         //there it is an error.
         if(!validNetMasks.containsKey(netmaskStr)) {
-            Message message = WARN_ACI_SYNTAX_INVALID_NETMASK.get(expr);
+            LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_NETMASK.get(expr);
             throw new AciException(message);
         }
         //Can only have one netmask value and one address string.
         if((numParts  < 1) || (numParts > 2) ) {
-            Message message = WARN_ACI_SYNTAX_INVALID_NETMASK_FORMAT.get(expr);
+            LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_NETMASK_FORMAT.get(expr);
             throw new AciException(message);
         }
         String[] s = netmaskStr.split("\\.", -1);
@@ -319,7 +320,7 @@
                 netmaskBytes[i] = (byte) (val & 0xff);
             }
         } catch (NumberFormatException nfex) {
-            Message message = WARN_ACI_SYNTAX_IPV4_NOT_NUMERIC.get(expr);
+            LocalizableMessage message = WARN_ACI_SYNTAX_IPV4_NOT_NUMERIC.get(expr);
             throw new AciException(message);
         }
         return netmaskBytes;
@@ -347,7 +348,7 @@
         String[] s = addrStr.split("\\.", -1);
         try {
             if(s.length != IN4ADDRSZ) {
-                Message message = WARN_ACI_SYNTAX_INVALID_IPV4_FORMAT.get(expr);
+                LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_IPV4_FORMAT.get(expr);
                 throw new AciException(message);
             }
             for(int i=0; i < IN4ADDRSZ; i++) {
@@ -358,7 +359,7 @@
                     long val=Integer.parseInt(quad);
                     //must be between 0-255
                     if((val < 0) ||  (val > 0xff)) {
-                        Message message =
+                        LocalizableMessage message =
                             WARN_ACI_SYNTAX_INVALID_IPV4_VALUE.get(expr);
                         throw new AciException(message);
                     }
@@ -366,7 +367,7 @@
                 }
             }
         } catch (NumberFormatException nfex) {
-            Message message = WARN_ACI_SYNTAX_IPV4_NOT_NUMERIC.get(expr);
+            LocalizableMessage message = WARN_ACI_SYNTAX_IPV4_NOT_NUMERIC.get(expr);
             throw new AciException(message);
         }
         return addrBytes;
@@ -387,14 +388,14 @@
     private static byte[]
     procIPv6Addr(String addrStr, String expr) throws AciException {
         if(addrStr.indexOf('*') > -1) {
-            Message message = WARN_ACI_SYNTAX_IPV6_WILDCARD_INVALID.get(expr);
+            LocalizableMessage message = WARN_ACI_SYNTAX_IPV6_WILDCARD_INVALID.get(expr);
             throw new AciException(message);
         }
         byte[] addrBytes;
         try {
             addrBytes=InetAddress.getByName(addrStr).getAddress();
         } catch (UnknownHostException ex) {
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_IPV6_FORMAT.get(expr, ex.getMessage());
             throw new AciException(message);
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternRDN.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternRDN.java
index ee20971..83cd9a5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternRDN.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/PatternRDN.java
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.authorization.dseecompat;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
@@ -95,7 +95,7 @@
     {
       if (!type.equals("*"))
       {
-        Message message =
+        LocalizableMessage message =
             WARN_PATTERN_DN_TYPE_CONTAINS_SUBSTRINGS.get(dnString);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -127,7 +127,7 @@
     // No type wildcards permitted in multi-valued patterns.
     if (hasTypeWildcard || type.contains("*"))
     {
-      Message message =
+      LocalizableMessage message =
           WARN_PATTERN_DN_TYPE_WILDCARD_IN_MULTIVALUED_RDN.get(dnString);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                    message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Permission.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Permission.java
index 7b27f83..d7581af 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Permission.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Permission.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;
 import static org.opends.messages.AccessControlMessages.*;
@@ -32,7 +32,7 @@
 import java.util.Set;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A class representing the permissions of an bind rule. The permissions
@@ -76,12 +76,12 @@
     throws AciException {
         if ((this.accessType =
             EnumAccessType.decode(accessType)) == null){
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_ACCESS_TYPE_VERSION.get(accessType);
             throw new AciException(message);
         }
         if (!Pattern.matches(rightsRegex, rights)){
-            Message message = WARN_ACI_SYNTAX_INVALID_RIGHTS_SYNTAX.get(rights);
+            LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_RIGHTS_SYNTAX.get(rights);
             throw new AciException(message);
         }
         else {
@@ -93,7 +93,7 @@
                 if (right != null)
                     this.rights|= EnumRight.getMask(right);
                 else {
-                    Message message =
+                    LocalizableMessage message =
                         WARN_ACI_SYNTAX_INVALID_RIGHTS_KEYWORD.get(rights);
                     throw new AciException(message);
                 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/SSF.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/SSF.java
index 20aa1a3..0f94d4c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/SSF.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/SSF.java
@@ -22,11 +22,11 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.AccessControlMessages.*;
 
 /**
@@ -59,12 +59,12 @@
         try {
             valueAsInt = Integer.parseInt(expr);
         } catch (NumberFormatException nfe) {
-            Message message =
+            LocalizableMessage message =
                  WARN_ACI_SYNTAX_INVALID_SSF_FORMAT.get(expr, nfe.getMessage());
             throw new AciException(message);
         }
         if ((valueAsInt <= 0) || (valueAsInt > MAX_KEY_BITS)) {
-            Message message = WARN_ACI_SYNTAX_INVALID_SSF_RANGE.get(expr);
+            LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_SSF_RANGE.get(expr);
             throw new AciException(message);
         }
         return new SSF(valueAsInt, type);
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilterList.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilterList.java
index 1002dc0..9268379 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilterList.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargAttrFilterList.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;
 
@@ -33,7 +33,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.DirectoryException;
@@ -119,7 +119,7 @@
             Matcher matcher=pattern.matcher(subs);
             //Match the attribute:filter pair part of the expression
             if(!matcher.find() || matcher.groupCount() != expectedGroupCount) {
-                Message message =
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LIST_FORMAT.
                       get(expression);
                 throw new AciException(message);
@@ -142,8 +142,8 @@
                filter = SearchFilter.createFilterFromString(filterString);
                attrFilterList.put(attributeType, filter);
             } catch (DirectoryException ex) {
-                Message er=ex.getMessageObject();
-                Message message =
+                LocalizableMessage er=ex.getMessageObject();
+                LocalizableMessage message =
                     WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_FILTER.
                       get(filterString, er);
                 throw new AciException(message);
@@ -183,7 +183,7 @@
             default: {
                 AttributeType attrType=filter.getAttributeType();
                 if(!attrType.equals(type)) {
-                    Message message =
+                    LocalizableMessage message =
                WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_FILTER_LISTS_ATTR_FILTER.
                           get(filter.toString());
                     throw new AciException(message);
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 6b14f13..d12f308 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
@@ -34,7 +34,7 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.*;
 
 /**
@@ -149,7 +149,7 @@
         Matcher matcher = fullPattern.matcher(expression);
         //First match for overall correctness and to get the first operation.
         if(!matcher.find()) {
-            Message message =
+            LocalizableMessage message =
               WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION.
                   get(expression);
             throw new AciException(message);
@@ -173,7 +173,7 @@
          * This is invalid.
          */
         if(temp.length > 1) {
-            Message message = WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_OPS_MATCH.
+            LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_OPS_MATCH.
                 get(expression);
             throw new AciException(message);
         }
@@ -184,7 +184,7 @@
         String[] filterLists=
                 subExpression.split(secondOp, -1);
         if(filterLists.length > 2) {
-          Message message =
+          LocalizableMessage message =
               WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_MAX_FILTER_LISTS.
                 get(expression);
           throw new AciException(message);
@@ -193,7 +193,7 @@
           //that the regular expression didn't pick up.
           String [] filterList2=subExpression.split(secondOpSeparator);
           if(filterList2.length == 2) {
-              Message message =
+              LocalizableMessage message =
                   WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION.
                     get(expression);
               throw new AciException(message);
@@ -202,7 +202,7 @@
           //This check catches the case where there might not be a
           //',' character between the first filter list and the second.
           if(subExpression.indexOf(rg) != -1) {
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION.
                   get(expression);
             throw new AciException(message);
@@ -211,7 +211,7 @@
         filterLists[0]=filterLists[0].trim();
         //First filter list must end in an ')' character.
         if(!filterLists[0].endsWith(")")) {
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION.
                   get(expression);
             throw new AciException(message);
@@ -224,7 +224,7 @@
             String filterList=filterLists[1].trim();
             //Second filter list must start with a '='.
             if(!filterList.startsWith("=")) {
-              Message message =
+              LocalizableMessage message =
                   WARN_ACI_SYNTAX_INVALID_TARGATTRFILTERS_EXPRESSION.
                     get(expression);
               throw new AciException(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Target.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Target.java
index 6045ff5..111ff69 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Target.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/Target.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.authorization.dseecompat;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
@@ -83,7 +84,7 @@
           //The NULL_LDAP_URL corresponds to the root DSE.
           if((!target.equals(NULL_LDAP_URL)) &&
              (!Pattern.matches(LDAP_URL, target))) {
-              Message message =
+              LocalizableMessage message =
                   WARN_ACI_SYNTAX_INVALID_TARGETKEYWORD_EXPRESSION.get(target);
               throw new AciException(message);
           }
@@ -94,7 +95,7 @@
           } else {
               urlDN=targetURL.getBaseDN();
               if(!urlDN.isDescendantOf(aciDN)) {
-                  Message message = WARN_ACI_SYNTAX_TARGET_DN_NOT_DESCENDENTOF.
+                  LocalizableMessage message = WARN_ACI_SYNTAX_TARGET_DN_NOT_DESCENDENTOF.
                       get(urlDN.toNormalizedString(),
                           aciDN.toNormalizedString());
                   throw new AciException(message);
@@ -102,7 +103,7 @@
           }
         }
         catch (DirectoryException e){
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_TARGETKEYWORD_EXPRESSION.get(target);
             throw new AciException(message);
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargetAttr.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargetAttr.java
index 8095e2b..423ec0d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargetAttr.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargetAttr.java
@@ -22,11 +22,11 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012-2013 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 
 package org.opends.server.authorization.dseecompat;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.AccessControlMessages.*;
 import static org.opends.server.authorization.dseecompat.Aci.*;
@@ -107,7 +107,7 @@
                         //after conversion to AttributeType.
                         arrayToAttributeTypes(attributeArray, attrString);
                     } else {
-                      Message message =
+                      LocalizableMessage message =
                           WARN_ACI_SYNTAX_INVALID_TARGETATTRKEYWORD_EXPRESSION.
                             get(attrString);
                       throw new AciException(message);
@@ -137,7 +137,7 @@
                 if(!allUserAttributes)
                     allUserAttributes=true;
                 else {
-                    Message message =
+                    LocalizableMessage message =
                         WARN_ACI_TARGETATTR_INVALID_ATTR_TOKEN.get(attrStr);
                     throw new AciException(message);
                 }
@@ -145,7 +145,7 @@
                 if(!allOpAttributes)
                     allOpAttributes=true;
                 else {
-                    Message message =
+                    LocalizableMessage message =
                         WARN_ACI_TARGETATTR_INVALID_ATTR_TOKEN.get(attrStr);
                     throw new AciException(message);
                 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargetFilter.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargetFilter.java
index 07a3376..3fed4f5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargetFilter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TargetFilter.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.authorization.dseecompat;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.AccessControlMessages.*;
 import org.opends.server.types.DirectoryException;
@@ -71,7 +72,7 @@
         try {
             filter = SearchFilter.createFilterFromString(expr);
         } catch (DirectoryException ex) {
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_TARGETFILTERKEYWORD_EXPRESSION.
                   get(expr);
             throw new AciException(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TimeOfDay.java b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TimeOfDay.java
index 1f706cb..60f9e98 100644
--- a/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TimeOfDay.java
+++ b/opendj3-server-dev/src/server/org/opends/server/authorization/dseecompat/TimeOfDay.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.authorization.dseecompat;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.AccessControlMessages.*;
 import org.opends.server.util.TimeThread;
@@ -69,19 +69,19 @@
         int valueAsInt = 0;
         if (!Pattern.matches(timeofdayRegex, expr))
         {
-            Message message = WARN_ACI_SYNTAX_INVALID_TIMEOFDAY.get(expr);
+            LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_TIMEOFDAY.get(expr);
             throw new AciException(message);
          }
         try {
             valueAsInt = Integer.parseInt(expr);
         } catch (NumberFormatException nfe) {
-          Message message =
+          LocalizableMessage message =
            WARN_ACI_SYNTAX_INVALID_TIMEOFDAY_FORMAT.get(expr, nfe.getMessage());
             throw new AciException(message);
         }
         if ((valueAsInt < 0) || (valueAsInt > 2359))
         {
-            Message message = WARN_ACI_SYNTAX_INVALID_TIMEOFDAY_RANGE.get(expr);
+            LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_TIMEOFDAY_RANGE.get(expr);
             throw new AciException(message);
         }
 
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 be78720..c8adf4d 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
@@ -32,7 +32,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.protocols.internal.InternalClientConnection;
 import org.opends.server.protocols.internal.InternalSearchOperation;
@@ -138,7 +138,7 @@
     throws AciException {
         String[] vals=expression.split("#");
         if(vals.length != 2) {
-            Message message =
+            LocalizableMessage message =
                 WARN_ACI_SYNTAX_INVALID_USERATTR_EXPRESSION.get(expression);
             throw new AciException(message);
         }
@@ -153,7 +153,7 @@
                 case ROLEDN: {
                   //The roledn keyword is not supported. Throw an exception with
                   //a message if it is seen in the expression.
-                  Message message =
+                  LocalizableMessage message =
                       WARN_ACI_SYNTAX_ROLEDN_NOT_SUPPORTED.get(expression);
                   throw new AciException(message);
                 }
@@ -239,7 +239,7 @@
         else if(expr.equalsIgnoreCase("groupdn")) {
              userAttrType=UserAttrType.GROUPDN;
       /*
-            Message message = WARN_ACI_SYNTAX_INVALID_USERATTR_KEYWORD.get(
+            LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_USERATTR_KEYWORD.get(
                 "The groupdn userattr" +
                     "keyword is not supported.");
             throw new AciException(message);
@@ -247,7 +247,7 @@
         } else if(expr.equalsIgnoreCase("roledn")) {
             userAttrType=UserAttrType.ROLEDN;
             /*
-            Message message = WARN_ACI_SYNTAX_INVALID_USERATTR_KEYWORD.get(
+            LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_USERATTR_KEYWORD.get(
                 "The roledn userattr" +
                     "keyword is not supported.");
             throw new AciException(message);
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 94e8e15..8c17c0b 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
@@ -32,7 +32,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.*;
 
@@ -100,7 +100,7 @@
             try {
                url=LDAPURL.decode(value.toString(), true);
             } catch (DirectoryException de) {
-                Message message = WARN_ACI_SYNTAX_INVALID_USERDN_URL.get(
+                LocalizableMessage message = WARN_ACI_SYNTAX_INVALID_USERDN_URL.get(
                     de.getMessageObject());
                 throw new AciException(message);
             }
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 e9b4744..e782074 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
@@ -31,7 +31,7 @@
 import java.io.File;
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.BackupBackendCfg;
@@ -123,7 +123,7 @@
     // not be able to complete initialization.
     if (config == null)
     {
-      Message message = ERR_BACKUP_CONFIG_ENTRY_NULL.get();
+      LocalizableMessage message = ERR_BACKUP_CONFIG_ENTRY_NULL.get();
       throw new ConfigException(message);
     }
 
@@ -155,7 +155,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_BACKUP_CANNOT_DECODE_BACKUP_ROOT_DN.get(getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -224,7 +224,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+      LocalizableMessage message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
           backupBaseDN.toString(), getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -455,7 +455,7 @@
     // If the requested entry was null, then throw an exception.
     if (entryDN == null)
     {
-      Message message = ERR_BACKUP_GET_ENTRY_NULL.get();
+      LocalizableMessage message = ERR_BACKUP_GET_ENTRY_NULL.get();
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
@@ -475,7 +475,7 @@
     DN parentDN = entryDN.getParentDNInSuffix();
     if (parentDN == null)
     {
-      Message message = ERR_BACKUP_INVALID_BASE.get(String.valueOf(entryDN));
+      LocalizableMessage message = ERR_BACKUP_INVALID_BASE.get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
     else if (parentDN.equals(backupBaseDN))
@@ -488,7 +488,7 @@
     }
     else
     {
-      Message message = ERR_BACKUP_INVALID_BASE.get(String.valueOf(entryDN));
+      LocalizableMessage message = ERR_BACKUP_INVALID_BASE.get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
               message, backupBaseDN, null);
     }
@@ -518,7 +518,7 @@
     AttributeValue v = entryDN.rdn().getAttributeValue(t);
     if (v == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_BACKUP_DN_DOES_NOT_SPECIFY_DIRECTORY.get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
                                    backupBaseDN, null);
@@ -541,7 +541,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
 
-      Message message = ERR_BACKUP_INVALID_BACKUP_DIRECTORY.get(
+      LocalizableMessage message = ERR_BACKUP_INVALID_BACKUP_DIRECTORY.get(
           String.valueOf(entryDN), ce.getMessage());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -552,7 +552,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_BACKUP_ERROR_GETTING_BACKUP_DIRECTORY.get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -610,7 +610,7 @@
         true);
     AttributeValue idValue = entryDN.rdn().getAttributeValue(idType);
     if (idValue == null) {
-      Message message = ERR_BACKUP_NO_BACKUP_ID_IN_DN.get(String
+      LocalizableMessage message = ERR_BACKUP_NO_BACKUP_ID_IN_DN.get(String
           .valueOf(entryDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -619,7 +619,7 @@
     // Next, get the backup directory from the parent DN.
     DN parentDN = entryDN.getParentDNInSuffix();
     if (parentDN == null) {
-      Message message = ERR_BACKUP_NO_BACKUP_PARENT_DN.get(String
+      LocalizableMessage message = ERR_BACKUP_NO_BACKUP_PARENT_DN.get(String
           .valueOf(entryDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -628,7 +628,7 @@
         ATTR_BACKUP_DIRECTORY_PATH, true);
     AttributeValue v = parentDN.rdn().getAttributeValue(t);
     if (v == null) {
-      Message message = ERR_BACKUP_NO_BACKUP_DIR_IN_DN.get(String
+      LocalizableMessage message = ERR_BACKUP_NO_BACKUP_DIR_IN_DN.get(String
           .valueOf(entryDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -642,7 +642,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
 
-      Message message = ERR_BACKUP_INVALID_BACKUP_DIRECTORY.get(String
+      LocalizableMessage message = ERR_BACKUP_INVALID_BACKUP_DIRECTORY.get(String
           .valueOf(entryDN), ce.getMessageObject());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     } catch (Exception e) {
@@ -650,7 +650,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_BACKUP_ERROR_GETTING_BACKUP_DIRECTORY
+      LocalizableMessage message = ERR_BACKUP_ERROR_GETTING_BACKUP_DIRECTORY
           .get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message);
@@ -658,7 +658,7 @@
 
     BackupInfo backupInfo = backupDirectory.getBackupInfo(backupID);
     if (backupInfo == null) {
-      Message message = ERR_BACKUP_NO_SUCH_BACKUP.get(backupID, backupDirectory
+      LocalizableMessage message = ERR_BACKUP_NO_SUCH_BACKUP.get(backupID, backupDirectory
           .getPath());
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
           parentDN, null);
@@ -773,7 +773,7 @@
   public void addEntry(Entry entry, AddOperation addOperation)
          throws DirectoryException
   {
-    Message message = ERR_BACKUP_ADD_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_ADD_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -786,7 +786,7 @@
   public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
          throws DirectoryException
   {
-    Message message = ERR_BACKUP_DELETE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_DELETE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -799,7 +799,7 @@
   public void replaceEntry(Entry oldEntry, Entry newEntry,
       ModifyOperation modifyOperation) throws DirectoryException
   {
-    Message message = ERR_BACKUP_MODIFY_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_MODIFY_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -813,7 +813,7 @@
                                    ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    Message message = ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -988,7 +988,7 @@
       if ((parentDN == null)
           || (! backupBaseDN.equals(parentDN.getParentDNInSuffix())))
       {
-        Message message = ERR_BACKUP_NO_SUCH_ENTRY.get(
+        LocalizableMessage message = ERR_BACKUP_NO_SUCH_ENTRY.get(
                 String.valueOf(backupBaseDN)
         );
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
@@ -1000,7 +1000,7 @@
         Entry backupEntry = getBackupEntry(baseDN);
         if (backupEntry == null)
         {
-          Message message = ERR_BACKUP_NO_SUCH_ENTRY.get(
+          LocalizableMessage message = ERR_BACKUP_NO_SUCH_ENTRY.get(
                   String.valueOf(backupBaseDN));
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
         }
@@ -1056,7 +1056,7 @@
   public void exportLDIF(LDIFExportConfig exportConfig)
          throws DirectoryException
   {
-    Message message = ERR_BACKUP_EXPORT_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_EXPORT_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1082,7 +1082,7 @@
          throws DirectoryException
   {
     // This backend does not support LDIF imports.
-    Message message = ERR_BACKUP_IMPORT_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_IMPORT_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1121,7 +1121,7 @@
   throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    Message message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1136,7 +1136,7 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    Message message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1162,7 +1162,7 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    Message message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1172,7 +1172,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-       BackupBackendCfg cfg, List<Message> unacceptableReasons)
+       BackupBackendCfg cfg, List<LocalizableMessage> unacceptableReasons)
   {
     // We'll accept anything here.  The only configurable attribute is the
     // default set of backup directories, but that doesn't require any
@@ -1189,7 +1189,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     Set<String> values = cfg.getBackupDirectory();
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 067bedd..ed96f05 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
@@ -30,7 +30,7 @@
 import java.util.*;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.LDIFBackendCfg;
@@ -127,7 +127,7 @@
     // map.
     if (baseDNs == null || baseDNs.length != 1)
     {
-      Message message = ERR_LDIF_BACKEND_MULTIPLE_BASE_DNS.get(
+      LocalizableMessage message = ERR_LDIF_BACKEND_MULTIPLE_BASE_DNS.get(
                              currentConfig.dn().toString());
       throw new ConfigException(message);
     }
@@ -146,7 +146,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+        LocalizableMessage message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
             dn.toString(), getExceptionMessage(e));
         throw new InitializationException(message, e);
       }
@@ -229,7 +229,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_LDIF_BACKEND_ERROR_CREATING_FILE.get(
+      LocalizableMessage m = ERR_LDIF_BACKEND_ERROR_CREATING_FILE.get(
                        tempFile.getAbsolutePath(),
                        currentConfig.dn().toString(),
                        stackTraceToSingleLineString(e));
@@ -255,7 +255,7 @@
 
         StaticUtils.close(writer);
 
-        Message m = ERR_LDIF_BACKEND_ERROR_WRITING_FILE.get(
+        LocalizableMessage m = ERR_LDIF_BACKEND_ERROR_WRITING_FILE.get(
                          tempFile.getAbsolutePath(),
                          currentConfig.dn().toString(),
                          stackTraceToSingleLineString(e));
@@ -312,7 +312,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_LDIF_BACKEND_ERROR_RENAMING_FILE.get(
+      LocalizableMessage m = ERR_LDIF_BACKEND_ERROR_RENAMING_FILE.get(
                        tempFile.getAbsolutePath(),
                        ldifFile.getAbsolutePath(),
                        currentConfig.dn().toString(),
@@ -431,7 +431,7 @@
         }
         else
         {
-          Message m = ERR_LDIF_BACKEND_HAS_SUBORDINATES_NO_SUCH_ENTRY.get(
+          LocalizableMessage m = ERR_LDIF_BACKEND_HAS_SUBORDINATES_NO_SUCH_ENTRY.get(
                            String.valueOf(entryDN));
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, m);
         }
@@ -469,7 +469,7 @@
         }
         else
         {
-          Message m = ERR_LDIF_BACKEND_NUM_SUBORDINATES_NO_SUCH_ENTRY.get(
+          LocalizableMessage m = ERR_LDIF_BACKEND_NUM_SUBORDINATES_NO_SUCH_ENTRY.get(
                            String.valueOf(entryDN));
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, m);
         }
@@ -551,7 +551,7 @@
       DN entryDN = entry.getName();
       if (entryMap.containsKey(entryDN))
       {
-        Message m = ERR_LDIF_BACKEND_ADD_ALREADY_EXISTS.get(entryDN.toString());
+        LocalizableMessage m = ERR_LDIF_BACKEND_ADD_ALREADY_EXISTS.get(entryDN.toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, m);
       }
 
@@ -599,7 +599,7 @@
             }
           }
 
-          Message m =
+          LocalizableMessage m =
                ERR_LDIF_BACKEND_ADD_MISSING_PARENT.get(entryDN.toString());
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, m, matchedDN,
                                        null);
@@ -643,7 +643,7 @@
           parentDN = parentDN.getParentDNInSuffix();
         }
 
-        Message m =
+        LocalizableMessage m =
              ERR_LDIF_BACKEND_DELETE_NO_SUCH_ENTRY.get(entryDN.toString());
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, m, matchedDN,
                                      null);
@@ -683,7 +683,7 @@
 
         if (! subtreeDelete)
         {
-          Message m = ERR_LDIF_BACKEND_DELETE_NONLEAF.get(entryDN.toString());
+          LocalizableMessage m = ERR_LDIF_BACKEND_DELETE_NONLEAF.get(entryDN.toString());
           throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF, m);
         }
 
@@ -769,7 +769,7 @@
           parentDN = parentDN.getParentDNInSuffix();
         }
 
-        Message m =
+        LocalizableMessage m =
              ERR_LDIF_BACKEND_MODIFY_NO_SUCH_ENTRY.get(entryDN.toString());
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, m, matchedDN,
                                      null);
@@ -815,7 +815,7 @@
           parentDN = parentDN.getParentDNInSuffix();
         }
 
-        Message m = ERR_LDIF_BACKEND_MODDN_NO_SUCH_SOURCE_ENTRY.get(
+        LocalizableMessage m = ERR_LDIF_BACKEND_MODDN_NO_SUCH_SOURCE_ENTRY.get(
                          currentDN.toString());
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, m, matchedDN,
                                      null);
@@ -823,7 +823,7 @@
 
       if (entryMap.containsKey(newDN))
       {
-        Message m = ERR_LDIF_BACKEND_MODDN_TARGET_ENTRY_ALREADY_EXISTS.get(
+        LocalizableMessage m = ERR_LDIF_BACKEND_MODDN_TARGET_ENTRY_ALREADY_EXISTS.get(
                          newDN.toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, m);
       }
@@ -831,7 +831,7 @@
       DN newParentDN = newDN.getParentDNInSuffix();
       if (! entryMap.containsKey(newParentDN))
       {
-        Message m = ERR_LDIF_BACKEND_MODDN_NEW_PARENT_DOESNT_EXIST.get(
+        LocalizableMessage m = ERR_LDIF_BACKEND_MODDN_NEW_PARENT_DOESNT_EXIST.get(
                          String.valueOf(newParentDN));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, m);
       }
@@ -960,7 +960,7 @@
           matchedDN = matchedDN.getParentDNInSuffix();
         }
 
-        Message m = ERR_LDIF_BACKEND_SEARCH_NO_SUCH_BASE.get(
+        LocalizableMessage m = ERR_LDIF_BACKEND_SEARCH_NO_SUCH_BASE.get(
                          String.valueOf(baseDN));
         throw new DirectoryException(
                 ResultCode.NO_SUCH_OBJECT, m, matchedDN, null);
@@ -1050,7 +1050,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message m = ERR_LDIF_BACKEND_CANNOT_CREATE_LDIF_WRITER.get(
+        LocalizableMessage m = ERR_LDIF_BACKEND_CANNOT_CREATE_LDIF_WRITER.get(
                          stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      m, e);
@@ -1069,7 +1069,7 @@
       }
       catch (Exception e)
       {
-        Message m = ERR_LDIF_BACKEND_CANNOT_WRITE_ENTRY_TO_LDIF.get(
+        LocalizableMessage m = ERR_LDIF_BACKEND_CANNOT_WRITE_ENTRY_TO_LDIF.get(
                          String.valueOf(entryDN),
                          stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
@@ -1132,7 +1132,7 @@
       }
       catch (Exception e)
       {
-        Message m = ERR_LDIF_BACKEND_CANNOT_CREATE_LDIF_READER.get(
+        LocalizableMessage m = ERR_LDIF_BACKEND_CANNOT_CREATE_LDIF_READER.get(
                          stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      m, e);
@@ -1159,7 +1159,7 @@
           {
             if (! le.canContinueReading())
             {
-              Message m = ERR_LDIF_BACKEND_ERROR_READING_LDIF.get(
+              LocalizableMessage m = ERR_LDIF_BACKEND_ERROR_READING_LDIF.get(
                                stackTraceToSingleLineString(le));
               throw new DirectoryException(
                              DirectoryServer.getServerErrorResultCode(), m, le);
@@ -1175,7 +1175,7 @@
           DN entryDN = e.getName();
           if (entryMap.containsKey(entryDN))
           {
-            Message m = ERR_LDIF_BACKEND_DUPLICATE_ENTRY.get(ldifFilePath,
+            LocalizableMessage m = ERR_LDIF_BACKEND_DUPLICATE_ENTRY.get(ldifFilePath,
                              currentConfig.dn().toString(), entryDN.toString());
             logError(m);
             reader.rejectLastEntry(m);
@@ -1204,7 +1204,7 @@
 
           if (! isBelowBaseDN)
           {
-            Message m = ERR_LDIF_BACKEND_ENTRY_OUT_OF_SCOPE.get(ldifFilePath,
+            LocalizableMessage m = ERR_LDIF_BACKEND_ENTRY_OUT_OF_SCOPE.get(ldifFilePath,
                              currentConfig.dn().toString(), entryDN.toString());
             logError(m);
             reader.rejectLastEntry(m);
@@ -1214,7 +1214,7 @@
           DN parentDN = entryDN.getParentDNInSuffix();
           if (parentDN == null || !entryMap.containsKey(parentDN))
           {
-            Message m = ERR_LDIF_BACKEND_MISSING_PARENT.get(ldifFilePath,
+            LocalizableMessage m = ERR_LDIF_BACKEND_MISSING_PARENT.get(ldifFilePath,
                              currentConfig.dn().toString(), entryDN.toString());
             logError(m);
             reader.rejectLastEntry(m);
@@ -1252,7 +1252,7 @@
       }
       catch (Exception e)
       {
-        Message m = ERR_LDIF_BACKEND_ERROR_READING_LDIF.get(
+        LocalizableMessage m = ERR_LDIF_BACKEND_ERROR_READING_LDIF.get(
                          stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      m, e);
@@ -1296,7 +1296,7 @@
   public void createBackup(BackupConfig backupConfig)
          throws DirectoryException
   {
-    Message message = ERR_LDIF_BACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_LDIF_BACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1307,7 +1307,7 @@
   public void removeBackup(BackupDirectory backupDirectory, String backupID)
          throws DirectoryException
   {
-    Message message = ERR_LDIF_BACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_LDIF_BACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1328,7 +1328,7 @@
   public void restoreBackup(RestoreConfig restoreConfig)
          throws DirectoryException
   {
-    Message message = ERR_LDIF_BACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_LDIF_BACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1370,7 +1370,7 @@
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationChangeAcceptable(LDIFBackendCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -1396,7 +1396,7 @@
     // the base DNs or LDIF file are different from what we're currently using
     // then indicate that admin action is required.
     boolean adminActionRequired = false;
-    LinkedList<Message> messages = new LinkedList<Message>();
+    LinkedList<LocalizableMessage> messages = new LinkedList<LocalizableMessage>();
 
     if (ldifFilePath != null)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/MemoryBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/MemoryBackend.java
index 7c35f4c..6cbb167 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/MemoryBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/MemoryBackend.java
@@ -34,7 +34,7 @@
 import java.util.LinkedList;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.std.server.MemoryBackendCfg;
 import org.opends.server.api.Backend;
@@ -189,7 +189,7 @@
     // map.
     if ((baseDNs == null) || (baseDNs.length != 1))
     {
-      Message message = ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE.get();
+      LocalizableMessage message = ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE.get();
       throw new ConfigException(message);
     }
 
@@ -220,7 +220,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+        LocalizableMessage message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
             dn.toString(), getExceptionMessage(e));
         throw new InitializationException(message, e);
       }
@@ -415,7 +415,7 @@
     DN entryDN = e.getName();
     if (entryMap.containsKey(entryDN))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS.get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message);
     }
@@ -433,13 +433,13 @@
     DN parentDN = entryDN.getParentDNInSuffix();
     if (parentDN == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_ENTRY_DOESNT_BELONG.get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
     else if (! entryMap.containsKey(parentDN))
     {
-      Message message = ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST.get(
+      LocalizableMessage message = ERR_MEMORYBACKEND_PARENT_DOESNT_EXIST.get(
           String.valueOf(entryDN), String.valueOf(parentDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -468,7 +468,7 @@
     // Make sure the entry exists.  If not, then throw an exception.
     if (! entryMap.containsKey(entryDN))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -514,7 +514,7 @@
       // an exception.
       if ((children != null) && (! children.isEmpty()))
       {
-        Message message = ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN.
+        LocalizableMessage message = ERR_MEMORYBACKEND_CANNOT_DELETE_ENTRY_WITH_CHILDREN.
             get(String.valueOf(entryDN));
         throw new DirectoryException(
                 ResultCode.NOT_ALLOWED_ON_NONLEAF, message);
@@ -557,7 +557,7 @@
     DN entryDN = e.getName();
     if (! entryMap.containsKey(entryDN))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -582,7 +582,7 @@
     // Make sure that the target entry exists.
     if (! entryMap.containsKey(currentDN))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String.valueOf(currentDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -598,7 +598,7 @@
       }
       else
       {
-        Message message = ERR_MEMORYBACKEND_CANNOT_RENAME_ENRY_WITH_CHILDREN.
+        LocalizableMessage message = ERR_MEMORYBACKEND_CANNOT_RENAME_ENRY_WITH_CHILDREN.
             get(String.valueOf(currentDN));
         throw new DirectoryException(
                 ResultCode.NOT_ALLOWED_ON_NONLEAF, message);
@@ -609,7 +609,7 @@
     // Make sure that no entry exists with the new DN.
     if (entryMap.containsKey(e.getName()))
     {
-      Message message = ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS.get(
+      LocalizableMessage message = ERR_MEMORYBACKEND_ENTRY_ALREADY_EXISTS.get(
           String.valueOf(e.getName()));
       throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message);
     }
@@ -628,7 +628,7 @@
 
     if (! matchFound)
     {
-      Message message = ERR_MEMORYBACKEND_CANNOT_RENAME_TO_ANOTHER_BACKEND.get(
+      LocalizableMessage message = ERR_MEMORYBACKEND_CANNOT_RENAME_TO_ANOTHER_BACKEND.get(
           String.valueOf(currentDN));
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -638,7 +638,7 @@
     DN parentDN = e.getName().getParentDNInSuffix();
     if ((parentDN == null) || (! entryMap.containsKey(parentDN)))
     {
-      Message message = ERR_MEMORYBACKEND_RENAME_PARENT_DOESNT_EXIST.get(
+      LocalizableMessage message = ERR_MEMORYBACKEND_RENAME_PARENT_DOESNT_EXIST.get(
           String.valueOf(currentDN), String.valueOf(parentDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -679,7 +679,7 @@
         matchedDN = matchedDN.getParentDNInSuffix();
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String.valueOf(baseDN));
       throw new DirectoryException(
               ResultCode.NO_SUCH_OBJECT, message, matchedDN, null);
@@ -769,7 +769,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_WRITER.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -788,7 +788,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF.get(
+      LocalizableMessage message = ERR_MEMORYBACKEND_CANNOT_WRITE_ENTRY_TO_LDIF.get(
           String.valueOf(entryDN), String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -838,7 +838,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_READER.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -862,7 +862,7 @@
         {
           if (! le.canContinueReading())
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_MEMORYBACKEND_ERROR_READING_LDIF.get(String.valueOf(e));
             throw new DirectoryException(
                            DirectoryServer.getServerErrorResultCode(),
@@ -894,7 +894,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_ERROR_DURING_IMPORT.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -939,7 +939,7 @@
   public void createBackup(BackupConfig backupConfig)
          throws DirectoryException
   {
-    Message message = ERR_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -953,7 +953,7 @@
                            String backupID)
          throws DirectoryException
   {
-    Message message = ERR_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -978,7 +978,7 @@
   public void restoreBackup(RestoreConfig restoreConfig)
          throws DirectoryException
   {
-    Message message = ERR_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_MEMORYBACKEND_BACKUP_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
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 c8e3e95..beabaa9 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
@@ -39,7 +39,7 @@
 
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.MonitorBackendCfg;
@@ -117,7 +117,7 @@
   public void addEntry(final Entry entry, final AddOperation addOperation)
       throws DirectoryException
   {
-    final Message message = ERR_MONITOR_ADD_NOT_SUPPORTED.get(String
+    final LocalizableMessage message = ERR_MONITOR_ADD_NOT_SUPPORTED.get(String
         .valueOf(entry.getName()));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -132,7 +132,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     final boolean adminActionRequired = false;
-    final ArrayList<Message> messages = new ArrayList<Message>();
+    final ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // Check to see if there is a new set of user-defined attributes.
     final ArrayList<Attribute> userAttrs = new ArrayList<Attribute>();
@@ -177,7 +177,7 @@
 
     userDefinedAttributes = userAttrs;
 
-    final Message message = INFO_MONITOR_USING_NEW_USER_ATTRS.get();
+    final LocalizableMessage message = INFO_MONITOR_USING_NEW_USER_ATTRS.get();
     messages.add(message);
 
     currentConfig = backendCfg;
@@ -203,7 +203,7 @@
     // not be able to complete initialization.
     if (configEntry == null)
     {
-      final Message message = ERR_MONITOR_CONFIG_ENTRY_NULL.get();
+      final LocalizableMessage message = ERR_MONITOR_CONFIG_ENTRY_NULL.get();
       throw new ConfigException(message);
     }
 
@@ -262,7 +262,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      final Message message = ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN
+      final LocalizableMessage message = ERR_MONITOR_CANNOT_DECODE_MONITOR_ROOT_DN
           .get(getExceptionMessage(e));
       throw new ConfigException(message, e);
     }
@@ -283,7 +283,7 @@
       throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    final Message message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    final LocalizableMessage message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -296,7 +296,7 @@
   public void deleteEntry(final DN entryDN,
       final DeleteOperation deleteOperation) throws DirectoryException
   {
-    final Message message = ERR_MONITOR_DELETE_NOT_SUPPORTED.get(String
+    final LocalizableMessage message = ERR_MONITOR_DELETE_NOT_SUPPORTED.get(String
         .valueOf(entryDN));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -336,7 +336,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      final Message message = ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER
+      final LocalizableMessage message = ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER
           .get(stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message);
@@ -366,7 +366,7 @@
         }
       }
 
-      final Message message = ERR_MONITOR_UNABLE_TO_EXPORT_BASE
+      final LocalizableMessage message = ERR_MONITOR_UNABLE_TO_EXPORT_BASE
           .get(stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message);
@@ -400,7 +400,7 @@
           }
         }
 
-        final Message message = ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY
+        final LocalizableMessage message = ERR_MONITOR_UNABLE_TO_EXPORT_PROVIDER_ENTRY
             .get(monitorProvider.getMonitorInstanceName(),
                 stackTraceToSingleLineString(e));
         throw new DirectoryException(
@@ -466,7 +466,7 @@
     // If the requested entry was null, then throw an exception.
     if (entryDN == null)
     {
-      final Message message = ERR_MONITOR_GET_ENTRY_NULL.get();
+      final LocalizableMessage message = ERR_MONITOR_GET_ENTRY_NULL.get();
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message);
     }
@@ -482,7 +482,7 @@
     final Map<DN, MonitorProvider<?>> dit = getDIT();
     if (!dit.containsKey(entryDN))
     {
-      final Message message = ERR_MONITOR_INVALID_BASE.get(
+      final LocalizableMessage message = ERR_MONITOR_INVALID_BASE.get(
           String.valueOf(entryDN), String.valueOf(baseMonitorDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -562,7 +562,7 @@
       throws DirectoryException
   {
     // This backend does not support LDIF imports.
-    final Message message = ERR_MONITOR_IMPORT_NOT_SUPPORTED.get();
+    final LocalizableMessage message = ERR_MONITOR_IMPORT_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -590,7 +590,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      final Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+      final LocalizableMessage message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
           baseMonitorDN.toString(), getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -603,7 +603,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       final MonitorBackendCfg backendCfg,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     // We'll pretty much accept anything here as long as it isn't one of our
     // private attributes.
@@ -689,7 +689,7 @@
       final String backupID) throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    final Message message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    final LocalizableMessage message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -702,7 +702,7 @@
   public void renameEntry(final DN currentDN, final Entry entry,
       final ModifyDNOperation modifyDNOperation) throws DirectoryException
   {
-    final Message message = ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED.get(String
+    final LocalizableMessage message = ERR_MONITOR_MODIFY_DN_NOT_SUPPORTED.get(String
         .valueOf(currentDN));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -716,7 +716,7 @@
   public void replaceEntry(final Entry oldEntry, final Entry newEntry,
       final ModifyOperation modifyOperation) throws DirectoryException
   {
-    final Message message = ERR_MONITOR_MODIFY_NOT_SUPPORTED.get(
+    final LocalizableMessage message = ERR_MONITOR_MODIFY_NOT_SUPPORTED.get(
         String.valueOf(newEntry.getName()), String.valueOf(configEntryDN));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -731,7 +731,7 @@
       throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    final Message message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    final LocalizableMessage message = ERR_MONITOR_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -765,7 +765,7 @@
         }
         matchedDN = matchedDN.parent();
       }
-      final Message message = ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String
+      final LocalizableMessage message = ERR_MEMORYBACKEND_ENTRY_DOESNT_EXIST.get(String
           .valueOf(baseDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
           matchedDN, null);
@@ -947,7 +947,7 @@
     upSeconds %= 3600;
     final long upMinutes = (upSeconds / 60);
     upSeconds %= 60;
-    final Message upTimeStr = INFO_MONITOR_UPTIME.get(upDays, upHours,
+    final LocalizableMessage upTimeStr = INFO_MONITOR_UPTIME.get(upDays, upHours,
         upMinutes, upSeconds);
     final Attribute upTimeAttr = createAttribute(ATTR_UP_TIME, ATTR_UP_TIME_LC,
         upTimeStr.toString());
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/NullBackend.java b/opendj3-server-dev/src/server/org/opends/server/backends/NullBackend.java
index 8a95b8b..5ea02e4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/NullBackend.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/NullBackend.java
@@ -32,9 +32,7 @@
 import java.util.HashSet;
 
 import java.util.Map;
-import org.opends.messages.Category;
-import org.opends.messages.Message;
-import org.opends.messages.Severity;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.std.server.BackendCfg;
 import org.opends.server.api.Backend;
@@ -207,7 +205,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+        LocalizableMessage message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
             dn.toString(), getExceptionMessage(e));
         throw new InitializationException(message, e);
       }
@@ -219,9 +217,7 @@
     String topOCName = "top";
     ObjectClass topOC = DirectoryServer.getObjectClass(topOCName);
     if (topOC == null) {
-      throw new InitializationException(Message.raw(
-        Category.BACKEND, Severity.FATAL_ERROR,
-        "Unable to locate " + topOCName +
+      throw new InitializationException(LocalizableMessage.raw("Unable to locate " + topOCName +
         " objectclass in the current server schema"));
     }
     objectClasses.put(topOC, topOCName);
@@ -242,9 +238,7 @@
     String extOCName = "extensibleobject";
     ObjectClass extOC = DirectoryServer.getObjectClass(extOCName);
     if (extOC == null) {
-      throw new InitializationException(Message.raw(
-        Category.BACKEND, Severity.FATAL_ERROR,
-        "Unable to locate " + extOCName +
+      throw new InitializationException(LocalizableMessage.raw("Unable to locate " + extOCName +
         " objectclass in the current server schema"));
     }
     objectClasses.put(extOC, extOCName);
@@ -453,8 +447,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = Message.raw(
-        Category.BACKEND, Severity.SEVERE_ERROR, e.getMessage());
+      LocalizableMessage message = LocalizableMessage.raw(e.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
         message);
     }
@@ -491,8 +484,7 @@
     }
     catch (Exception e)
     {
-      Message message = Message.raw(
-        Category.BACKEND, Severity.SEVERE_ERROR, e.getMessage());
+      LocalizableMessage message = LocalizableMessage.raw(e.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
@@ -514,8 +506,7 @@
         {
           if (! le.canContinueReading())
           {
-            Message message = Message.raw(
-              Category.BACKEND, Severity.SEVERE_ERROR, le.getMessage());
+            LocalizableMessage message = LocalizableMessage.raw(le.getMessage());
             throw new DirectoryException(
               DirectoryServer.getServerErrorResultCode(),message);
           }
@@ -545,8 +536,7 @@
     }
     catch (Exception e)
     {
-      Message message = Message.raw(
-        Category.BACKEND, Severity.SEVERE_ERROR, e.getMessage());
+      LocalizableMessage message = LocalizableMessage.raw(e.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
@@ -584,9 +574,7 @@
   public void createBackup(BackupConfig backupConfig)
          throws DirectoryException
   {
-    Message message = Message.raw(
-        Category.BACKEND, Severity.SEVERE_ERROR,
-        "The null backend does not support backup operation");
+    LocalizableMessage message = LocalizableMessage.raw("The null backend does not support backup operation");
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -598,9 +586,7 @@
                            String backupID)
          throws DirectoryException
   {
-    Message message = Message.raw(
-        Category.BACKEND, Severity.SEVERE_ERROR,
-        "The null backend does not support remove backup operation");
+    LocalizableMessage message = LocalizableMessage.raw("The null backend does not support remove backup operation");
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -621,9 +607,7 @@
   public void restoreBackup(RestoreConfig restoreConfig)
          throws DirectoryException
   {
-    Message message = Message.raw(
-        Category.BACKEND, Severity.SEVERE_ERROR,
-        "The null backend does not support restore operation");
+    LocalizableMessage message = LocalizableMessage.raw("The null backend does not support restore operation");
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
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 48d820e..11e3fb0 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
@@ -44,7 +44,7 @@
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLParameters;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.RootDSEBackendCfg;
@@ -180,7 +180,7 @@
     // not be able to complete initialization.
     if (configEntry == null)
     {
-      Message message = ERR_ROOTDSE_CONFIG_ENTRY_NULL.get();
+      LocalizableMessage message = ERR_ROOTDSE_CONFIG_ENTRY_NULL.get();
       throw new ConfigException(message);
     }
 
@@ -237,7 +237,7 @@
           Backend backend = DirectoryServer.getBackend(baseDN);
           if (backend == null)
           {
-            Message message = WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE.get(
+            LocalizableMessage message = WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE.get(
                 String.valueOf(baseDN));
             logError(message);
           }
@@ -255,7 +255,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION.get(
+      LocalizableMessage message = WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION.get(
           stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
     }
@@ -486,7 +486,7 @@
 
     // This method should never be used to get anything other than the root DSE.
     // If we got here, then that appears to be the case, so log a message.
-    Message message =
+    LocalizableMessage message =
         WARN_ROOTDSE_GET_ENTRY_NONROOT.get(String.valueOf(entryDN));
     logError(message);
 
@@ -1061,7 +1061,7 @@
   public void addEntry(Entry entry, AddOperation addOperation)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_ROOTDSE_ADD_NOT_SUPPORTED.get(String.valueOf(entry.getName()));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -1075,7 +1075,7 @@
   public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_ROOTDSE_DELETE_NOT_SUPPORTED.get(String.valueOf(entryDN));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -1089,7 +1089,7 @@
   public void replaceEntry(Entry oldEntry, Entry newEntry,
       ModifyOperation modifyOperation) throws DirectoryException
   {
-    Message message = ERR_ROOTDSE_MODIFY_NOT_SUPPORTED.get(
+    LocalizableMessage message = ERR_ROOTDSE_MODIFY_NOT_SUPPORTED.get(
         String.valueOf(newEntry.getName()), String.valueOf(configEntryDN));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -1104,7 +1104,7 @@
                                    ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_ROOTDSE_MODIFY_DN_NOT_SUPPORTED.get(String.valueOf(currentDN));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -1120,7 +1120,7 @@
     DN baseDN = searchOperation.getBaseDN();
     if (! baseDN.isRootDN())
     {
-      Message message = ERR_ROOTDSE_INVALID_SEARCH_BASE.
+      LocalizableMessage message = ERR_ROOTDSE_INVALID_SEARCH_BASE.
           get(searchOperation.getConnectionID(),
               searchOperation.getOperationID(), String.valueOf(baseDN));
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
@@ -1218,7 +1218,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE.
+          LocalizableMessage message = ERR_ROOTDSE_UNEXPECTED_SEARCH_FAILURE.
               get(searchOperation.getConnectionID(),
                   searchOperation.getOperationID(),
                   stackTraceToSingleLineString(e));
@@ -1233,7 +1233,7 @@
         break;
 
       default:
-        Message message = ERR_ROOTDSE_INVALID_SEARCH_SCOPE.
+        LocalizableMessage message = ERR_ROOTDSE_INVALID_SEARCH_SCOPE.
             get(searchOperation.getConnectionID(),
                 searchOperation.getOperationID(),
                 String.valueOf(searchOperation.getScope()));
@@ -1297,7 +1297,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER.get(
+      LocalizableMessage message = ERR_ROOTDSE_UNABLE_TO_CREATE_LDIF_WRITER.get(
           stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -1317,7 +1317,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_ROOTDSE_UNABLE_TO_EXPORT_DSE.get(stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -1360,7 +1360,7 @@
          throws DirectoryException
   {
     // This backend does not support LDIF imports.
-    Message message = ERR_ROOTDSE_IMPORT_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_ROOTDSE_IMPORT_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1399,7 +1399,7 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    Message message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1414,7 +1414,7 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    Message message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1440,7 +1440,7 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    Message message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_ROOTDSE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1451,7 +1451,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(Configuration configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     RootDSEBackendCfg config = (RootDSEBackendCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -1465,7 +1465,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
        RootDSEBackendCfg cfg,
-       List<Message> unacceptableReasons)
+       List<LocalizableMessage> unacceptableReasons)
   {
     boolean configIsAcceptable = true;
 
@@ -1484,7 +1484,7 @@
           Backend backend = DirectoryServer.getBackend(baseDN);
           if (backend == null)
           {
-            Message message = WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE.get(
+            LocalizableMessage message = WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE.get(
                     String.valueOf(baseDN));
             unacceptableReasons.add(message);
             configIsAcceptable = false;
@@ -1499,7 +1499,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION.get(
+      LocalizableMessage message = WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION.get(
               stackTraceToSingleLineString(e));
       unacceptableReasons.add(message);
       configIsAcceptable = false;
@@ -1519,7 +1519,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Check to see if we should apply a new set of base DNs.
@@ -1541,7 +1541,7 @@
           if (backend == null)
           {
             // This is not fine.  We can't use a suffix that doesn't exist.
-            Message message = WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE.get(
+            LocalizableMessage message = WARN_ROOTDSE_NO_BACKEND_FOR_SUBORDINATE_BASE.get(
                     String.valueOf(baseDN));
             messages.add(message);
 
@@ -1564,7 +1564,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION.get(
+      LocalizableMessage message = WARN_ROOTDSE_SUBORDINATE_BASE_EXCEPTION.get(
               stackTraceToSingleLineString(e));
       messages.add(message);
 
@@ -1629,7 +1629,7 @@
 
       if (subordinateBaseDNs == null)
       {
-        Message message = INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS.get();
+        LocalizableMessage message = INFO_ROOTDSE_USING_SUFFIXES_AS_BASE_DNS.get();
         messages.add(message);
       }
       else
@@ -1651,7 +1651,7 @@
 
         basesStr.append(" }");
 
-        Message message = INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS.get(
+        LocalizableMessage message = INFO_ROOTDSE_USING_NEW_SUBORDINATE_BASE_DNS.get(
                 basesStr.toString());
         messages.add(message);
       }
@@ -1660,7 +1660,7 @@
       if (showAllAttributes != newShowAll)
       {
         showAllAttributes = newShowAll;
-        Message message = INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS.get(
+        LocalizableMessage message = INFO_ROOTDSE_UPDATED_SHOW_ALL_ATTRS.get(
                 ATTR_ROOTDSE_SHOW_ALL_ATTRIBUTES,
                 String.valueOf(showAllAttributes));
         messages.add(message);
@@ -1668,7 +1668,7 @@
 
 
       userDefinedAttributes = userAttrs;
-      Message message = INFO_ROOTDSE_USING_NEW_USER_ATTRS.get();
+      LocalizableMessage message = INFO_ROOTDSE_USING_NEW_USER_ATTRS.get();
       messages.add(message);
     }
 
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 2c93d17..4307156 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
@@ -54,7 +54,7 @@
 import java.util.zip.ZipOutputStream;
 import javax.crypto.Mac;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.std.server.SchemaBackendCfg;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -271,7 +271,7 @@
     // not be able to complete initialization.
     if (config == null)
     {
-      Message message = ERR_SCHEMA_CONFIG_ENTRY_NULL.get();
+      LocalizableMessage message = ERR_SCHEMA_CONFIG_ENTRY_NULL.get();
       throw new ConfigException(message);
     }
 
@@ -402,7 +402,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+        LocalizableMessage message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
             baseDN.toString(), getExceptionMessage(e));
         throw new InitializationException(message, e);
       }
@@ -461,7 +461,7 @@
           }
           else
           {
-            Message message = ERR_SCHEMA_CANNOT_FIND_CONCAT_FILE.
+            LocalizableMessage message = ERR_SCHEMA_CANNOT_FIND_CONCAT_FILE.
                 get(upgradeDirectory.getAbsolutePath(), SCHEMA_CONCAT_FILE_NAME,
                     concatFile.getName());
             throw new InitializationException(message);
@@ -516,7 +516,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_SCHEMA_ERROR_DETERMINING_SCHEMA_CHANGES.get(
+      LocalizableMessage message = ERR_SCHEMA_ERROR_DETERMINING_SCHEMA_CHANGES.get(
           getExceptionMessage(e));
       ErrorLogger.logError(message);
     }
@@ -1091,7 +1091,7 @@
   public void addEntry(Entry entry, AddOperation addOperation)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_SCHEMA_ADD_NOT_SUPPORTED.get(String.valueOf(entry.getName()));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -1105,7 +1105,7 @@
   public void deleteEntry(DN entryDN, DeleteOperation deleteOperation)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_SCHEMA_DELETE_NOT_SUPPORTED.get(String.valueOf(entryDN));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -1125,7 +1125,7 @@
     if (! clientConnection.hasPrivilege(Privilege.UPDATE_SCHEMA,
                                         modifyOperation))
     {
-      Message message = ERR_SCHEMA_MODIFY_INSUFFICIENT_PRIVILEGES.get();
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_INSUFFICIENT_PRIVILEGES.get();
       throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                    message);
     }
@@ -1173,7 +1173,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE.get(
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE.get(
                     v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1199,7 +1199,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.
                     get(v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1225,7 +1225,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM.get(
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM.get(
                     v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1251,7 +1251,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DCR.get(
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DCR.get(
                     v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1277,7 +1277,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DSR.get(
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DSR.get(
                     v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1303,7 +1303,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE.get(
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE.get(
                     v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1329,7 +1329,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message =
+                LocalizableMessage message =
                     ERR_SCHEMA_MODIFY_CANNOT_DECODE_LDAP_SYNTAX.get(
                         v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
@@ -1340,7 +1340,7 @@
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE.get(a.getName());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                 message);
@@ -1352,7 +1352,7 @@
         case DELETE:
           if (a.isEmpty())
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_SCHEMA_MODIFY_DELETE_NO_VALUES.get(a.getName());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                 message);
@@ -1375,7 +1375,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE.get(
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE.get(
                     v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1402,7 +1402,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.
                     get(v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1428,7 +1428,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM.get(
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM.get(
                     v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1454,7 +1454,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DCR.get(
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DCR.get(
                     v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1481,7 +1481,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DSR.get(
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DSR.get(
                     v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1508,7 +1508,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE.get(
+                LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_MR_USE.get(
                     v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
                     ResultCode.INVALID_ATTRIBUTE_SYNTAX, message, de);
@@ -1535,7 +1535,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, de);
                 }
 
-                Message message =
+                LocalizableMessage message =
                     ERR_SCHEMA_MODIFY_CANNOT_DECODE_LDAP_SYNTAX.get(
                         v.getValue().toString(), de.getMessageObject());
                 throw new DirectoryException(
@@ -1546,7 +1546,7 @@
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_SCHEMA_MODIFY_UNSUPPORTED_ATTRIBUTE_TYPE.get(a.getName());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                 message);
@@ -1559,7 +1559,7 @@
           if ((!m.isInternal()) &&
               (!modifyOperation.isSynchronizationOperation()))
           {
-            Message message = ERR_SCHEMA_INVALID_MODIFICATION_TYPE.get(
+            LocalizableMessage message = ERR_SCHEMA_INVALID_MODIFICATION_TYPE.get(
                 String.valueOf(m.getModificationType()));
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                 message);
@@ -1570,7 +1570,7 @@
             // in the extraAttribute map. This in fact acts as a replace.
             if (SchemaConfigManager.isSchemaAttribute(a))
             {
-              Message message = ERR_SCHEMA_INVALID_REPLACE_MODIFICATION.get(
+              LocalizableMessage message = ERR_SCHEMA_INVALID_REPLACE_MODIFICATION.get(
                   a.getNameWithOptions());
               ErrorLogger.logError(message);
             }
@@ -1583,7 +1583,7 @@
           break;
 
         default:
-          Message message = ERR_SCHEMA_INVALID_MODIFICATION_TYPE.get(
+          LocalizableMessage message = ERR_SCHEMA_INVALID_MODIFICATION_TYPE.get(
               String.valueOf(m.getModificationType()));
           throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
               message);
@@ -1658,7 +1658,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_SCHEMA.get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1720,7 +1720,7 @@
         // NOTE:  We really do want to use "!=" instead of "! t.equals()"
         // because we want to check whether it's the same object instance, not
         // just a logical equivalent.
-        Message message = ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_ATTRTYPE.
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_ATTRTYPE.
             get(attributeType.getNameOrOID(), existingType.getNameOrOID(),
                 t.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
@@ -1735,13 +1735,13 @@
     {
       if (! schema.hasAttributeType(superiorType.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_ATTRIBUTE_TYPE.
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_ATTRIBUTE_TYPE.
             get(attributeType.getNameOrOID(), superiorType.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (superiorType.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_ATTRIBUTE_TYPE.
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_ATTRIBUTE_TYPE.
             get(attributeType.getNameOrOID(), superiorType.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -1752,7 +1752,7 @@
     MatchingRule mr = attributeType.getEqualityMatchingRule();
     if ((mr != null) && mr.isObsolete())
     {
-      Message message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
           attributeType.getNameOrOID(), mr.getNameOrOID());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -1760,7 +1760,7 @@
     mr = attributeType.getOrderingMatchingRule();
     if ((mr != null) && mr.isObsolete())
     {
-      Message message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
           attributeType.getNameOrOID(), mr.getNameOrOID());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -1768,7 +1768,7 @@
     mr = attributeType.getSubstringMatchingRule();
     if ((mr != null) && mr.isObsolete())
     {
-      Message message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
           attributeType.getNameOrOID(), mr.getNameOrOID());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -1776,7 +1776,7 @@
     mr = attributeType.getApproximateMatchingRule();
     if ((mr != null) && mr.isObsolete())
     {
-      Message message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_ATTRTYPE_OBSOLETE_MR.get(
           attributeType.getNameOrOID(), mr.getNameOrOID());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -1871,7 +1871,7 @@
     AttributeType removeType = schema.getAttributeType(attributeType.getOID());
     if ((removeType == null) || (! removeType.equals(attributeType)))
     {
-      Message message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_ATTRIBUTE_TYPE.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_ATTRIBUTE_TYPE.get(
           attributeType.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -1906,7 +1906,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE.get(
+          LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_ATTRTYPE.get(
               v.getValue().toString(), de.getMessageObject());
           throw new DirectoryException(
                          ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
@@ -1930,7 +1930,7 @@
       AttributeType superiorType = at.getSuperiorType();
       if ((superiorType != null) && superiorType.equals(removeType))
       {
-        Message message = ERR_SCHEMA_MODIFY_REMOVE_AT_SUPERIOR_TYPE.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_AT_SUPERIOR_TYPE.get(
             removeType.getNameOrOID(), superiorType.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -1944,7 +1944,7 @@
       if (oc.getRequiredAttributes().contains(removeType) ||
           oc.getOptionalAttributes().contains(removeType))
       {
-        Message message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_OC.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_OC.get(
             removeType.getNameOrOID(), oc.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -1961,7 +1961,7 @@
         if (nf.getRequiredAttributes().contains(removeType) ||
             nf.getOptionalAttributes().contains(removeType))
         {
-          Message message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_NF.get(
+          LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_NF.get(
               removeType.getNameOrOID(), nf.getNameOrOID());
           throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                   message);
@@ -1978,7 +1978,7 @@
           dcr.getOptionalAttributes().contains(removeType) ||
           dcr.getProhibitedAttributes().contains(removeType))
       {
-        Message message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_DCR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_DCR.get(
             removeType.getNameOrOID(), dcr.getName());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -1991,7 +1991,7 @@
     {
       if (mru.getAttributes().contains(removeType))
       {
-        Message message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_MR_USE.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_AT_IN_MR_USE.get(
             removeType.getNameOrOID(), mru.getName());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -2052,7 +2052,7 @@
         // NOTE:  We really do want to use "!=" instead of "! t.equals()"
         // because we want to check whether it's the same object instance, not
         // just a logical equivalent.
-        Message message =
+        LocalizableMessage message =
                 ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_OBJECTCLASS
                         .get(objectClass.getNameOrOID(),
                                 existingClass.getNameOrOID(),
@@ -2069,13 +2069,13 @@
     {
       if (! schema.hasObjectClass(superiorClass.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_OBJECTCLASS.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_UNDEFINED_SUPERIOR_OBJECTCLASS.get(
             objectClass.getNameOrOID(), superiorClass.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (superiorClass.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_OBJECTCLASS.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_OBSOLETE_SUPERIOR_OBJECTCLASS.get(
             objectClass.getNameOrOID(), superiorClass.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -2085,13 +2085,13 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_OC_UNDEFINED_REQUIRED_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_OC_UNDEFINED_REQUIRED_ATTR.get(
             objectClass.getNameOrOID(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (at.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_OC_OBSOLETE_REQUIRED_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_OC_OBSOLETE_REQUIRED_ATTR.get(
             objectClass.getNameOrOID(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -2101,13 +2101,13 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_OC_UNDEFINED_OPTIONAL_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_OC_UNDEFINED_OPTIONAL_ATTR.get(
             objectClass.getNameOrOID(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (at.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_OC_OBSOLETE_OPTIONAL_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_OC_OBSOLETE_OPTIONAL_ATTR.get(
             objectClass.getNameOrOID(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -2202,7 +2202,7 @@
     ObjectClass removeClass = schema.getObjectClass(objectClass.getOID());
     if ((removeClass == null) || (! removeClass.equals(objectClass)))
     {
-      Message message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_OBJECTCLASS.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_OBJECTCLASS.get(
           objectClass.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -2236,7 +2236,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.get(
+          LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_OBJECTCLASS.get(
               v.getValue().toString(), de.getMessageObject());
           throw new DirectoryException(
                          ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
@@ -2261,7 +2261,7 @@
       {
         if (superiorClass.equals(removeClass))
         {
-          Message message = ERR_SCHEMA_MODIFY_REMOVE_OC_SUPERIOR_CLASS.get(
+          LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_OC_SUPERIOR_CLASS.get(
               removeClass.getNameOrOID(), superiorClass.getNameOrOID());
           throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                   message);
@@ -2281,7 +2281,7 @@
         buffer.append(nf.getNameOrOID());
         buffer.append("\t");
       }
-      Message message = ERR_SCHEMA_MODIFY_REMOVE_OC_IN_NF.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_OC_IN_NF.get(
           removeClass.getNameOrOID(), buffer.toString());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -2294,7 +2294,7 @@
       if (dcr.getStructuralClass().equals(removeClass) ||
           dcr.getAuxiliaryClasses().contains(removeClass))
       {
-        Message message = ERR_SCHEMA_MODIFY_REMOVE_OC_IN_DCR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_OC_IN_DCR.get(
             removeClass.getNameOrOID(), dcr.getName());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -2355,7 +2355,7 @@
         // NOTE:  We really do want to use "!=" instead of "! t.equals()"
         // because we want to check whether it's the same object instance, not
         // just a logical equivalent.
-        Message message =
+        LocalizableMessage message =
                 ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_NAME_FORM
                         .get(nameForm.getNameOrOID(), existingNF.getNameOrOID(),
                   nf.getNameOrOID());
@@ -2370,19 +2370,19 @@
     ObjectClass structuralClass = nameForm.getStructuralClass();
     if (! schema.hasObjectClass(structuralClass.getOID()))
     {
-      Message message = ERR_SCHEMA_MODIFY_NF_UNDEFINED_STRUCTURAL_OC.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_NF_UNDEFINED_STRUCTURAL_OC.get(
           nameForm.getNameOrOID(), structuralClass.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
     if (structuralClass.getObjectClassType() != ObjectClassType.STRUCTURAL)
     {
-      Message message = ERR_SCHEMA_MODIFY_NF_OC_NOT_STRUCTURAL.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_NF_OC_NOT_STRUCTURAL.get(
           nameForm.getNameOrOID(), structuralClass.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
     if (structuralClass.isObsolete())
     {
-      Message message = ERR_SCHEMA_MODIFY_NF_OC_OBSOLETE.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_NF_OC_OBSOLETE.get(
           nameForm.getNameOrOID(), structuralClass.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -2391,13 +2391,13 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_NF_UNDEFINED_REQUIRED_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_NF_UNDEFINED_REQUIRED_ATTR.get(
             nameForm.getNameOrOID(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (at.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_NF_OBSOLETE_REQUIRED_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_NF_OBSOLETE_REQUIRED_ATTR.get(
             nameForm.getNameOrOID(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -2407,13 +2407,13 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_NF_UNDEFINED_OPTIONAL_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_NF_UNDEFINED_OPTIONAL_ATTR.get(
             nameForm.getNameOrOID(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (at.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_NF_OBSOLETE_OPTIONAL_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_NF_OBSOLETE_OPTIONAL_ATTR.get(
             nameForm.getNameOrOID(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -2507,7 +2507,7 @@
     NameForm removeNF = schema.getNameForm(nameForm.getOID());
     if ((removeNF == null) || (! removeNF.equals(nameForm)))
     {
-      Message message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_NAME_FORM.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_NAME_FORM.get(
           nameForm.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -2541,7 +2541,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM.get(
+          LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_NAME_FORM.get(
               v.getValue().toString(), de.getMessageObject());
           throw new DirectoryException(
                          ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
@@ -2563,7 +2563,7 @@
     DITStructureRule dsr = schema.getDITStructureRule(removeNF);
     if (dsr != null)
     {
-      Message message = ERR_SCHEMA_MODIFY_REMOVE_NF_IN_DSR.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NF_IN_DSR.get(
           removeNF.getNameOrOID(), dsr.getNameOrRuleID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -2619,7 +2619,7 @@
           }
           else
           {
-            Message message = ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DCR.
+            LocalizableMessage message = ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DCR.
                 get(ditContentRule.getName(), existingDCR.getName(),
                     dcr.getName());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -2639,7 +2639,7 @@
          schema.getDITContentRule(structuralClass);
     if ((existingRuleForClass != null) && (existingRuleForClass != existingDCR))
     {
-      Message message = ERR_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_DCR.
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_STRUCTURAL_OC_CONFLICT_FOR_ADD_DCR.
           get(ditContentRule.getName(), structuralClass.getNameOrOID(),
               existingRuleForClass.getName());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
@@ -2651,21 +2651,21 @@
     // prohibited attribute type.
     if (! schema.hasObjectClass(structuralClass.getOID()))
     {
-      Message message = ERR_SCHEMA_MODIFY_DCR_UNDEFINED_STRUCTURAL_OC.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_UNDEFINED_STRUCTURAL_OC.get(
           ditContentRule.getName(), structuralClass.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
     if (structuralClass.getObjectClassType() != ObjectClassType.STRUCTURAL)
     {
-      Message message = ERR_SCHEMA_MODIFY_DCR_OC_NOT_STRUCTURAL.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_OC_NOT_STRUCTURAL.get(
           ditContentRule.getName(), structuralClass.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
     if (structuralClass.isObsolete())
     {
-      Message message = ERR_SCHEMA_MODIFY_DCR_STRUCTURAL_OC_OBSOLETE.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_STRUCTURAL_OC_OBSOLETE.get(
           ditContentRule.getName(), structuralClass.getNameOrOID());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -2674,19 +2674,19 @@
     {
       if (! schema.hasObjectClass(oc.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_DCR_UNDEFINED_AUXILIARY_OC.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_UNDEFINED_AUXILIARY_OC.get(
             ditContentRule.getName(), oc.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       if (oc.getObjectClassType() != ObjectClassType.AUXILIARY)
       {
-        Message message = ERR_SCHEMA_MODIFY_DCR_OC_NOT_AUXILIARY.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_OC_NOT_AUXILIARY.get(
             ditContentRule.getName(), oc.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       if (oc.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_AUXILIARY_OC.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_AUXILIARY_OC.get(
             ditContentRule.getName(), oc.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -2696,13 +2696,13 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_DCR_UNDEFINED_REQUIRED_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_UNDEFINED_REQUIRED_ATTR.get(
             ditContentRule.getName(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (at.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_REQUIRED_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_REQUIRED_ATTR.get(
             ditContentRule.getName(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -2712,13 +2712,13 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_DCR_UNDEFINED_OPTIONAL_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_UNDEFINED_OPTIONAL_ATTR.get(
             ditContentRule.getName(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (at.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_OPTIONAL_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_OPTIONAL_ATTR.get(
             ditContentRule.getName(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -2728,13 +2728,13 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_DCR_UNDEFINED_PROHIBITED_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_UNDEFINED_PROHIBITED_ATTR.get(
             ditContentRule.getName(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (at.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_PROHIBITED_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_DCR_OBSOLETE_PROHIBITED_ATTR.get(
             ditContentRule.getName(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -2831,7 +2831,7 @@
          schema.getDITContentRule(ditContentRule.getStructuralClass());
     if ((removeDCR == null) || (! removeDCR.equals(ditContentRule)))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_DCR.get(ditContentRule.getName());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -2891,7 +2891,7 @@
           // acceptable if we find match for the same object instance.
           if ((existingDSR != null) && (existingDSR != dsr))
           {
-            Message message = ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DSR.
+            LocalizableMessage message = ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_DSR.
                 get(ditStructureRule.getNameOrRuleID(),
                     existingDSR.getNameOrRuleID(), dsr.getNameOrRuleID());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -2908,7 +2908,7 @@
       //any existing rules sharing this name. It means that it is a
       //new rule with a conflicting rule id.Raise an Exception as the
       //rule id should be unique.
-      Message message = ERR_SCHEMA_MODIFY_RULEID_CONFLICTS_FOR_ADD_DSR.
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_RULEID_CONFLICTS_FOR_ADD_DSR.
                 get(ditStructureRule.getNameOrRuleID(),
                     existingDSR.getNameOrRuleID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -2926,7 +2926,7 @@
     if ((existingRuleForNameForm != null) &&
         (existingRuleForNameForm != existingDSR))
     {
-      Message message = ERR_SCHEMA_MODIFY_NAME_FORM_CONFLICT_FOR_ADD_DSR.
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_NAME_FORM_CONFLICT_FOR_ADD_DSR.
           get(ditStructureRule.getNameOrRuleID(), nameForm.getNameOrOID(),
               existingRuleForNameForm.getNameOrRuleID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
@@ -2937,13 +2937,13 @@
     // name form or superior DIT structure rule.
     if (! schema.hasNameForm(nameForm.getOID()))
     {
-      Message message = ERR_SCHEMA_MODIFY_DSR_UNDEFINED_NAME_FORM.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_DSR_UNDEFINED_NAME_FORM.get(
           ditStructureRule.getNameOrRuleID(), nameForm.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
     if (nameForm.isObsolete())
     {
-      Message message = ERR_SCHEMA_MODIFY_DSR_OBSOLETE_NAME_FORM.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_DSR_OBSOLETE_NAME_FORM.get(
           ditStructureRule.getNameOrRuleID(), nameForm.getNameOrOID());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -2955,7 +2955,7 @@
     {
       if (dsr.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_DSR_OBSOLETE_SUPERIOR_RULE.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_DSR_OBSOLETE_SUPERIOR_RULE.get(
             ditStructureRule.getNameOrRuleID(), dsr.getNameOrRuleID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -3052,7 +3052,7 @@
          schema.getDITStructureRule(ditStructureRule.getRuleID());
     if ((removeDSR == null) || (! removeDSR.equals(ditStructureRule)))
     {
-      Message message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_DSR.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_DSR.get(
           ditStructureRule.getNameOrRuleID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -3087,7 +3087,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, de);
           }
 
-          Message message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DSR.get(
+          LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_DECODE_DSR.get(
               v.getValue().toString(), de.getMessageObject());
           throw new DirectoryException(
                          ResultCode.INVALID_ATTRIBUTE_SYNTAX, message,
@@ -3110,7 +3110,7 @@
     {
       if (dsr.getSuperiorRules().contains(removeDSR))
       {
-        Message message = ERR_SCHEMA_MODIFY_REMOVE_DSR_SUPERIOR_RULE.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_DSR_SUPERIOR_RULE.get(
             removeDSR.getNameOrRuleID(), dsr.getNameOrRuleID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -3169,7 +3169,7 @@
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
                     ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_MR_USE.get(
                             matchingRuleUse.getName(),
                             existingMRU.getName(),
@@ -3192,7 +3192,7 @@
          schema.getMatchingRuleUse(matchingRule);
     if ((existingMRUForRule != null) && (existingMRUForRule != existingMRU))
     {
-      Message message = ERR_SCHEMA_MODIFY_MR_CONFLICT_FOR_ADD_MR_USE.
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_MR_CONFLICT_FOR_ADD_MR_USE.
           get(matchingRuleUse.getName(), matchingRule.getNameOrOID(),
               existingMRUForRule.getName());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
@@ -3200,7 +3200,7 @@
 
     if (matchingRule.isObsolete())
     {
-      Message message = ERR_SCHEMA_MODIFY_MRU_OBSOLETE_MR.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_MRU_OBSOLETE_MR.get(
           matchingRuleUse.getName(), matchingRule.getNameOrOID());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -3212,13 +3212,13 @@
     {
       if (! schema.hasAttributeType(at.getOID()))
       {
-        Message message = ERR_SCHEMA_MODIFY_MRU_UNDEFINED_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_MRU_UNDEFINED_ATTR.get(
             matchingRuleUse.getName(), at.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (at.isObsolete())
       {
-        Message message = ERR_SCHEMA_MODIFY_MRU_OBSOLETE_ATTR.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_MRU_OBSOLETE_ATTR.get(
             matchingRuleUse.getName(), matchingRule.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -3316,7 +3316,7 @@
          schema.getMatchingRuleUse(matchingRuleUse.getMatchingRule());
     if ((removeMRU == null) || (! removeMRU.equals(matchingRuleUse)))
     {
-      Message message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_MR_USE.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_MR_USE.get(
           matchingRuleUse.getName());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -3365,7 +3365,7 @@
     // We allow only unimplemented syntaxes to be substituted.
     if(schema.getSyntax(oid) !=null)
     {
-      Message message = ERR_ATTR_SYNTAX_INVALID_LDAP_SYNTAX.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_INVALID_LDAP_SYNTAX.get(
               ldapSyntaxDesc.getDefinition(),oid);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                      message);
@@ -3440,7 +3440,7 @@
 
     if ((removeLSD == null) || (! removeLSD.equals(ldapSyntaxDesc)))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SCHEMA_MODIFY_REMOVE_NO_SUCH_LSD.get(oid);
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -3741,7 +3741,7 @@
   {
     if (depth > 20)
     {
-      Message message = ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_AT.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_AT.get(
           attributeType.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -3792,7 +3792,7 @@
   {
     if (depth > 20)
     {
-      Message message = ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_OC.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_OC.get(
           objectClass.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -3843,7 +3843,7 @@
   {
     if (depth > 20)
     {
-      Message message = ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_DSR.get(
+      LocalizableMessage message = ERR_SCHEMA_MODIFY_CIRCULAR_REFERENCE_DSR.get(
           ditStructureRule.getNameOrRuleID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -3959,7 +3959,7 @@
 
       if (allCleaned)
       {
-        Message message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_CLEANED.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_CLEANED.get(
             getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -3967,7 +3967,7 @@
       else
       {
 
-        Message message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_NOT_CLEANED
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_ORIG_FILES_NOT_CLEANED
                 .get(getExceptionMessage(e));
 
         DirectoryServer.sendAlertNotification(this,
@@ -4045,14 +4045,14 @@
 
       if (allRestored)
       {
-        Message message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_RESTORED.get(
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_RESTORED.get(
             getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
       }
       else
       {
-        Message message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_NOT_RESTORED
+        LocalizableMessage message = ERR_SCHEMA_MODIFY_CANNOT_WRITE_NEW_FILES_NOT_RESTORED
                 .get(getExceptionMessage(e));
 
         DirectoryServer.sendAlertNotification(this,
@@ -4202,7 +4202,7 @@
                                    ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_SCHEMA_MODIFY_DN_NOT_SUPPORTED.get(String.valueOf(currentDN));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -4237,7 +4237,7 @@
 
     if (! found)
     {
-      Message message = ERR_SCHEMA_INVALID_BASE.get(String.valueOf(baseDN));
+      LocalizableMessage message = ERR_SCHEMA_INVALID_BASE.get(String.valueOf(baseDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
               matchedDN, null);
     }
@@ -4319,7 +4319,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER.get(
+      LocalizableMessage message = ERR_SCHEMA_UNABLE_TO_CREATE_LDIF_WRITER.get(
           stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -4339,7 +4339,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_SCHEMA_UNABLE_TO_EXPORT_BASE.get(stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -4387,7 +4387,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_CANNOT_CREATE_LDIF_READER.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -4411,7 +4411,7 @@
         {
           if (! le.canContinueReading())
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_MEMORYBACKEND_ERROR_READING_LDIF.get(String.valueOf(e));
             throw new DirectoryException(
                            DirectoryServer.getServerErrorResultCode(),
@@ -4436,7 +4436,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MEMORYBACKEND_ERROR_DURING_IMPORT.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -4543,14 +4543,14 @@
           }
           catch (DirectoryException de)
           {
-            Message message =
+            LocalizableMessage message =
               NOTE_SCHEMA_IMPORT_FAILED.get(
                   attrType.toString(), de.getMessage());
             logError(message);
           }
           catch (Exception e)
           {
-            Message message =
+            LocalizableMessage message =
               NOTE_SCHEMA_IMPORT_FAILED.get(
                   attrType.toString(), e.getMessage());
             logError(message);
@@ -4665,14 +4665,14 @@
           }
           catch (DirectoryException de)
           {
-            Message message =
+            LocalizableMessage message =
               NOTE_SCHEMA_IMPORT_FAILED.get(
                   newObjectClass.toString(), de.getMessage());
             logError(message);
           }
           catch (Exception e)
           {
-            Message message =
+            LocalizableMessage message =
               NOTE_SCHEMA_IMPORT_FAILED.get(
                   newObjectClass.toString(), e.getMessage());
             logError(message);
@@ -4794,7 +4794,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_SCHEMA_BACKUP_CANNOT_GET_MAC.get(
+          LocalizableMessage message = ERR_SCHEMA_BACKUP_CANNOT_GET_MAC.get(
               macKeyID, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
@@ -4818,7 +4818,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_SCHEMA_BACKUP_CANNOT_GET_DIGEST.get(
+          LocalizableMessage message = ERR_SCHEMA_BACKUP_CANNOT_GET_DIGEST.get(
               digestAlgorithm, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
@@ -4870,7 +4870,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_SCHEMA_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
+      LocalizableMessage message = ERR_SCHEMA_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
           get(String.valueOf(filename), backupDirectory.getPath(),
               getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
@@ -4894,7 +4894,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_SCHEMA_BACKUP_CANNOT_GET_CIPHER.get(
+        LocalizableMessage message = ERR_SCHEMA_BACKUP_CANNOT_GET_CIPHER.get(
                 stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -4905,7 +4905,7 @@
     // Wrap the file output stream in a zip output stream.
     ZipOutputStream zipStream = new ZipOutputStream(outputStream);
 
-    Message message = ERR_SCHEMA_BACKUP_ZIP_COMMENT.get(
+    LocalizableMessage message = ERR_SCHEMA_BACKUP_ZIP_COMMENT.get(
             DynamicConstants.PRODUCT_NAME,
             backupID);
     zipStream.setComment(String.valueOf(message));
@@ -5159,7 +5159,7 @@
     BackupInfo backupInfo = backupDirectory.getBackupInfo(backupID);
     if (backupInfo == null)
     {
-      Message message = ERR_BACKUP_MISSING_BACKUPID.get(
+      LocalizableMessage message = ERR_BACKUP_MISSING_BACKUPID.get(
         backupDirectory.getPath(), backupID);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -5196,7 +5196,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get(
+      LocalizableMessage message = ERR_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get(
         backupDirectory.getDescriptorPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -5234,7 +5234,7 @@
     BackupInfo      backupInfo      = backupDirectory.getBackupInfo(backupID);
     if (backupInfo == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SCHEMA_RESTORE_NO_SUCH_BACKUP.get(backupID, backupPath);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -5247,7 +5247,7 @@
          backupInfo.getBackupProperty(BACKUP_PROPERTY_ARCHIVE_FILENAME);
     if (backupFilename == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SCHEMA_RESTORE_NO_BACKUP_FILE.get(backupID, backupPath);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -5258,7 +5258,7 @@
     {
       if (! backupFile.exists())
       {
-        Message message =
+        LocalizableMessage message =
             ERR_SCHEMA_RESTORE_NO_SUCH_FILE.get(backupID, backupFile.getPath());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
@@ -5270,7 +5270,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_SCHEMA_RESTORE_CANNOT_CHECK_FOR_ARCHIVE.get(
+      LocalizableMessage message = ERR_SCHEMA_RESTORE_CANNOT_CHECK_FOR_ARCHIVE.get(
           backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -5287,7 +5287,7 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_DIGEST_ALGORITHM);
       if (digestAlgorithm == null)
       {
-        Message message = ERR_SCHEMA_RESTORE_UNKNOWN_DIGEST.get(backupID);
+        LocalizableMessage message = ERR_SCHEMA_RESTORE_UNKNOWN_DIGEST.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
       }
@@ -5299,7 +5299,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_SCHEMA_RESTORE_CANNOT_GET_DIGEST.get(backupID, digestAlgorithm);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -5316,7 +5316,7 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_MAC_KEY_ID);
       if (macKeyID == null)
       {
-        Message message = ERR_SCHEMA_RESTORE_UNKNOWN_MAC.get(backupID);
+        LocalizableMessage message = ERR_SCHEMA_RESTORE_UNKNOWN_MAC.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
       }
@@ -5327,7 +5327,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_SCHEMA_RESTORE_CANNOT_GET_MAC.get(
+        LocalizableMessage message = ERR_SCHEMA_RESTORE_CANNOT_GET_MAC.get(
             backupID, macKeyID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -5344,7 +5344,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_SCHEMA_RESTORE_CANNOT_OPEN_BACKUP_FILE.get(
+      LocalizableMessage message = ERR_SCHEMA_RESTORE_CANNOT_OPEN_BACKUP_FILE.get(
           backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -5361,7 +5361,7 @@
       }
       catch (CryptoManagerException e)
       {
-        Message message = ERR_SCHEMA_RESTORE_CANNOT_GET_CIPHER.get(
+        LocalizableMessage message = ERR_SCHEMA_RESTORE_CANNOT_GET_CIPHER.get(
                 backupFile.getPath(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -5419,7 +5419,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY.
+        LocalizableMessage message = ERR_SCHEMA_RESTORE_CANNOT_RENAME_CURRENT_DIRECTORY.
             get(backupID, schemaInstanceDirPath,
                 String.valueOf(backupInstanceDirPath),
                 stackTraceToSingleLineString(e));
@@ -5442,20 +5442,20 @@
           try
           {
             schemaBackupInstanceDir.renameTo(schemaInstanceDir);
-            Message message =
+            LocalizableMessage message =
                 NOTE_SCHEMA_RESTORE_RESTORED_OLD_SCHEMA.get(
                     schemaInstanceDirPath);
             logError(message);
           }
           catch (Exception e2)
           {
-            Message message = ERR_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA.get(
+            LocalizableMessage message = ERR_SCHEMA_RESTORE_CANNOT_RESTORE_OLD_SCHEMA.get(
                 schemaBackupInstanceDir.getPath());
             logError(message);
           }
         }
 
-        Message message = ERR_SCHEMA_RESTORE_CANNOT_CREATE_SCHEMA_DIRECTORY.get(
+        LocalizableMessage message = ERR_SCHEMA_RESTORE_CANNOT_CREATE_SCHEMA_DIRECTORY.get(
             backupID, schemaInstanceDirPath, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -5479,12 +5479,12 @@
         // Tell the user where the previous schema was archived.
         if (schemaBackupInstanceDir != null)
         {
-          Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+          LocalizableMessage message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
               schemaBackupInstanceDir.getPath());
           logError(message);
         }
 
-        Message message = ERR_SCHEMA_RESTORE_CANNOT_GET_ZIP_ENTRY.get(
+        LocalizableMessage message = ERR_SCHEMA_RESTORE_CANNOT_GET_ZIP_ENTRY.get(
             backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -5536,12 +5536,12 @@
           // Tell the user where the previous schema was archived.
           if (schemaBackupInstanceDir != null)
           {
-            Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+            LocalizableMessage message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
                 schemaBackupInstanceDir.getPath());
             logError(message);
           }
 
-          Message message = ERR_SCHEMA_RESTORE_CANNOT_CREATE_FILE.get(
+          LocalizableMessage message = ERR_SCHEMA_RESTORE_CANNOT_CREATE_FILE.get(
               backupID, filePath, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
@@ -5597,12 +5597,12 @@
         // Tell the user where the previous schema was archived.
         if (schemaBackupInstanceDir != null)
         {
-          Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+          LocalizableMessage message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
               schemaBackupInstanceDir.getPath());
           logError(message);
         }
 
-        Message message = ERR_SCHEMA_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE.get(
+        LocalizableMessage message = ERR_SCHEMA_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE.get(
             backupID, fileName, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -5617,7 +5617,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_SCHEMA_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE.get(
+      LocalizableMessage message = ERR_SCHEMA_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE.get(
           backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -5632,7 +5632,7 @@
       byte[] calculatedHash = digest.digest();
       if (Arrays.equals(calculatedHash, unsignedHash))
       {
-        Message message = NOTE_SCHEMA_RESTORE_UNSIGNED_HASH_VALID.get();
+        LocalizableMessage message = NOTE_SCHEMA_RESTORE_UNSIGNED_HASH_VALID.get();
         logError(message);
       }
       else
@@ -5640,12 +5640,12 @@
         // Tell the user where the previous schema was archived.
         if (schemaBackupInstanceDir != null)
         {
-          Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+          LocalizableMessage message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
               schemaBackupInstanceDir.getPath());
           logError(message);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_SCHEMA_RESTORE_UNSIGNED_HASH_INVALID.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
@@ -5657,7 +5657,7 @@
       byte[] calculatedSignature = mac.doFinal();
       if (Arrays.equals(calculatedSignature, signedHash))
       {
-        Message message = NOTE_SCHEMA_RESTORE_SIGNED_HASH_VALID.get();
+        LocalizableMessage message = NOTE_SCHEMA_RESTORE_SIGNED_HASH_VALID.get();
         logError(message);
       }
       else
@@ -5665,12 +5665,12 @@
         // Tell the user where the previous schema was archived.
         if (schemaBackupInstanceDir != null)
         {
-          Message message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
+          LocalizableMessage message = ERR_SCHEMA_RESTORE_OLD_SCHEMA_SAVED.get(
               schemaBackupInstanceDir.getPath());
           logError(message);
         }
 
-        Message message = ERR_SCHEMA_RESTORE_SIGNED_HASH_INVALID.get(backupID);
+        LocalizableMessage message = ERR_SCHEMA_RESTORE_SIGNED_HASH_INVALID.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
       }
@@ -5680,7 +5680,7 @@
     // If we are just verifying the archive, then we're done.
     if (verifyOnly)
     {
-      Message message =
+      LocalizableMessage message =
           NOTE_SCHEMA_RESTORE_VERIFY_SUCCESSFUL.get(backupID, backupPath);
       logError(message);
       return;
@@ -5695,7 +5695,7 @@
       recursiveDelete(schemaBackupInstanceDir);
     }
 
-    Message message = NOTE_SCHEMA_RESTORE_SUCCESSFUL.get(backupID, backupPath);
+    LocalizableMessage message = NOTE_SCHEMA_RESTORE_SUCCESSFUL.get(backupID, backupPath);
     logError(message);
   }
 
@@ -5707,7 +5707,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
        SchemaBackendCfg configEntry,
-       List<Message> unacceptableReasons)
+       List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -5723,7 +5723,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Check to see if we should apply a new set of base DNs.
@@ -5868,7 +5868,7 @@
 
 
       userDefinedAttributes = newUserAttrs;
-      Message message = INFO_SCHEMA_USING_NEW_USER_ATTRS.get();
+      LocalizableMessage message = INFO_SCHEMA_USING_NEW_USER_ATTRS.get();
       messages.add(message);
     }
 
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 489018f..ae5c276 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
@@ -61,7 +61,7 @@
 import javax.net.ssl.TrustManager;
 import javax.net.ssl.TrustManagerFactory;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.TrustStoreBackendCfg;
@@ -172,7 +172,7 @@
     SortedSet<DN> baseDNSet = configuration.getBaseDN();
     if (baseDNSet.size() != 1)
     {
-      Message message = ERR_TRUSTSTORE_REQUIRES_ONE_BASE_DN.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_REQUIRES_ONE_BASE_DN.get(
            String.valueOf(configEntryDN));
       throw new InitializationException(message);
     }
@@ -202,7 +202,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, kse);
       }
 
-      Message message = ERR_TRUSTSTORE_INVALID_TYPE.
+      LocalizableMessage message = ERR_TRUSTSTORE_INVALID_TYPE.
           get(String.valueOf(trustStoreType), String.valueOf(configEntryDN),
               getExceptionMessage(kse));
       throw new InitializationException(message);
@@ -255,7 +255,7 @@
             }
             catch (Exception e)
             {
-              Message message = ERR_TRUSTSTORE_PIN_FILE_CANNOT_CREATE.get(
+              LocalizableMessage message = ERR_TRUSTSTORE_PIN_FILE_CANNOT_CREATE.get(
                    String.valueOf(pinFilePath), String.valueOf(configEntryDN));
               throw new InitializationException(message);
             }
@@ -272,7 +272,7 @@
             }
             catch (IOException ioe)
             {
-              Message message = ERR_TRUSTSTORE_PIN_FILE_CANNOT_READ.
+              LocalizableMessage message = ERR_TRUSTSTORE_PIN_FILE_CANNOT_READ.
                   get(String.valueOf(pinFilePath),
                       String.valueOf(configEntryDN), getExceptionMessage(ioe));
               throw new InitializationException(message, ioe);
@@ -289,7 +289,7 @@
 
             if (pinStr == null)
             {
-              Message message = ERR_TRUSTSTORE_PIN_FILE_EMPTY.get(
+              LocalizableMessage message = ERR_TRUSTSTORE_PIN_FILE_EMPTY.get(
                   String.valueOf(pinFilePath), String.valueOf(configEntryDN));
               throw new InitializationException(message);
             }
@@ -305,7 +305,7 @@
         String pinStr = System.getenv(pinEnVar);
         if (pinStr == null)
         {
-          Message message = ERR_TRUSTSTORE_PIN_ENVAR_NOT_SET.get(
+          LocalizableMessage message = ERR_TRUSTSTORE_PIN_ENVAR_NOT_SET.get(
               String.valueOf(pinProperty), String.valueOf(configEntryDN));
           throw new InitializationException(message);
         }
@@ -320,7 +320,7 @@
       String pinStr = System.getProperty(pinProperty);
       if (pinStr == null)
       {
-        Message message = ERR_TRUSTSTORE_PIN_PROPERTY_NOT_SET.get(
+        LocalizableMessage message = ERR_TRUSTSTORE_PIN_PROPERTY_NOT_SET.get(
             String.valueOf(pinProperty), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -388,7 +388,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+      LocalizableMessage message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
           String.valueOf(baseDN), String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -493,7 +493,7 @@
     // If the requested entry was null, then throw an exception.
     if (entryDN == null)
     {
-      Message message = ERR_TRUSTSTORE_GET_ENTRY_NULL.get();
+      LocalizableMessage message = ERR_TRUSTSTORE_GET_ENTRY_NULL.get();
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
@@ -553,7 +553,7 @@
     AttributeValue v = entryDN.rdn().getAttributeValue(t);
     if (v == null)
     {
-      Message message = ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE.
+      LocalizableMessage message = ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE.
            get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
                                    baseDN, null);
@@ -566,7 +566,7 @@
       Certificate cert = certificateManager.getCertificate(certAlias);
       if (cert == null)
       {
-        Message message = ERR_TRUSTSTORE_CERTIFICATE_NOT_FOUND.get(
+        LocalizableMessage message = ERR_TRUSTSTORE_CERTIFICATE_NOT_FOUND.get(
             String.valueOf(entryDN), certAlias);
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
@@ -579,7 +579,7 @@
         TRACER.debugCaught(DebugLogLevel.VERBOSE, e);
       }
 
-      Message message = ERR_TRUSTSTORE_CANNOT_RETRIEVE_CERT.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_RETRIEVE_CERT.get(
           certAlias, trustStoreFile, e.getMessage());
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -632,7 +632,7 @@
 
     if (entryDN.equals(baseDN))
     {
-      Message message = ERR_TRUSTSTORE_INVALID_BASE.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_INVALID_BASE.get(
            String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message);
     }
@@ -640,7 +640,7 @@
     DN parentDN = entryDN.getParentDNInSuffix();
     if (parentDN == null)
     {
-      Message message = ERR_TRUSTSTORE_INVALID_BASE.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_INVALID_BASE.get(
            String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -651,7 +651,7 @@
     }
     else
     {
-      Message message = ERR_TRUSTSTORE_INVALID_BASE.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_INVALID_BASE.get(
            String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -669,7 +669,7 @@
   {
     if (entryDN.equals(baseDN))
     {
-      Message message = ERR_TRUSTSTORE_INVALID_BASE.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_INVALID_BASE.get(
            String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -677,7 +677,7 @@
     DN parentDN = entryDN.getParentDNInSuffix();
     if (parentDN == null || !parentDN.equals(baseDN))
     {
-      Message message = ERR_TRUSTSTORE_INVALID_BASE.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_INVALID_BASE.get(
            String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -694,7 +694,7 @@
   public void replaceEntry(Entry oldEntry, Entry newEntry,
       ModifyOperation modifyOperation) throws DirectoryException
   {
-    Message message = ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_TRUSTSTORE_MODIFY_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -708,7 +708,7 @@
                           ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    Message message = ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_TRUSTSTORE_MODIFY_DN_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -807,7 +807,7 @@
     }
     else
     {
-      Message message = ERR_TRUSTSTORE_INVALID_BASE.get(String.valueOf(baseDN));
+      LocalizableMessage message = ERR_TRUSTSTORE_INVALID_BASE.get(String.valueOf(baseDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
   }
@@ -855,7 +855,7 @@
   public void exportLDIF(LDIFExportConfig exportConfig)
          throws DirectoryException
   {
-    Message message = ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -881,7 +881,7 @@
          throws DirectoryException
   {
     // This backend does not support LDIF imports.
-    Message message = ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_TRUSTSTORE_IMPORT_AND_EXPORT_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -920,7 +920,7 @@
        throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    Message message = ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -935,7 +935,7 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    Message message = ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -961,7 +961,7 @@
          throws DirectoryException
   {
     // This backend does not provide a backup/restore mechanism.
-    Message message = ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_TRUSTSTORE_BACKUP_AND_RESTORE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -997,7 +997,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-       TrustStoreBackendCfg configuration, List<Message> unacceptableReasons)
+       TrustStoreBackendCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -1045,7 +1045,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, kse);
         }
 
-        Message message = ERR_TRUSTSTORE_INVALID_TYPE.get(
+        LocalizableMessage message = ERR_TRUSTSTORE_INVALID_TYPE.get(
                 String.valueOf(storeType),
                 String.valueOf(cfgEntryDN),
                 getExceptionMessage(kse));
@@ -1062,7 +1062,7 @@
     {
       if (System.getProperty(pinProp) == null)
       {
-        Message message = ERR_TRUSTSTORE_PIN_PROPERTY_NOT_SET.get(
+        LocalizableMessage message = ERR_TRUSTSTORE_PIN_PROPERTY_NOT_SET.get(
                 String.valueOf(pinProp),
                 String.valueOf(cfgEntryDN));
         unacceptableReasons.add(message);
@@ -1078,7 +1078,7 @@
     {
       if (System.getenv(pinEnVar) == null)
       {
-        Message message = ERR_TRUSTSTORE_PIN_ENVAR_NOT_SET.get(
+        LocalizableMessage message = ERR_TRUSTSTORE_PIN_ENVAR_NOT_SET.get(
                 String.valueOf(pinEnVar),
                 String.valueOf(cfgEntryDN));
         unacceptableReasons.add(message);
@@ -1104,7 +1104,7 @@
         }
         catch (IOException ioe)
         {
-          Message message = ERR_TRUSTSTORE_PIN_FILE_CANNOT_READ.get(
+          LocalizableMessage message = ERR_TRUSTSTORE_PIN_FILE_CANNOT_READ.get(
                   String.valueOf(pinFile),
                   String.valueOf(cfgEntryDN),
                   getExceptionMessage(ioe));
@@ -1123,7 +1123,7 @@
 
         if (pinStr == null)
         {
-          Message message =  ERR_TRUSTSTORE_PIN_FILE_EMPTY.get(
+          LocalizableMessage message =  ERR_TRUSTSTORE_PIN_FILE_EMPTY.get(
                   String.valueOf(pinFile),
                   String.valueOf(cfgEntryDN));
           unacceptableReasons.add(message);
@@ -1145,7 +1145,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
     DN configEntryDN = cfg.dn();
 
     // Get the path to the trust store file.
@@ -1383,7 +1383,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TRUSTSTORE_CANNOT_LOAD.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_LOAD.get(
           trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1416,7 +1416,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TRUSTSTORE_CANNOT_CREATE_FACTORY.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_CREATE_FACTORY.get(
           trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1454,7 +1454,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TRUSTSTORE_CANNOT_LOAD.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_LOAD.get(
           trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1494,7 +1494,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TRUSTSTORE_CANNOT_CREATE_FACTORY.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_CREATE_FACTORY.get(
           trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1533,7 +1533,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TRUSTSTORE_CANNOT_LOAD.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_LOAD.get(
           trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1561,7 +1561,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TRUSTSTORE_ERROR_READING_KEY.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_ERROR_READING_KEY.get(
            alias, trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1580,7 +1580,7 @@
     AttributeValue v = entryDN.rdn().getAttributeValue(t);
     if (v == null)
     {
-      Message message = ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE.get(
            String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
                                    baseDN, null);
@@ -1591,7 +1591,7 @@
     {
       if (certificateManager.aliasInUse(certAlias))
       {
-        Message message = ERR_TRUSTSTORE_ALIAS_IN_USE.get(
+        LocalizableMessage message = ERR_TRUSTSTORE_ALIAS_IN_USE.get(
              String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
                                      message);
@@ -1610,7 +1610,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_TRUSTSTORE_CANNOT_GENERATE_CERT.get(
+          LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_GENERATE_CERT.get(
               certAlias, trustStoreFile, getExceptionMessage(e));
           throw new DirectoryException(
                DirectoryServer.getServerErrorResultCode(), message, e);
@@ -1622,7 +1622,7 @@
              ATTR_CRYPTO_PUBLIC_KEY_CERTIFICATE);
         if (certAttrs == null)
         {
-          Message message =
+          LocalizableMessage message =
                ERR_TRUSTSTORE_ENTRY_MISSING_CERT_ATTR.get(
                     String.valueOf(entryDN),
                     ATTR_CRYPTO_PUBLIC_KEY_CERTIFICATE);
@@ -1631,7 +1631,7 @@
         }
         if (certAttrs.size() != 1)
         {
-          Message message =
+          LocalizableMessage message =
                ERR_TRUSTSTORE_ENTRY_HAS_MULTIPLE_CERT_ATTRS.get(
                     String.valueOf(entryDN),
                     ATTR_CRYPTO_PUBLIC_KEY_CERTIFICATE);
@@ -1644,7 +1644,7 @@
 
         if (!i.hasNext())
         {
-          Message message =
+          LocalizableMessage message =
                ERR_TRUSTSTORE_ENTRY_MISSING_CERT_VALUE.get(
                     String.valueOf(entryDN),
                     ATTR_CRYPTO_PUBLIC_KEY_CERTIFICATE);
@@ -1656,7 +1656,7 @@
 
         if (i.hasNext())
         {
-          Message message =
+          LocalizableMessage message =
                ERR_TRUSTSTORE_ENTRY_HAS_MULTIPLE_CERT_VALUES.get(
                     String.valueOf(entryDN),
                     ATTR_CRYPTO_PUBLIC_KEY_CERTIFICATE);
@@ -1691,7 +1691,7 @@
         }
         catch (IOException e)
         {
-          Message message = ERR_TRUSTSTORE_CANNOT_WRITE_CERT.get(
+          LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_WRITE_CERT.get(
               certAlias, getExceptionMessage(e));
           throw new DirectoryException(
                DirectoryServer.getServerErrorResultCode(), message, e);
@@ -1700,7 +1700,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_TRUSTSTORE_CANNOT_ADD_CERT.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_ADD_CERT.get(
            certAlias, trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(
            DirectoryServer.getServerErrorResultCode(), message, e);
@@ -1718,7 +1718,7 @@
     AttributeValue v = entryDN.rdn().getAttributeValue(t);
     if (v == null)
     {
-      Message message = ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_DN_DOES_NOT_SPECIFY_CERTIFICATE.get(
            String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
                                    baseDN, null);
@@ -1729,7 +1729,7 @@
     {
       if (!certificateManager.aliasInUse(certAlias))
       {
-        Message message = ERR_TRUSTSTORE_INVALID_BASE.get(
+        LocalizableMessage message = ERR_TRUSTSTORE_INVALID_BASE.get(
              String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
                                      message);
@@ -1739,7 +1739,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_TRUSTSTORE_CANNOT_DELETE_CERT.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_DELETE_CERT.get(
            certAlias, trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(
            DirectoryServer.getServerErrorResultCode(), message, e);
@@ -1854,12 +1854,12 @@
                                            new FilePermission(0600)))
         {
           // Log a warning that the permissions were not set.
-          Message message = WARN_TRUSTSTORE_SET_PERMISSIONS_FAILED.get(path);
+          LocalizableMessage message = WARN_TRUSTSTORE_SET_PERMISSIONS_FAILED.get(path);
           ErrorLogger.logError(message);
         }
       } catch(DirectoryException e) {
         // Log a warning that the permissions were not set.
-        Message message = WARN_TRUSTSTORE_SET_PERMISSIONS_FAILED.get(path);
+        LocalizableMessage message = WARN_TRUSTSTORE_SET_PERMISSIONS_FAILED.get(path);
         ErrorLogger.logError(message);
       }
     }
@@ -1884,7 +1884,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_TRUSTSTORE_CANNOT_ADD_CERT.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_ADD_CERT.get(
            certAlias, trustStoreFile, getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -1898,7 +1898,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_TRUSTSTORE_CANNOT_GENERATE_CERT.get(
+      LocalizableMessage message = ERR_TRUSTSTORE_CANNOT_GENERATE_CERT.get(
            certAlias, trustStoreFile, getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java
index 6bc582e..affebc6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/AttributeIndex.java
@@ -26,7 +26,7 @@
  *      Portions Copyright 2014 Manuel Gaupp
  */
 package org.opends.server.backends.jeb;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.*;
 
@@ -162,7 +162,7 @@
     {
       if (attrType.getEqualityMatchingRule() == null)
       {
-        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+        LocalizableMessage message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
             String.valueOf(attrType), "equality");
         throw new ConfigException(message);
       }
@@ -197,7 +197,7 @@
     {
       if (attrType.getSubstringMatchingRule() == null)
       {
-        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+        LocalizableMessage message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
             String.valueOf(attrType), "substring");
         throw new ConfigException(message);
       }
@@ -219,7 +219,7 @@
     {
       if (attrType.getOrderingMatchingRule() == null)
       {
-        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+        LocalizableMessage message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
             String.valueOf(attrType), "ordering");
         throw new ConfigException(message);
       }
@@ -239,7 +239,7 @@
     {
       if (attrType.getApproximateMatchingRule() == null)
       {
-        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+        LocalizableMessage message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
             String.valueOf(attrType), "approximate");
         throw new ConfigException(message);
       }
@@ -261,7 +261,7 @@
               indexConfig.getIndexExtensibleMatchingRule();
       if(extensibleRules == null || extensibleRules.isEmpty())
       {
-        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+        LocalizableMessage message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
             String.valueOf(attrType), "extensible");
         throw new ConfigException(message);
       }
@@ -278,7 +278,7 @@
                                                     toLowerCase(ruleName));
         if(rule == null)
         {
-          Message message =
+          LocalizableMessage message =
                   ERR_CONFIG_INDEX_TYPE_NEEDS_VALID_MATCHING_RULE.get(
                   String.valueOf(attrType),ruleName);
           logError(message);
@@ -1769,7 +1769,7 @@
    */
   public synchronized boolean isConfigurationChangeAcceptable(
       LocalDBIndexCfg cfg,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     AttributeType attrType = cfg.getAttribute();
 
@@ -1777,7 +1777,7 @@
     {
       if (equalityIndex == null && attrType.getEqualityMatchingRule() == null)
       {
-        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+        LocalizableMessage message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
                 String.valueOf(String.valueOf(attrType)), "equality");
         unacceptableReasons.add(message);
         return false;
@@ -1788,7 +1788,7 @@
     {
       if (substringIndex == null && attrType.getSubstringMatchingRule() == null)
       {
-        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+        LocalizableMessage message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
                 String.valueOf(attrType), "substring");
         unacceptableReasons.add(message);
         return false;
@@ -1800,7 +1800,7 @@
     {
       if (orderingIndex == null && attrType.getOrderingMatchingRule() == null)
       {
-        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+        LocalizableMessage message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
                 String.valueOf(attrType), "ordering");
         unacceptableReasons.add(message);
         return false;
@@ -1811,7 +1811,7 @@
       if (approximateIndex == null &&
           attrType.getApproximateMatchingRule() == null)
       {
-        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+        LocalizableMessage message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
                 String.valueOf(attrType), "approximate");
         unacceptableReasons.add(message);
         return false;
@@ -1823,7 +1823,7 @@
               cfg.getIndexExtensibleMatchingRule();
       if (newRules == null || newRules.isEmpty())
       {
-        Message message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
+        LocalizableMessage message = ERR_CONFIG_INDEX_TYPE_NEEDS_MATCHING_RULE.get(
                 String.valueOf(attrType), "extensible");
         unacceptableReasons.add(message);
         return false;
@@ -1841,7 +1841,7 @@
   {
     ConfigChangeResult ccr;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     try
     {
       AttributeType attrType = cfg.getAttribute();
@@ -1880,7 +1880,7 @@
           {
 
             adminActionRequired = true;
-            Message message =
+            LocalizableMessage message =
                     NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
                             equalityIndex.getName());
             messages.add(message);
@@ -1900,7 +1900,7 @@
           }
           catch(DatabaseException de)
           {
-            messages.add(Message.raw(
+            messages.add(LocalizableMessage.raw(
                     StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
                 DirectoryServer.getServerErrorResultCode(), false, messages);
@@ -1942,7 +1942,7 @@
           {
             adminActionRequired = true;
 
-            Message message =
+            LocalizableMessage message =
                     NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
                             presenceIndex.getName());
             messages.add(message);
@@ -1961,7 +1961,7 @@
           }
           catch(DatabaseException de)
           {
-            messages.add(Message.raw(
+            messages.add(LocalizableMessage.raw(
                     StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
                 DirectoryServer.getServerErrorResultCode(), false, messages);
@@ -2003,7 +2003,7 @@
           if(this.substringIndex.setIndexEntryLimit(indexEntryLimit))
           {
             adminActionRequired = true;
-            Message message =
+            LocalizableMessage message =
                     NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
                             substringIndex.getName());
             messages.add(message);
@@ -2030,7 +2030,7 @@
           }
           catch(DatabaseException de)
           {
-            messages.add(Message.raw(
+            messages.add(LocalizableMessage.raw(
                     StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
                 DirectoryServer.getServerErrorResultCode(), false, messages);
@@ -2072,7 +2072,7 @@
           {
             adminActionRequired = true;
 
-            Message message =
+            LocalizableMessage message =
                     NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
                             orderingIndex.getName());
             messages.add(message);
@@ -2091,7 +2091,7 @@
           }
           catch(DatabaseException de)
           {
-            messages.add(Message.raw(
+            messages.add(LocalizableMessage.raw(
                     StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
                 DirectoryServer.getServerErrorResultCode(), false, messages);
@@ -2134,7 +2134,7 @@
           {
             adminActionRequired = true;
 
-            Message message =
+            LocalizableMessage message =
                     NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
                             approximateIndex.getName());
             messages.add(message);
@@ -2154,7 +2154,7 @@
           catch(DatabaseException de)
           {
             messages.add(
-                    Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
+                    LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
                 DirectoryServer.getServerErrorResultCode(), false, messages);
             return ccr;
@@ -2185,7 +2185,7 @@
                                             toLowerCase(ruleName));
            if(rule == null)
           {
-            Message message =
+            LocalizableMessage message =
                     ERR_CONFIG_INDEX_TYPE_NEEDS_VALID_MATCHING_RULE.get(
                     String.valueOf(attrType),ruleName);
             logError(message);
@@ -2232,7 +2232,7 @@
               if(extensibleIndex.setIndexEntryLimit(indexEntryLimit))
               {
                 adminActionRequired = true;
-                Message message =
+                LocalizableMessage message =
                       NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD.get(
                               extensibleIndex.getName());
                 messages.add(message);
@@ -2313,7 +2313,7 @@
           catch(DatabaseException de)
           {
             messages.add(
-                  Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
+                  LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
               DirectoryServer.getServerErrorResultCode(), false, messages);
             return ccr;
@@ -2341,7 +2341,7 @@
           catch(DatabaseException de)
           {
             messages.add(
-                  Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
+                  LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(de)));
             ccr = new ConfigChangeResult(
               DirectoryServer.getServerErrorResultCode(), false, messages);
             return ccr;
@@ -2360,7 +2360,7 @@
     }
     catch(Exception e)
     {
-      messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(e)));
+      messages.add(LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(e)));
       ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                    adminActionRequired,
                                    messages);
@@ -2751,8 +2751,8 @@
       ByteString assertionValue =
               extensibleFilter.getAssertionValue().getValue();
       IndexQuery expression = rule.createIndexQuery(assertionValue, factory);
-      List<Message> debugMessages =
-          monitor.isFilterUseEnabled() ? new ArrayList<Message>() : null;
+      List<LocalizableMessage> debugMessages =
+          monitor.isFilterUseEnabled() ? new ArrayList<LocalizableMessage>() : null;
       EntryIDSet idSet = expression.evaluate(debugMessages);
       if(monitor.isFilterUseEnabled())
       {
@@ -2768,7 +2768,7 @@
           }
           else
           {
-            monitor.updateStats(extensibleFilter, Message.EMPTY);
+            monitor.updateStats(extensibleFilter, LocalizableMessage.EMPTY);
           }
         }
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/BackendImpl.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/BackendImpl.java
index 3f12406..591ac9e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/BackendImpl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/BackendImpl.java
@@ -38,7 +38,7 @@
 import java.util.zip.Adler32;
 import java.util.zip.CheckedInputStream;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn;
@@ -300,7 +300,7 @@
     try
     {
       // Log an informational message about the number of entries.
-      Message message = NOTE_JEB_BACKEND_STARTED.get(
+      LocalizableMessage message = NOTE_JEB_BACKEND_STARTED.get(
           cfg.getBackendId(), rootContainer.getEntryCount());
       logError(message);
     }
@@ -310,7 +310,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, databaseException);
       }
-      Message message =
+      LocalizableMessage message =
           WARN_JEB_GET_ENTRY_COUNT_FAILED.get(databaseException.getMessage());
       throw new InitializationException(
                                         message, databaseException);
@@ -329,7 +329,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+        LocalizableMessage message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
             String.valueOf(dn), String.valueOf(e));
         throw new InitializationException(message, e);
       }
@@ -398,7 +398,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = ERR_JEB_DATABASE_EXCEPTION.get(e.getMessage());
+      LocalizableMessage message = ERR_JEB_DATABASE_EXCEPTION.get(e.getMessage());
       logError(message);
     }
 
@@ -414,7 +414,7 @@
     threadWriteCount.set(0);
 
     // Log an informational message.
-    Message message = NOTE_BACKEND_OFFLINE.get(cfg.getBackendId());
+    LocalizableMessage message = NOTE_BACKEND_OFFLINE.get(cfg.getBackendId());
     logError(message);
   }
 
@@ -593,7 +593,7 @@
     }
     else
     {
-      Message message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
+      LocalizableMessage message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -645,7 +645,7 @@
     }
     else
     {
-      Message message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
+      LocalizableMessage message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -691,7 +691,7 @@
     }
     else
     {
-      Message message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
+      LocalizableMessage message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -733,7 +733,7 @@
     }
     else
     {
-      Message message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
+      LocalizableMessage message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -777,7 +777,7 @@
     }
     else
     {
-      Message message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
+      LocalizableMessage message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -821,7 +821,7 @@
     }
     else
     {
-      Message message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
+      LocalizableMessage message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -832,7 +832,7 @@
     {
       // FIXME: No reason why we cannot implement a move between containers
       // since the containers share the same database environment.
-      Message msg = WARN_JEB_FUNCTION_NOT_SUPPORTED.get();
+      LocalizableMessage msg = WARN_JEB_FUNCTION_NOT_SUPPORTED.get();
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, msg);
     }
 
@@ -872,7 +872,7 @@
     }
     else
     {
-      Message message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
+      LocalizableMessage message = ERR_ROOT_CONTAINER_NOT_INITIALIZED.get(getBackendID());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -923,7 +923,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
       }
-      Message message = ERR_JEB_EXPORT_IO_ERROR.get(ioe.getMessage());
+      LocalizableMessage message = ERR_JEB_EXPORT_IO_ERROR.get(ioe.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
@@ -972,7 +972,7 @@
     // We can't do import while the backend is online.
     if(!openRootContainer)
     {
-      Message message = ERR_JEB_IMPORT_BACKEND_ONLINE.get();
+      LocalizableMessage message = ERR_JEB_IMPORT_BACKEND_ONLINE.get();
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
@@ -1013,7 +1013,7 @@
       }
       else
       {
-        Message message = ERR_EXECUTION_ERROR.get(execEx.getMessage());
+        LocalizableMessage message = ERR_EXECUTION_ERROR.get(execEx.getMessage());
         throw new DirectoryException(
             DirectoryServer.getServerErrorResultCode(), message);
       }
@@ -1024,7 +1024,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, intEx);
       }
-      Message message = ERR_INTERRUPTED_ERROR.get(intEx.getMessage());
+      LocalizableMessage message = ERR_INTERRUPTED_ERROR.get(intEx.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -1066,7 +1066,7 @@
           rootContainer.close();
           long finishTime = System.currentTimeMillis();
           long closeTime = (finishTime - startTime) / 1000;
-          Message msg =
+          LocalizableMessage msg =
                        NOTE_JEB_IMPORT_LDIF_ROOTCONTAINER_CLOSE.get(closeTime);
           logError(msg);
           rootContainer = null;
@@ -1075,7 +1075,7 @@
         // Sync the environment to disk.
         if (debugEnabled())
         {
-          Message message = NOTE_JEB_IMPORT_CLOSING_DATABASE.get();
+          LocalizableMessage message = NOTE_JEB_IMPORT_CLOSING_DATABASE.get();
           TRACER.debugInfo(message.toString());
         }
       }
@@ -1184,7 +1184,7 @@
      */
     if(!openRootContainer && rebuildConfig.includesSystemIndex())
     {
-      Message message = ERR_JEB_REBUILD_BACKEND_ONLINE.get();
+      LocalizableMessage message = ERR_JEB_REBUILD_BACKEND_ONLINE.get();
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -1214,7 +1214,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, execEx);
       }
-      Message message = ERR_EXECUTION_ERROR.get(execEx.getMessage());
+      LocalizableMessage message = ERR_EXECUTION_ERROR.get(execEx.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -1224,7 +1224,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, intEx);
       }
-      Message message = ERR_INTERRUPTED_ERROR.get(intEx.getMessage());
+      LocalizableMessage message = ERR_INTERRUPTED_ERROR.get(intEx.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
               message);
     }
@@ -1327,7 +1327,7 @@
   /** {@inheritDoc} */
   @Override()
   public boolean isConfigurationAcceptable(Configuration configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     LocalDBBackendCfg config = (LocalDBBackendCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -1339,13 +1339,13 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       LocalDBBackendCfg cfg,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // Make sure that the logging level value is acceptable.
     try {
       Level.parse(cfg.getDBLoggingLevel());
     } catch (Exception e) {
-      Message message = ERR_JEB_INVALID_LOGGING_LEVEL.get(
+      LocalizableMessage message = ERR_JEB_INVALID_LOGGING_LEVEL.get(
               String.valueOf(cfg.getDBLoggingLevel()),
               String.valueOf(cfg.dn()));
       unacceptableReasons.add(message);
@@ -1362,7 +1362,7 @@
   public ConfigChangeResult applyConfigurationChange(LocalDBBackendCfg newCfg)
   {
     ResultCode resultCode = ResultCode.SUCCESS;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
 
     try
@@ -1439,7 +1439,7 @@
     }
     catch (Exception e)
     {
-      messages.add(Message.raw(stackTraceToSingleLineString(e)));
+      messages.add(LocalizableMessage.raw(stackTraceToSingleLineString(e)));
       return new ConfigChangeResult(
           DirectoryServer.getServerErrorResultCode(), false, messages);
     }
@@ -1512,7 +1512,7 @@
    */
   DirectoryException createDirectoryException(DatabaseException e) {
     if (e instanceof EnvironmentFailureException && !rootContainer.isValid()) {
-      Message message = NOTE_BACKEND_ENVIRONMENT_UNUSABLE.get(getBackendID());
+      LocalizableMessage message = NOTE_BACKEND_ENVIRONMENT_UNUSABLE.get(getBackendID());
       logError(message);
       DirectoryServer.sendAlertNotification(DirectoryServer.getInstance(),
               ALERT_TYPE_BACKEND_ENVIRONMENT_UNUSABLE, message);
@@ -1522,7 +1522,7 @@
     if (jeMessage == null) {
       jeMessage = stackTraceToSingleLineString(e);
     }
-    Message message = ERR_JEB_DATABASE_EXCEPTION.get(jeMessage);
+    LocalizableMessage message = ERR_JEB_DATABASE_EXCEPTION.get(jeMessage);
     return new DirectoryException(
         DirectoryServer.getServerErrorResultCode(), message, e);
   }
@@ -1566,7 +1566,7 @@
       if (debugEnabled()) {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = ERR_JEB_OPEN_ENV_FAIL.get(e.getMessage());
+      LocalizableMessage message = ERR_JEB_OPEN_ENV_FAIL.get(e.getMessage());
       throw new InitializationException(message, e);
     }
   }
@@ -1583,7 +1583,7 @@
   /** {@inheritDoc} */
   @Override
   public void diskLowThresholdReached(DiskSpaceMonitor monitor) {
-    Message msg = ERR_JEB_DISK_LOW_THRESHOLD_REACHED.get(
+    LocalizableMessage msg = ERR_JEB_DISK_LOW_THRESHOLD_REACHED.get(
         monitor.getDirectory().getPath(), cfg.getBackendId(),
         monitor.getFreeSpace(), Math.max(monitor.getLowThreshold(),
             monitor.getFullThreshold()));
@@ -1594,7 +1594,7 @@
   /** {@inheritDoc} */
   @Override
   public void diskFullThresholdReached(DiskSpaceMonitor monitor) {
-    Message msg = ERR_JEB_DISK_FULL_THRESHOLD_REACHED.get(
+    LocalizableMessage msg = ERR_JEB_DISK_FULL_THRESHOLD_REACHED.get(
         monitor.getDirectory().getPath(), cfg.getBackendId(),
         monitor.getFreeSpace(), Math.max(monitor.getLowThreshold(),
             monitor.getFullThreshold()));
@@ -1605,7 +1605,7 @@
   /** {@inheritDoc} */
   @Override
   public void diskSpaceRestored(DiskSpaceMonitor monitor) {
-    Message msg = NOTE_JEB_DISK_SPACE_RESTORED.get(monitor.getFreeSpace(),
+    LocalizableMessage msg = NOTE_JEB_DISK_SPACE_RESTORED.get(monitor.getFreeSpace(),
         monitor.getDirectory().getPath(), cfg.getBackendId(),
         Math.max(monitor.getLowThreshold(), monitor.getFullThreshold()));
     logError(msg);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/BackupManager.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/BackupManager.java
index 8595120..34be477 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/BackupManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/BackupManager.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.backends.jeb;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
@@ -173,7 +173,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_JEB_BACKUP_CANNOT_GET_MAC.get(
+          LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_GET_MAC.get(
               macKeyID, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                DirectoryServer.getServerErrorResultCode(), message, e);
@@ -196,7 +196,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_JEB_BACKUP_CANNOT_GET_DIGEST.get(
+          LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_GET_DIGEST.get(
               digestAlgorithm, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                DirectoryServer.getServerErrorResultCode(), message, e);
@@ -228,7 +228,7 @@
         // No incremental backup ID: log a message informing that a backup
         // could not be found and that a normal backup will be done.
         incremental = false;
-        Message message = WARN_BACKUPDB_INCREMENTAL_NOT_FOUND_DOING_NORMAL.get(
+        LocalizableMessage message = WARN_BACKUPDB_INCREMENTAL_NOT_FOUND_DOING_NORMAL.get(
             backupDir.getPath());
         logError(message);
       }
@@ -293,7 +293,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_JEB_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
+      LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
           get(String.valueOf(archiveFilename), backupDir.getPath(),
               stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
@@ -316,7 +316,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
+        LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
                 stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -327,7 +327,7 @@
     // Wrap the file output stream in a zip output stream.
     ZipOutputStream zipStream = new ZipOutputStream(outputStream);
 
-    Message message = ERR_JEB_BACKUP_ZIP_COMMENT.get(
+    LocalizableMessage message = ERR_JEB_BACKUP_ZIP_COMMENT.get(
             DynamicConstants.PRODUCT_NAME,
             backupID, backendID);
     zipStream.setComment(message.toString());
@@ -669,7 +669,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = ERR_JEB_BACKUP_CANNOT_RESTORE.get(
+      LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_RESTORE.get(
           backupInfo.getBackupID(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -689,7 +689,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        Message message = ERR_JEB_BACKUP_CANNOT_RESTORE.get(
+        LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_RESTORE.get(
             dependent.getBackupID(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -707,7 +707,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = ERR_JEB_BACKUP_CANNOT_RESTORE.get(
+      LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_RESTORE.get(
           backupInfo.getBackupID(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -720,7 +720,7 @@
       backendDir.delete();
       if (!restoreDir.renameTo(backendDir))
       {
-        Message msg = ERR_JEB_CANNOT_RENAME_RESTORE_DIRECTORY.get(
+        LocalizableMessage msg = ERR_JEB_CANNOT_RENAME_RESTORE_DIRECTORY.get(
             restoreDir.getPath(), backendDir.getPath());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      msg);
@@ -780,7 +780,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get(
+      LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get(
           backupDir.getDescriptorPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -861,7 +861,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_JEB_BACKUP_CANNOT_GET_MAC.get(
+        LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_GET_MAC.get(
             macKeyID, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -884,7 +884,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_JEB_BACKUP_CANNOT_GET_DIGEST.get(
+        LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_GET_DIGEST.get(
             digestAlgorithm, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -907,7 +907,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
+        LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
             stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -988,7 +988,7 @@
       {
         if (verifyOnly)
         {
-          Message message = NOTE_JEB_BACKUP_VERIFY_FILE.get(zipEntry.getName());
+          LocalizableMessage message = NOTE_JEB_BACKUP_VERIFY_FILE.get(zipEntry.getName());
           logError(message);
         }
 
@@ -1033,7 +1033,7 @@
         {
           outputStream.close();
 
-          Message message = NOTE_JEB_BACKUP_RESTORED_FILE.get(
+          LocalizableMessage message = NOTE_JEB_BACKUP_RESTORED_FILE.get(
               zipEntry.getName(), totalBytesRead);
           logError(message);
         }
@@ -1049,7 +1049,7 @@
     {
       if (!Arrays.equals(digest.digest(), hash))
       {
-        Message message = ERR_JEB_BACKUP_UNSIGNED_HASH_ERROR.get(backupID);
+        LocalizableMessage message = ERR_JEB_BACKUP_UNSIGNED_HASH_ERROR.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
       }
@@ -1061,7 +1061,7 @@
 
       if (!Arrays.equals(computedSignHash, signHash))
       {
-        Message message = ERR_JEB_BACKUP_SIGNED_HASH_ERROR.get(backupID);
+        LocalizableMessage message = ERR_JEB_BACKUP_SIGNED_HASH_ERROR.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
       }
@@ -1130,7 +1130,7 @@
     // Finish the zip entry.
     zipStream.closeEntry();
 
-    Message message = NOTE_JEB_BACKUP_ARCHIVED_FILE.get(zipEntry.getName());
+    LocalizableMessage message = NOTE_JEB_BACKUP_ARCHIVED_FILE.get(zipEntry.getName());
     logError(message);
 
     return totalBytesRead;
@@ -1233,7 +1233,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
+        LocalizableMessage message = ERR_JEB_BACKUP_CANNOT_GET_CIPHER.get(
                 stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -1308,7 +1308,7 @@
     BackupInfo backupInfo = backupDir.getBackupInfo(backupID);
     if (backupInfo == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_JEB_BACKUP_MISSING_BACKUPID.get(backupDir.getPath(), backupID);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
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 74a991e..4e76a9e 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
@@ -33,7 +33,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.BooleanPropertyDefinition;
 import org.opends.server.admin.DurationPropertyDefinition;
 import org.opends.server.admin.PropertyDefinition;
@@ -344,7 +344,7 @@
           int cpus = Runtime.getRuntime().availableProcessors();
           value = Integer.valueOf(Math.max(24, cpus * 2));
 
-          Message message =
+          LocalizableMessage message =
               INFO_ERGONOMIC_SIZING_OF_JE_CLEANER_THREADS.get(String
                   .valueOf(cfg.dn().rdn().getAttributeValue(0)),
                   (Number) value);
@@ -362,7 +362,7 @@
           BigInteger tmp = BigInteger.valueOf((cleaners + workers) * 2);
           value = tmp.nextProbablePrime();
 
-          Message message =
+          LocalizableMessage message =
               INFO_ERGONOMIC_SIZING_OF_JE_LOCK_TABLES.get(String
                   .valueOf(cfg.dn().rdn().getAttributeValue(0)),
                   (Number) value);
@@ -580,7 +580,7 @@
         String jePropertyValue = st.nextToken();
         // Check if it is a duplicate.
         if (uniqueJEProperties.contains(jePropertyName)) {
-          Message message = ERR_CONFIG_JE_DUPLICATE_PROPERTY.get(
+          LocalizableMessage message = ERR_CONFIG_JE_DUPLICATE_PROPERTY.get(
               jePropertyName);
             throw new ConfigException(message);
         }
@@ -589,7 +589,7 @@
           envConfig.setConfigParam(jePropertyName, jePropertyValue);
           // If this property shadows an existing config attribute.
           if (configAttrMap.containsKey(jePropertyName)) {
-            Message message = ERR_CONFIG_JE_PROPERTY_SHADOWS_CONFIG.get(
+            LocalizableMessage message = ERR_CONFIG_JE_PROPERTY_SHADOWS_CONFIG.get(
               jePropertyName, attrMap.get(jePropertyName));
             throw new ConfigException(message);
           }
@@ -599,13 +599,13 @@
           if (debugEnabled()) {
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
-          Message message =
+          LocalizableMessage message =
             ERR_CONFIG_JE_PROPERTY_INVALID.get(
             jeEntry, e.getMessage());
           throw new ConfigException(message, e.getCause());
         }
       } else {
-        Message message =
+        LocalizableMessage message =
           ERR_CONFIG_JE_PROPERTY_INVALID_FORM.get(jeEntry);
         throw new ConfigException(message);
       }
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 60cfc0f..7a38f62 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
@@ -29,7 +29,7 @@
 
 import com.sleepycat.je.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.SearchOperation;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -507,7 +507,7 @@
     }
 
     // Throw a directory referral exception containing the URIs.
-    Message msg =
+    LocalizableMessage msg =
         NOTE_JEB_REFERRAL_RESULT_MESSAGE.get(String.valueOf(referralDN));
     throw new DirectoryException(
             ResultCode.REFERRAL, msg, referralDN, URIList, null);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryCachePreloader.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryCachePreloader.java
index 1bc5cdc..76d48f2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryCachePreloader.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryCachePreloader.java
@@ -33,7 +33,7 @@
 import com.sleepycat.je.LockMode;
 import com.sleepycat.je.OperationStatus;
 import java.util.Collection;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.Collections;
 import java.util.Iterator;
@@ -189,7 +189,7 @@
         if (processedEntries.get() > 0) {
           long freeMemory =
             Runtime.getRuntime().freeMemory() / bytesPerMegabyte;
-          Message message = NOTE_CACHE_PRELOAD_PROGRESS_REPORT.get(
+          LocalizableMessage message = NOTE_CACHE_PRELOAD_PROGRESS_REPORT.get(
             jeb.getBackendID(), processedEntries.get(), freeMemory);
           logError(message);
         }
@@ -243,7 +243,7 @@
       }
       // Cancel progress report task and report done.
       timer.cancel();
-      Message message = NOTE_CACHE_PRELOAD_PROGRESS_DONE.get(
+      LocalizableMessage message = NOTE_CACHE_PRELOAD_PROGRESS_DONE.get(
         jeb.getBackendID(), processedEntries.get());
       logError(message);
     } catch (InterruptedException ex) {
@@ -303,7 +303,7 @@
             if (debugEnabled()) {
               TRACER.debugCaught(DebugLogLevel.ERROR, ex);
             }
-            Message message = ERR_CACHE_PRELOAD_ENTRY_FAILED.get(
+            LocalizableMessage message = ERR_CACHE_PRELOAD_ENTRY_FAILED.get(
               entry.getName().toNormalizedString(),
               (ex.getCause() != null ? ex.getCause().getMessage() :
                 stackTraceToSingleLineString(ex)));
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 a257c1d..78ebe2c 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
@@ -38,8 +38,8 @@
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
@@ -199,7 +199,7 @@
     @Override
     public boolean isConfigurationAddAcceptable(
         LocalDBIndexCfg cfg,
-        List<Message> unacceptableReasons)
+        List<LocalizableMessage> unacceptableReasons)
     {
       boolean isValid = true;
       try
@@ -209,7 +209,7 @@
       }
       catch(Exception e)
       {
-        unacceptableReasons.add(Message.raw(e.getLocalizedMessage()));
+        unacceptableReasons.add(LocalizableMessage.raw(e.getLocalizedMessage()));
         isValid = false ;
       }
       return isValid;
@@ -223,7 +223,7 @@
     {
       ConfigChangeResult ccr;
       boolean adminActionRequired = false;
-      List<Message> messages = new ArrayList<Message>();
+      List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
       try
       {
@@ -240,7 +240,7 @@
       }
       catch(Exception e)
       {
-        messages.add(Message.raw(e.getLocalizedMessage()));
+        messages.add(LocalizableMessage.raw(e.getLocalizedMessage()));
         ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
             adminActionRequired,
             messages);
@@ -256,7 +256,7 @@
      */
     @Override
     public boolean isConfigurationDeleteAcceptable(
-        LocalDBIndexCfg cfg, List<Message> unacceptableReasons)
+        LocalDBIndexCfg cfg, List<LocalizableMessage> unacceptableReasons)
     {
       // TODO: validate more before returning true?
       return true;
@@ -270,7 +270,7 @@
     {
       ConfigChangeResult ccr;
       boolean adminActionRequired = false;
-      ArrayList<Message> messages = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
       exclusiveLock.lock();
       try
@@ -281,7 +281,7 @@
       }
       catch(DatabaseException de)
       {
-        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
+        messages.add(LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(de)));
         ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
             adminActionRequired,
             messages);
@@ -310,7 +310,7 @@
      */
     @Override
     public boolean isConfigurationAddAcceptable(
-        LocalDBVLVIndexCfg cfg, List<Message> unacceptableReasons)
+        LocalDBVLVIndexCfg cfg, List<LocalizableMessage> unacceptableReasons)
     {
       try
       {
@@ -318,7 +318,7 @@
       }
       catch(Exception e)
       {
-        Message msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
+        LocalizableMessage msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
             cfg.getFilter(), cfg.getName(),
             e.getLocalizedMessage());
         unacceptableReasons.add(msg);
@@ -348,7 +348,7 @@
         }
         catch(Exception e)
         {
-          Message msg =
+          LocalizableMessage msg =
             ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
                 String.valueOf(sortKeys[i]), cfg.getName());
           unacceptableReasons.add(msg);
@@ -359,7 +359,7 @@
           DirectoryServer.getAttributeType(sortAttrs[i].toLowerCase());
         if(attrType == null)
         {
-          Message msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
+          LocalizableMessage msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
               sortAttrs[i], cfg.getName());
           unacceptableReasons.add(msg);
           return false;
@@ -378,7 +378,7 @@
     {
       ConfigChangeResult ccr;
       boolean adminActionRequired = false;
-      ArrayList<Message> messages = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
       try
       {
@@ -394,7 +394,7 @@
       }
       catch(Exception e)
       {
-        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(e)));
+        messages.add(LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(e)));
         ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
             adminActionRequired,
             messages);
@@ -411,7 +411,7 @@
     @Override
     public boolean isConfigurationDeleteAcceptable(
         LocalDBVLVIndexCfg cfg,
-        List<Message> unacceptableReasons)
+        List<LocalizableMessage> unacceptableReasons)
     {
       // TODO: validate more before returning true?
       return true;
@@ -425,7 +425,7 @@
     {
       ConfigChangeResult ccr;
       boolean adminActionRequired = false;
-      List<Message> messages = new ArrayList<Message>();
+      List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
       exclusiveLock.lock();
       try
@@ -437,7 +437,7 @@
       }
       catch(DatabaseException de)
       {
-        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
+        messages.add(LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(de)));
         ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
             adminActionRequired,
             messages);
@@ -884,7 +884,7 @@
 
     if (vlvRequest != null && pageRequest != null)
     {
-      Message message = ERR_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV.get();
+      LocalizableMessage message = ERR_JEB_SEARCH_CANNOT_MIX_PAGEDRESULTS_AND_VLV.get();
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
@@ -1005,7 +1005,7 @@
         EntryID baseID = dn2id.get(null, aBaseDN, LockMode.DEFAULT);
         if (baseID == null)
         {
-          Message message =
+          LocalizableMessage message =
             ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(aBaseDN.toString());
           DN matchedDN = getMatchedDN(aBaseDN);
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
@@ -1137,7 +1137,7 @@
       if(! clientConnection.hasPrivilege(Privilege.UNINDEXED_SEARCH,
           searchOperation))
       {
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_SEARCH_UNINDEXED_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
             message);
@@ -1153,7 +1153,7 @@
 
         if (sortRequest.isCritical())
         {
-          Message message = ERR_JEB_SEARCH_CANNOT_SORT_UNINDEXED.get();
+          LocalizableMessage message = ERR_JEB_SEARCH_CANNOT_SORT_UNINDEXED.get();
           throw new DirectoryException(
               ResultCode.UNAVAILABLE_CRITICAL_EXTENSION, message);
         }
@@ -1269,7 +1269,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
         String str = pageRequest.getCookie().toHexString();
-        Message msg = ERR_JEB_INVALID_PAGED_RESULTS_COOKIE.get(str);
+        LocalizableMessage msg = ERR_JEB_INVALID_PAGED_RESULTS_COOKIE.get(str);
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
             msg, e);
       }
@@ -1462,7 +1462,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
         String str = pageRequest.getCookie().toHexString();
-        Message msg = ERR_JEB_INVALID_PAGED_RESULTS_COOKIE.get(str);
+        LocalizableMessage msg = ERR_JEB_INVALID_PAGED_RESULTS_COOKIE.get(str);
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
             msg, e);
       }
@@ -1654,7 +1654,7 @@
       // Check whether the entry already exists.
       if (dn2id.get(txn, entry.getName(), LockMode.DEFAULT) != null)
       {
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getName().toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
             message);
@@ -1671,7 +1671,7 @@
         parentID = dn2id.get(txn, parentDN, LockMode.DEFAULT);
         if (parentID == null)
         {
-          Message message = ERR_JEB_ADD_NO_SUCH_OBJECT.get(
+          LocalizableMessage message = ERR_JEB_ADD_NO_SUCH_OBJECT.get(
               entry.getName().toString());
           DN matchedDN = getMatchedDN(baseDN);
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
@@ -1685,7 +1685,7 @@
       if (!dn2id.insert(txn, entry.getName(), entryID))
       {
         // Do not ever expect to come through here.
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getName().toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
             message);
@@ -1695,7 +1695,7 @@
       if (!dn2uri.addEntry(txn, entry))
       {
         // Do not ever expect to come through here.
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getName().toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
             message);
@@ -1705,7 +1705,7 @@
       if (!id2entry.insert(txn, entryID, entry))
       {
         // Do not ever expect to come through here.
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_ADD_ENTRY_ALREADY_EXISTS.get(entry.getName().toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
             message);
@@ -1734,7 +1734,7 @@
           EntryID nodeID = dn2id.get(txn, dn, LockMode.DEFAULT);
           if (nodeID == null)
           {
-            Message msg =
+            LocalizableMessage msg =
               ERR_JEB_MISSING_DN2ID_RECORD.get(dn.toNormalizedString());
             throw new JebException(msg);
           }
@@ -1784,7 +1784,7 @@
       {
         msg = stackTraceToSingleLineString(e);
       }
-      Message message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg);
+      LocalizableMessage message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message, e);
     }
@@ -1881,7 +1881,7 @@
           {
             // The subtree delete control was not specified and
             // the target entry is not a leaf.
-            Message message =
+            LocalizableMessage message =
               ERR_JEB_DELETE_NOT_ALLOWED_ON_NONLEAF.get(entryDN.toString());
             throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF,
                 message);
@@ -1914,7 +1914,7 @@
 
             if (!pluginResult.continueProcessing())
             {
-              Message message =
+              LocalizableMessage message =
                       ERR_JEB_DELETE_ABORTED_BY_SUBORDINATE_PLUGIN.get(
                       JebFormat.dnFromDNKey(key.getData(), 0, 0, getBaseDN()).
                           toString());
@@ -1996,7 +1996,7 @@
       {
         msg = stackTraceToSingleLineString(e);
       }
-      Message message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg);
+      LocalizableMessage message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message, e);
     }
@@ -2024,7 +2024,7 @@
       status = dn2id.read(txn, leafDNKey, value, LockMode.RMW);
       if (status != OperationStatus.SUCCESS)
       {
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_DELETE_NO_SUCH_OBJECT.get(leafDNKey.toString());
         DN matchedDN = getMatchedDN(baseDN);
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
@@ -2037,7 +2037,7 @@
     if (dn2id.delete(txn, leafDNKey) != OperationStatus.SUCCESS)
     {
       // Do not expect to ever come through here.
-      Message message = ERR_JEB_DELETE_NO_SUCH_OBJECT.get(leafDNKey.toString());
+      LocalizableMessage message = ERR_JEB_DELETE_NO_SUCH_OBJECT.get(leafDNKey.toString());
       DN matchedDN = getMatchedDN(baseDN);
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
           message, matchedDN, null);
@@ -2047,7 +2047,7 @@
     Entry entry = id2entry.get(txn, leafID, LockMode.RMW);
     if (entry == null)
     {
-      Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString());
+      LocalizableMessage msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           msg);
     }
@@ -2063,7 +2063,7 @@
     // Remove from id2entry.
     if (!id2entry.remove(txn, leafID))
     {
-      Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString());
+      LocalizableMessage msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(leafID.toString());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           msg);
     }
@@ -2102,7 +2102,7 @@
       EntryID parentID = dn2id.get(txn, parentDN, LockMode.DEFAULT);
       if (parentID == null)
       {
-        Message msg =
+        LocalizableMessage msg =
           ERR_JEB_MISSING_DN2ID_RECORD.get(parentDN.toNormalizedString());
         throw new JebException(msg);
       }
@@ -2223,7 +2223,7 @@
       if (entry == null)
       {
         // The entryID does not exist.
-        Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(entryID.toString());
+        LocalizableMessage msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(entryID.toString());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
             msg);
       }
@@ -2266,7 +2266,7 @@
       if (entryID == null)
       {
         // The entry does not exist.
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_MODIFY_NO_SUCH_OBJECT.get(newEntry.getName().toString());
         DN matchedDN = getMatchedDN(baseDN);
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
@@ -2348,7 +2348,7 @@
       {
         msg = stackTraceToSingleLineString(e);
       }
-      Message message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg);
+      LocalizableMessage message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message, e);
     }
@@ -2405,7 +2405,7 @@
       if (!currentDN.equals(entry.getName()) &&
           dn2id.get(txn, entry.getName(), LockMode.DEFAULT) != null)
       {
-        Message message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get(
+        LocalizableMessage message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get(
             entry.getName().toString());
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
             message);
@@ -2417,7 +2417,7 @@
         // Check for referral entries above the target entry.
         dn2uri.targetEntryReferrals(currentDN, null);
 
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_MODIFYDN_NO_SUCH_OBJECT.get(currentDN.toString());
         DN matchedDN = getMatchedDN(baseDN);
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
@@ -2427,7 +2427,7 @@
       Entry oldApexEntry = id2entry.get(txn, oldApexID, LockMode.DEFAULT);
       if (oldApexEntry == null)
       {
-        Message msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(oldApexID.toString());
+        LocalizableMessage msg = ERR_JEB_MISSING_ID2ENTRY_RECORD.get(oldApexID.toString());
         throw new DirectoryException(
             DirectoryServer.getServerErrorResultCode(), msg);
       }
@@ -2448,7 +2448,7 @@
         EntryID newSuperiorID = dn2id.get(txn, newSuperiorDN, LockMode.DEFAULT);
         if (newSuperiorID == null)
         {
-          Message msg =
+          LocalizableMessage msg =
             ERR_JEB_NEW_SUPERIOR_NO_SUCH_OBJECT.get(
                 newSuperiorDN.toString());
           DN matchedDN = getMatchedDN(baseDN);
@@ -2631,7 +2631,7 @@
       {
         msg = stackTraceToSingleLineString(e);
       }
-      Message message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg);
+      LocalizableMessage message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message, e);
     }
@@ -2666,7 +2666,7 @@
   {
     if (!dn2id.insert(txn, newEntry.getName(), newID))
     {
-      Message message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get(
+      LocalizableMessage message = ERR_JEB_MODIFYDN_ALREADY_EXISTS.get(
           newEntry.getName().toString());
       throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS,
                                    message);
@@ -2808,7 +2808,7 @@
 
       if (!pluginResult.continueProcessing())
       {
-        Message message = ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN.get(
+        LocalizableMessage message = ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_PLUGIN.get(
             oldDN.toString(), newDN.toString());
         throw new DirectoryException(
             DirectoryServer.getServerErrorResultCode(), message);
@@ -2816,11 +2816,11 @@
 
       if (! modifications.isEmpty())
       {
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         if (! newEntry.conformsToSchema(null, false, false, false,
             invalidReason))
         {
-          Message message =
+          LocalizableMessage message =
             ERR_JEB_MODIFYDN_ABORTED_BY_SUBORDINATE_SCHEMA_ERROR.get(
                 oldDN.toString(),
                 newDN.toString(),
@@ -3517,7 +3517,7 @@
           {
             msg = stackTraceToSingleLineString(e);
           }
-          Message message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg);
+          LocalizableMessage message = ERR_JEB_UNCHECKED_EXCEPTION.get(msg);
           throw new JebException(message, e);
         }
       }
@@ -3576,7 +3576,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(
-      LocalDBBackendCfg cfg, List<Message> unacceptableReasons)
+      LocalDBBackendCfg cfg, List<LocalizableMessage> unacceptableReasons)
   {
     // This is always true because only all config attributes used
     // by the entry container should be validated by the admin framework.
@@ -3590,7 +3590,7 @@
   public ConfigChangeResult applyConfigurationChange(LocalDBBackendCfg cfg)
   {
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     exclusiveLock.lock();
     try
@@ -3629,7 +3629,7 @@
         if (id2children.setIndexEntryLimit(cfg.getIndexEntryLimit()))
         {
           adminActionRequired = true;
-          Message message = NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD
+          LocalizableMessage message = NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD
               .get(id2children.getName());
           messages.add(message);
         }
@@ -3637,7 +3637,7 @@
         if (id2subtree.setIndexEntryLimit(cfg.getIndexEntryLimit()))
         {
           adminActionRequired = true;
-          Message message = NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD
+          LocalizableMessage message = NOTE_JEB_CONFIG_INDEX_ENTRY_LIMIT_REQUIRES_REBUILD
               .get(id2subtree.getName());
           messages.add(message);
         }
@@ -3651,7 +3651,7 @@
     }
     catch (DatabaseException e)
     {
-      messages.add(Message.raw(stackTraceToSingleLineString(e)));
+      messages.add(LocalizableMessage.raw(stackTraceToSingleLineString(e)));
       return new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
           false, messages);
     }
@@ -3934,7 +3934,7 @@
       // Check for referral entries above the base entry.
       dn2uri.targetEntryReferrals(baseDN, searchScope);
 
-      Message message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString());
+      LocalizableMessage message = ERR_JEB_SEARCH_NO_SUCH_OBJECT.get(baseDN.toString());
       DN matchedDN = getMatchedDN(baseDN);
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT,
             message, matchedDN, null);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryIDSetSorter.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryIDSetSorter.java
index d168dfd..9f57afb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryIDSetSorter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EntryIDSetSorter.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -102,7 +102,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_ENTRYIDSORTER_CANNOT_EXAMINE_ENTRY.get(
+        LocalizableMessage message = ERR_ENTRYIDSORTER_CANNOT_EXAMINE_ENTRY.get(
             String.valueOf(id), getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -130,7 +130,7 @@
                new VLVResponseControl(targetOffset, sortMap.size(),
                                       LDAPResultCode.OFFSET_RANGE_ERROR));
 
-          Message message = ERR_ENTRYIDSORTER_NEGATIVE_START_POS.get();
+          LocalizableMessage message = ERR_ENTRYIDSORTER_NEGATIVE_START_POS.get();
           throw new DirectoryException(ResultCode.VIRTUAL_LIST_VIEW_ERROR,
                                        message);
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EnvManager.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EnvManager.java
index b799bf3..fbe0d22 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EnvManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/EnvManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -83,7 +84,7 @@
     {
       if (!dir.isDirectory())
       {
-        Message message = ERR_JEB_DIRECTORY_INVALID.get(homeDir);
+        LocalizableMessage message = ERR_JEB_DIRECTORY_INVALID.get(homeDir);
         throw new JebException(message);
       }
       removeFiles(homeDir);
@@ -100,7 +101,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        Message message = ERR_JEB_CREATE_FAIL.get(e.getMessage());
+        LocalizableMessage message = ERR_JEB_CREATE_FAIL.get(e.getMessage());
         throw new JebException(message, e);
       }
     }
@@ -120,12 +121,12 @@
     File dir = new File(homeDir);
     if (!dir.exists())
     {
-      Message message = ERR_JEB_DIRECTORY_DOES_NOT_EXIST.get(homeDir);
+      LocalizableMessage message = ERR_JEB_DIRECTORY_DOES_NOT_EXIST.get(homeDir);
       throw new JebException(message);
     }
     if (!dir.isDirectory())
     {
-      Message message = ERR_JEB_DIRECTORY_INVALID.get(homeDir);
+      LocalizableMessage message = ERR_JEB_DIRECTORY_INVALID.get(homeDir);
       throw new JebException(message);
     }
 
@@ -143,7 +144,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = ERR_JEB_REMOVE_FAIL.get(e.getMessage());
+      LocalizableMessage message = ERR_JEB_REMOVE_FAIL.get(e.getMessage());
       throw new JebException(message, e);
     }
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ExportJob.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ExportJob.java
index b61f349..eab3da1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ExportJob.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ExportJob.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.backends.jeb;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import com.sleepycat.je.Cursor;
 import com.sleepycat.je.CursorConfig;
@@ -173,7 +173,7 @@
       rate = 1000f*exportedCount / totalTime;
     }
 
-    Message message = NOTE_JEB_EXPORT_FINAL_STATUS.get(
+    LocalizableMessage message = NOTE_JEB_EXPORT_FINAL_STATUS.get(
         exportedCount, skippedCount, totalTime/1000, rate);
     logError(message);
 
@@ -311,7 +311,7 @@
 
       float rate = 1000f*deltaCount / deltaTime;
 
-      Message message =
+      LocalizableMessage message =
           NOTE_JEB_EXPORT_PROGRESS_REPORT.get(latestCount, skippedCount, rate);
       logError(message);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ID2Entry.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ID2Entry.java
index 2cdddde..ed58789 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ID2Entry.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/ID2Entry.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.backends.jeb;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.server.core.DirectoryServer.getMaxInternalBufferSize;
 import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -153,7 +153,7 @@
       byte formatVersion = bytes.byteAt(0);
       if(formatVersion != JebFormat.FORMAT_VERSION)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_JEB_INCOMPATIBLE_ENTRY_VERSION.get(formatVersion);
         throw new ASN1Exception(message);
       }
@@ -502,7 +502,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_JEB_ENTRY_DATABASE_CORRUPT.get(id.toString());
+      LocalizableMessage message = ERR_JEB_ENTRY_DATABASE_CORRUPT.get(id.toString());
       throw new DirectoryException(
           DirectoryServer.getServerErrorResultCode(), message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexQuery.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexQuery.java
index 42408c0..acd6c4b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexQuery.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexQuery.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.backends.jeb;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.Collection;
 import java.util.List;
@@ -55,7 +56,7 @@
    *                      EntryIDSet is not defined.
    * @return The EntryIDSet as a result of evaulation of this query.
    */
-  public abstract EntryIDSet evaluate(List<Message> debugMessages);
+  public abstract EntryIDSet evaluate(List<LocalizableMessage> debugMessages);
 
 
 
@@ -116,7 +117,7 @@
      * @param debugMessages
      */
     @Override
-    public EntryIDSet evaluate(List<Message> debugMessages)
+    public EntryIDSet evaluate(List<LocalizableMessage> debugMessages)
     {
       return new EntryIDSet();
     }
@@ -153,7 +154,7 @@
      * @param debugMessages
      */
     @Override
-    public EntryIDSet evaluate(List<Message> debugMessages)
+    public EntryIDSet evaluate(List<LocalizableMessage> debugMessages)
     {
       EntryIDSet entryIDs = null;
       for (IndexQuery query : subIndexQueries)
@@ -206,7 +207,7 @@
      * @param debugMessages
      */
     @Override
-    public EntryIDSet evaluate(List<Message> debugMessages)
+    public EntryIDSet evaluate(List<LocalizableMessage> debugMessages)
     {
       EntryIDSet entryIDs = null;
       for (IndexQuery query : subIndexQueries)
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexQueryFactoryImpl.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexQueryFactoryImpl.java
index 8fe101b..282a097 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexQueryFactoryImpl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/IndexQueryFactoryImpl.java
@@ -35,7 +35,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.IndexQueryFactory;
 import org.forgerock.opendj.ldap.ByteSequence;
 
@@ -85,7 +85,7 @@
       {
 
         @Override
-        public EntryIDSet evaluate(List<Message> debugMessages)
+        public EntryIDSet evaluate(List<LocalizableMessage> debugMessages)
         {
           // Read the database and get Record for the key.
           DatabaseEntry key = new DatabaseEntry(value.toByteArray());
@@ -133,7 +133,7 @@
       {
 
         @Override
-        public EntryIDSet evaluate(List<Message> debugMessages)
+        public EntryIDSet evaluate(List<LocalizableMessage> debugMessages)
         {
           // Find the right index.
           Index index = indexMap.get(indexID);
@@ -201,7 +201,7 @@
       {
 
         @Override
-        public EntryIDSet evaluate(List<Message> debugMessages)
+        public EntryIDSet evaluate(List<LocalizableMessage> debugMessages)
         {
           return new EntryIDSet();
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JECompressedSchema.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JECompressedSchema.java
index efeb696..0983b28 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JECompressedSchema.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JECompressedSchema.java
@@ -37,7 +37,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.CompressedSchema;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -297,7 +297,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ae);
       }
 
-      final Message m = ERR_JEB_COMPSCHEMA_CANNOT_DECODE_OC_TOKEN.get(ae
+      final LocalizableMessage m = ERR_JEB_COMPSCHEMA_CANNOT_DECODE_OC_TOKEN.get(ae
           .getMessage());
       throw new InitializationException(m, ae);
     }
@@ -339,7 +339,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ae);
       }
 
-      final Message m = ERR_JEB_COMPSCHEMA_CANNOT_DECODE_AD_TOKEN.get(ae
+      final LocalizableMessage m = ERR_JEB_COMPSCHEMA_CANNOT_DECODE_AD_TOKEN.get(ae
           .getMessage());
       throw new InitializationException(m, ae);
     }
@@ -371,7 +371,7 @@
         }
         else
         {
-          final Message m = ERR_JEB_COMPSCHEMA_CANNOT_STORE_STATUS.get(status
+          final LocalizableMessage m = ERR_JEB_COMPSCHEMA_CANNOT_STORE_STATUS.get(status
               .toString());
           throw new DirectoryException(
               DirectoryServer.getServerErrorResultCode(), m);
@@ -383,7 +383,7 @@
       }
       catch (final DatabaseException de)
       {
-        final Message m = ERR_JEB_COMPSCHEMA_CANNOT_STORE_EX.get(de
+        final LocalizableMessage m = ERR_JEB_COMPSCHEMA_CANNOT_STORE_EX.get(de
             .getMessage());
         throw new DirectoryException(
             DirectoryServer.getServerErrorResultCode(), m, de);
@@ -392,7 +392,7 @@
 
     if (!successful)
     {
-      final Message m = ERR_JEB_COMPSCHEMA_CANNOT_STORE_MULTIPLE_FAILURES.get();
+      final LocalizableMessage m = ERR_JEB_COMPSCHEMA_CANNOT_STORE_MULTIPLE_FAILURES.get();
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           m);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebException.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebException.java
index e1330b1..92d8a19 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/JebException.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
 
 
 
 import org.opends.server.types.IdentifiedException;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -64,7 +65,7 @@
    *
    * @param  message    The message that explains the problem that occurred.
    */
-  public JebException(Message message)
+  public JebException(LocalizableMessage message)
   {
     super(message);
   }
@@ -78,7 +79,7 @@
    * @param  message    The message that explains the problem that occurred.
    * @param  cause      The exception that was caught to trigger this exception.
    */
-  public JebException(Message message, Throwable cause)
+  public JebException(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/RootContainer.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/RootContainer.java
index 8e9001c..4d7d90d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/RootContainer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/RootContainer.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import com.sleepycat.je.config.EnvironmentParams;
 import com.sleepycat.je.config.ConfigParam;
 import com.sleepycat.je.*;
@@ -155,7 +155,7 @@
     {
       if(!backendDirectory.mkdirs())
       {
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_CREATE_FAIL.get(backendDirectory.getPath());
         throw new ConfigException(message);
       }
@@ -163,7 +163,7 @@
     //Make sure the directory is valid.
     else if (!backendDirectory.isDirectory())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_JEB_DIRECTORY_INVALID.get(backendDirectory.getPath());
       throw new ConfigException(message);
     }
@@ -176,7 +176,7 @@
     }
     catch(Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_BACKEND_MODE_INVALID.get(config.dn().toString());
       throw new ConfigException(message);
     }
@@ -187,7 +187,7 @@
         !backendPermission.isOwnerReadable() ||
         !backendPermission.isOwnerExecutable())
     {
-      Message message = ERR_CONFIG_BACKEND_INSANE_MODE.get(
+      LocalizableMessage message = ERR_CONFIG_BACKEND_INSANE_MODE.get(
           config.getDBDirectoryPermissions());
       throw new ConfigException(message);
     }
@@ -199,7 +199,7 @@
       {
         if(!FilePermission.setPermissions(backendDirectory, backendPermission))
         {
-          Message message = WARN_JEB_UNABLE_SET_PERMISSIONS.get(
+          LocalizableMessage message = WARN_JEB_UNABLE_SET_PERMISSIONS.get(
               backendPermission.toString(), backendDirectory.toString());
           logError(message);
         }
@@ -207,7 +207,7 @@
       catch(Exception e)
       {
         // Log an warning that the permissions were not set.
-        Message message = WARN_JEB_SET_PERMISSIONS_FAILED.get(
+        LocalizableMessage message = WARN_JEB_SET_PERMISSIONS_FAILED.get(
             backendDirectory.toString(), e.toString());
         logError(message);
       }
@@ -299,7 +299,7 @@
     // another to be opened.
     if (ec1 != null)
     {
-      Message m = ERR_JEB_ENTRY_CONTAINER_ALREADY_REGISTERED.get(
+      LocalizableMessage m = ERR_JEB_ENTRY_CONTAINER_ALREADY_REGISTERED.get(
         ec1.getDatabasePrefix(), baseDN.toString());
       throw new InitializationException(m);
     }
@@ -414,7 +414,7 @@
         PreloadConfig preloadConfig = new PreloadConfig();
         preloadConfig.setLoadLNs(true);
 
-        Message message =
+        LocalizableMessage message =
             NOTE_JEB_CACHE_PRELOAD_STARTED.get(backend.getBackendID());
         logError(message);
 
@@ -489,7 +489,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_CACHE_PRELOAD.get(backend.getBackendID(),
           (e.getCause() != null ? e.getCause().getMessage() :
             stackTraceToSingleLineString(e)));
@@ -700,7 +700,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       LocalDBBackendCfg cfg,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     boolean acceptable = true;
 
@@ -712,7 +712,7 @@
     {
       if(!backendDirectory.mkdirs())
       {
-        Message message =
+        LocalizableMessage message =
           ERR_JEB_CREATE_FAIL.get(backendDirectory.getPath());
         unacceptableReasons.add(message);
         acceptable = false;
@@ -725,7 +725,7 @@
     //Make sure the directory is valid.
     else if (!backendDirectory.isDirectory())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_JEB_DIRECTORY_INVALID.get(backendDirectory.getPath());
       unacceptableReasons.add(message);
       acceptable = false;
@@ -742,7 +742,7 @@
           !newBackendPermission.isOwnerReadable() ||
           !newBackendPermission.isOwnerExecutable())
       {
-        Message message = ERR_CONFIG_BACKEND_INSANE_MODE.get(
+        LocalizableMessage message = ERR_CONFIG_BACKEND_INSANE_MODE.get(
             cfg.getDBDirectoryPermissions());
         unacceptableReasons.add(message);
         acceptable = false;
@@ -750,7 +750,7 @@
     }
     catch(Exception e)
     {
-      Message message =
+      LocalizableMessage message =
               ERR_CONFIG_BACKEND_MODE_INVALID.get(cfg.dn().toString());
       unacceptableReasons.add(message);
       acceptable = false;
@@ -762,7 +762,7 @@
     }
     catch (Exception e)
     {
-      unacceptableReasons.add(Message.raw(e.getLocalizedMessage()));
+      unacceptableReasons.add(LocalizableMessage.raw(e.getLocalizedMessage()));
       acceptable = false;
     }
 
@@ -778,7 +778,7 @@
   {
     ConfigChangeResult ccr;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     try
     {
@@ -942,7 +942,7 @@
             if(!FilePermission.setPermissions(backendDirectory,
                 backendPermission))
             {
-              Message message = WARN_JEB_UNABLE_SET_PERMISSIONS.get(
+              LocalizableMessage message = WARN_JEB_UNABLE_SET_PERMISSIONS.get(
                   backendPermission.toString(), backendDirectory.toString());
               logError(message);
             }
@@ -950,7 +950,7 @@
           catch(Exception e)
           {
             // Log an warning that the permissions were not set.
-            Message message = WARN_JEB_SET_PERMISSIONS_FAILED.get(
+            LocalizableMessage message = WARN_JEB_SET_PERMISSIONS_FAILED.get(
                 backendDirectory.toString(), e.toString());
             logError(message);
           }
@@ -966,7 +966,7 @@
     }
     catch (Exception e)
     {
-      messages.add(Message.raw(stackTraceToSingleLineString(e)));
+      messages.add(LocalizableMessage.raw(stackTraceToSingleLineString(e)));
       ccr = new ConfigChangeResult(DirectoryServer.getServerErrorResultCode(),
                                    adminActionRequired,
                                    messages);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VLVIndex.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VLVIndex.java
index 9de740c..8a305ed 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VLVIndex.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/VLVIndex.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.backends.jeb;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import com.sleepycat.je.*;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -155,7 +155,7 @@
     }
     catch(Exception e)
     {
-      Message msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
+      LocalizableMessage msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
           config.getFilter(), name, stackTraceToSingleLineString(e));
       throw new ConfigException(msg);
     }
@@ -185,7 +185,7 @@
       }
       catch(Exception e)
       {
-        Message msg =
+        LocalizableMessage msg =
             ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
                     String.valueOf(sortKeys[i]), name);
         throw new ConfigException(msg);
@@ -195,7 +195,7 @@
           DirectoryServer.getAttributeType(sortAttrs[i].toLowerCase());
       if(attrType == null)
       {
-        Message msg =
+        LocalizableMessage msg =
             ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(sortAttrs[i], name);
         throw new ConfigException(msg);
       }
@@ -1180,7 +1180,7 @@
               new VLVResponseControl(targetOffset, currentCount,
                                      LDAPResultCode.OFFSET_RANGE_ERROR));
 
-          Message message = ERR_ENTRYIDSORTER_NEGATIVE_START_POS.get();
+          LocalizableMessage message = ERR_ENTRYIDSORTER_NEGATIVE_START_POS.get();
           throw new DirectoryException(ResultCode.VIRTUAL_LIST_VIEW_ERROR,
                                        message);
         }
@@ -1698,7 +1698,7 @@
    */
   public synchronized boolean isConfigurationChangeAcceptable(
       LocalDBVLVIndexCfg cfg,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     try
     {
@@ -1707,7 +1707,7 @@
     }
     catch(Exception e)
     {
-      Message msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
+      LocalizableMessage msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
               cfg.getFilter(), name,
               stackTraceToSingleLineString(e));
       unacceptableReasons.add(msg);
@@ -1739,7 +1739,7 @@
       }
       catch(Exception e)
       {
-        Message msg =
+        LocalizableMessage msg =
                 ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
                         String.valueOf(sortKeys[i]), name);
         unacceptableReasons.add(msg);
@@ -1750,7 +1750,7 @@
           DirectoryServer.getAttributeType(sortAttrs[i].toLowerCase());
       if(attrType == null)
       {
-        Message msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
+        LocalizableMessage msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
                 sortAttrs[i], name);
         unacceptableReasons.add(msg);
         return false;
@@ -1770,7 +1770,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // Update base DN only if changed..
     if(!config.getBaseDN().equals(cfg.getBaseDN()))
@@ -1812,7 +1812,7 @@
       }
       catch(Exception e)
       {
-        Message msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
+        LocalizableMessage msg = ERR_JEB_CONFIG_VLV_INDEX_BAD_FILTER.get(
                 config.getFilter(), name,
                 stackTraceToSingleLineString(e));
         messages.add(msg);
@@ -1852,7 +1852,7 @@
         }
         catch(Exception e)
         {
-          Message msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
+          LocalizableMessage msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
                   String.valueOf(String.valueOf(sortKeys[i])), name);
           messages.add(msg);
           if(resultCode == ResultCode.SUCCESS)
@@ -1865,7 +1865,7 @@
             DirectoryServer.getAttributeType(sortAttrs[i].toLowerCase());
         if(attrType == null)
         {
-          Message msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
+          LocalizableMessage msg = ERR_JEB_CONFIG_VLV_INDEX_UNDEFINED_ATTR.get(
                   String.valueOf(String.valueOf(sortKeys[i])), name);
           messages.add(msg);
           if(resultCode == ResultCode.SUCCESS)
@@ -1893,7 +1893,7 @@
       }
       catch(DatabaseException de)
       {
-        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
+        messages.add(LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(de)));
         if(resultCode == ResultCode.SUCCESS)
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
@@ -1911,7 +1911,7 @@
     if(adminActionRequired)
     {
       trusted = false;
-      Message message = NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(name);
+      LocalizableMessage message = NOTE_JEB_INDEX_ADD_REQUIRES_REBUILD.get(name);
       messages.add(message);
       try
       {
@@ -1919,7 +1919,7 @@
       }
       catch(DatabaseException de)
       {
-        messages.add(Message.raw(StaticUtils.stackTraceToSingleLineString(de)));
+        messages.add(LocalizableMessage.raw(StaticUtils.stackTraceToSingleLineString(de)));
         if(resultCode == ResultCode.SUCCESS)
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
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 f65bdef..f519347 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
@@ -26,7 +26,7 @@
  */
 package org.opends.server.backends.jeb;
 import com.sleepycat.je.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.loggers.debug.DebugLogger.*;
@@ -234,7 +234,7 @@
             }
             else
             {
-              Message msg = NOTE_JEB_SUBORDINATE_INDEXES_DISABLED
+              LocalizableMessage msg = NOTE_JEB_SUBORDINATE_INDEXES_DISABLED
                   .get(rootContainer.getConfiguration().getBackendId());
               throw new JebException(msg);
             }
@@ -247,7 +247,7 @@
             }
             else
             {
-              Message msg = NOTE_JEB_SUBORDINATE_INDEXES_DISABLED
+              LocalizableMessage msg = NOTE_JEB_SUBORDINATE_INDEXES_DISABLED
                   .get(rootContainer.getConfiguration().getBackendId());
               throw new JebException(msg);
             }
@@ -256,7 +256,7 @@
           {
             if(lowerName.length() < 5)
             {
-              Message msg = ERR_JEB_VLV_INDEX_NOT_CONFIGURED.get(lowerName);
+              LocalizableMessage msg = ERR_JEB_VLV_INDEX_NOT_CONFIGURED.get(lowerName);
               throw new JebException(msg);
             }
 
@@ -264,7 +264,7 @@
                 entryContainer.getVLVIndex(lowerName.substring(4));
             if(vlvIndex == null)
             {
-              Message msg =
+              LocalizableMessage msg =
                   ERR_JEB_VLV_INDEX_NOT_CONFIGURED.get(lowerName.substring(4));
               throw new JebException(msg);
             }
@@ -277,14 +277,14 @@
                 DirectoryServer.getAttributeType(lowerName);
             if (attrType == null)
             {
-              Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+              LocalizableMessage msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
               throw new JebException(msg);
             }
             AttributeIndex attrIndex =
                 entryContainer.getAttributeIndex(attrType);
             if (attrIndex == null)
             {
-              Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+              LocalizableMessage msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
               throw new JebException(msg);
             }
             attrIndexList.add(attrIndex);
@@ -356,7 +356,7 @@
                    String.valueOf(keyCount));
       if (cleanMode)
       {
-        Message message = NOTE_JEB_VERIFY_CLEAN_FINAL_STATUS.get(
+        LocalizableMessage message = NOTE_JEB_VERIFY_CLEAN_FINAL_STATUS.get(
             keyCount, errorCount, totalTime/1000, rate);
         logError(message);
 
@@ -395,7 +395,7 @@
       }
       else
       {
-        Message message = NOTE_JEB_VERIFY_FINAL_STATUS.get(
+        LocalizableMessage message = NOTE_JEB_VERIFY_FINAL_STATUS.get(
             keyCount, errorCount, totalTime/1000, rate);
         logError(message);
         //TODO add entry-limit-stats to the statEntry
@@ -2051,7 +2051,7 @@
 
       float rate = 1000f*deltaCount / deltaTime;
 
-      Message message = NOTE_JEB_VERIFY_PROGRESS_REPORT.get(
+      LocalizableMessage message = NOTE_JEB_VERIFY_PROGRESS_REPORT.get(
         latestCount, totalCount, errorCount, rate);
       logError(message);
 
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 a11a0c9..691bc59 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
@@ -43,9 +43,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
-import org.opends.messages.Severity;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn;
 import org.opends.server.admin.std.meta.LocalDBIndexCfgDefn.IndexType;
 import org.opends.server.admin.std.server.LocalDBBackendCfg;
@@ -276,7 +274,7 @@
     recursiveDelete(tempDir);
     if (!tempDir.exists() && !tempDir.mkdirs())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_JEB_IMPORT_CREATE_TMPDIR_ERROR.get(String.valueOf(tempDir));
       throw new InitializationException(message);
     }
@@ -344,7 +342,7 @@
     recursiveDelete(tempDir);
     if (!tempDir.exists() && !tempDir.mkdirs())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_JEB_IMPORT_CREATE_TMPDIR_ERROR.get(String.valueOf(tempDir));
       throw new InitializationException(message);
     }
@@ -537,7 +535,7 @@
           // Not enough memory.
           final long minimumPhaseOneBufferMemory =
               totalPhaseOneBufferCount * MIN_BUFFER_SIZE;
-          Message message =
+          LocalizableMessage message =
               ERR_IMPORT_LDIF_LACK_MEM.get(usableMemory,
                   minimumPhaseOneBufferMemory + dbCacheSize + tmpEnvCacheSize);
           throw new InitializationException(message);
@@ -906,7 +904,7 @@
       }
       catch (IOException ioe)
       {
-        Message message = ERR_JEB_IMPORT_LDIF_READER_IO_ERROR.get();
+        LocalizableMessage message = ERR_JEB_IMPORT_LDIF_READER_IO_ERROR.get();
         throw new InitializationException(message, ioe);
       }
 
@@ -930,7 +928,7 @@
       dbMonitor.initializeMonitorProvider(null);
       DirectoryServer.registerMonitorProvider(dbMonitor);
 
-      Message message =
+      LocalizableMessage message =
           NOTE_JEB_IMPORT_STARTING.get(DirectoryServer.getVersionString(),
               BUILD_ID, REVISION_NUMBER);
       logError(message);
@@ -1058,7 +1056,7 @@
     }
     catch (DatabaseException ex)
     {
-      Message message =
+      LocalizableMessage message =
           NOTE_JEB_IMPORT_LDIF_TRUSTED_FAILED.get(ex.getMessage());
       throw new JebException(message);
     }
@@ -1220,7 +1218,7 @@
         readAheadSize = MIN_READ_AHEAD_CACHE_SIZE;
         buffers = (int) (usableMemory / readAheadSize);
 
-        Message message = WARN_IMPORT_LDIF_LACK_MEM_PHASE_TWO.get(usableMemory);
+        LocalizableMessage message = WARN_IMPORT_LDIF_LACK_MEM_PHASE_TWO.get(usableMemory);
         logError(message);
         break;
       }
@@ -1230,7 +1228,7 @@
     // processing of smaller indexes.
     dbThreads = Math.max(2, dbThreads);
 
-    Message message =
+    LocalizableMessage message =
         NOTE_JEB_IMPORT_LDIF_PHASE_TWO_MEM_REPORT.get(availableMemory,
             readAheadSize, buffers);
     logError(message);
@@ -1293,7 +1291,7 @@
           DatabaseEntry data = new DatabaseEntry();
           LockMode lockMode = LockMode.DEFAULT;
           OperationStatus status;
-          Message message =
+          LocalizableMessage message =
               NOTE_JEB_IMPORT_MIGRATION_START.get("excluded", String
                   .valueOf(suffix.getBaseDN()));
           logError(message);
@@ -1387,7 +1385,7 @@
           DatabaseEntry data = new DatabaseEntry();
           LockMode lockMode = LockMode.DEFAULT;
           OperationStatus status;
-          Message message =
+          LocalizableMessage message =
               NOTE_JEB_IMPORT_MIGRATION_START.get("existing", String
                   .valueOf(suffix.getBaseDN()));
           logError(message);
@@ -1500,7 +1498,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_JEB_IMPORT_LDIF_APPEND_REPLACE_TASK_ERR.get(e.getMessage());
         logError(message);
         isCanceled = true;
@@ -1627,7 +1625,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_JEB_IMPORT_LDIF_IMPORT_TASK_ERR.get(e.getMessage());
         logError(message);
         isCanceled = true;
@@ -1668,7 +1666,7 @@
       {
         if (!suffix.isParentProcessed(parentDN, tmpEnv, clearedBackend))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_JEB_IMPORT_PARENT_NOT_FOUND.get(parentDN.toString());
           reader.rejectEntry(entry, message);
           return false;
@@ -1682,14 +1680,14 @@
         EntryID id = suffix.getDN2ID().get(null, entryDN, LockMode.DEFAULT);
         if (id != null || !tmpEnv.insert(entryDN, keyEntry, valEntry))
         {
-          Message message = WARN_JEB_IMPORT_ENTRY_EXISTS.get();
+          LocalizableMessage message = WARN_JEB_IMPORT_ENTRY_EXISTS.get();
           reader.rejectEntry(entry, message);
           return false;
         }
       }
       else if (!tmpEnv.insert(entryDN, keyEntry, valEntry))
       {
-        Message message = WARN_JEB_IMPORT_ENTRY_EXISTS.get();
+        LocalizableMessage message = WARN_JEB_IMPORT_ENTRY_EXISTS.get();
         reader.rejectEntry(entry, message);
         return false;
       }
@@ -1852,17 +1850,15 @@
         indexBuffer = freeBufferQueue.take();
         if (indexBuffer == null)
         {
-          Message message =
-              Message.raw(Category.JEB, Severity.SEVERE_ERROR,
-                  "Index buffer processing error.");
+          LocalizableMessage message =
+              LocalizableMessage.raw("Index buffer processing error.");
           throw new InterruptedException(message.toString());
         }
       }
       if (indexBuffer.isPoison())
       {
-        Message message =
-            Message.raw(Category.JEB, Severity.SEVERE_ERROR,
-                "Cancel processing received.");
+        LocalizableMessage message =
+            LocalizableMessage.raw("Cancel processing received.");
         throw new InterruptedException(message.toString());
       }
       return indexBuffer;
@@ -1966,7 +1962,7 @@
       nextBufferID = 0;
       ownedPermits = 0;
 
-      Message message =
+      LocalizableMessage message =
           NOTE_JEB_IMPORT_LDIF_INDEX_STARTED.get(indexMgr.getBufferFileName(),
               remainingBuffers, totalBatches);
       logError(message);
@@ -2048,7 +2044,7 @@
           }
           if (!isCanceled)
           {
-            Message msg =
+            LocalizableMessage msg =
                 NOTE_JEB_IMPORT_LDIF_DN_CLOSE.get(indexMgr.getDNCount());
             logError(msg);
           }
@@ -2061,7 +2057,7 @@
           }
           if (!isCanceled)
           {
-            Message message =
+            LocalizableMessage message =
                 NOTE_JEB_IMPORT_LDIF_INDEX_CLOSE.get(indexMgr
                     .getBufferFileName());
             logError(message);
@@ -2121,7 +2117,7 @@
         final long kiloBytesRate = bytesReadInterval / deltaTime;
         final long kiloBytesRemaining = (bufferFileSize - tmpBytesRead) / 1024;
 
-        Message message =
+        LocalizableMessage message =
             NOTE_JEB_IMPORT_LDIF_PHASE_TWO_REPORT.get(indexMgr
                 .getBufferFileName(), bytesReadPercent, kiloBytesRemaining,
                 kiloBytesRate, currentBatch, totalBatches);
@@ -2244,7 +2240,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_JEB_IMPORT_LDIF_INDEX_WRITE_DB_ERR.get(indexMgr
                 .getBufferFileName(), e.getMessage());
         logError(message);
@@ -2716,7 +2712,7 @@
       }
       catch (IOException e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_JEB_IMPORT_LDIF_INDEX_FILEWRITER_ERR.get(indexMgr
                 .getBufferFile().getAbsolutePath(), e.getMessage());
         logError(message);
@@ -3223,7 +3219,7 @@
       suffix = Suffix.createSuffixContext(entryContainer, null, null, null);
       if (suffix == null)
       {
-        Message msg =
+        LocalizableMessage msg =
             ERR_JEB_REBUILD_SUFFIX_ERROR.get(rebuildConfig.getBaseDN()
                 .toString());
         throw new InitializationException(msg);
@@ -3250,7 +3246,7 @@
       }
       totalEntries = suffix.getID2Entry().getRecordCount();
 
-      Message message = null;
+      LocalizableMessage message = null;
       switch (rebuildConfig.getRebuildMode())
       {
       case ALL:
@@ -3290,7 +3286,7 @@
 
       if (!rebuildConfig.isClearDegradedState())
       {
-        Message message =
+        LocalizableMessage message =
             NOTE_JEB_REBUILD_FINAL_STATUS.get(entriesProcessed.get(),
                 totalTime / 1000, rate);
         logError(message);
@@ -3332,7 +3328,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        Message message = ERR_JEB_IMPORT_LDIF_REBUILD_INDEX_TASK_ERR.get(
+        LocalizableMessage message = ERR_JEB_IMPORT_LDIF_REBUILD_INDEX_TASK_ERR.get(
           stackTraceToSingleLineString(e));
         logError(message);
         isCanceled = true;
@@ -3378,7 +3374,7 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             NOTE_JEB_REBUILD_CLEARDEGRADEDSTATE_FINAL_STATUS.get(rebuildConfig
                 .getRebuildList().toString());
         logError(message);
@@ -3677,7 +3673,7 @@
       }
       catch (DatabaseException ex)
       {
-        Message message =
+        LocalizableMessage message =
             NOTE_JEB_IMPORT_LDIF_TRUSTED_FAILED.get(ex.getMessage());
         throw new JebException(message);
       }
@@ -3783,7 +3779,7 @@
           {
             if (lowerName.length() < 5)
             {
-              Message msg = ERR_JEB_VLV_INDEX_NOT_CONFIGURED.get(lowerName);
+              LocalizableMessage msg = ERR_JEB_VLV_INDEX_NOT_CONFIGURED.get(lowerName);
               throw new JebException(msg);
             }
             indexCount++;
@@ -3791,7 +3787,7 @@
           else if (lowerName.equals("id2subtree")
               || lowerName.equals("id2children"))
           {
-            Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+            LocalizableMessage msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
             throw new InitializationException(msg);
           }
           else
@@ -3799,14 +3795,14 @@
             String[] attrIndexParts = lowerName.split("\\.");
             if ((attrIndexParts.length <= 0) || (attrIndexParts.length > 3))
             {
-              Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+              LocalizableMessage msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
               throw new InitializationException(msg);
             }
             AttributeType attrType =
                 DirectoryServer.getAttributeType(attrIndexParts[0]);
             if (attrType == null)
             {
-              Message msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
+              LocalizableMessage msg = ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
               throw new InitializationException(msg);
             }
             if (attrIndexParts.length != 1)
@@ -3835,7 +3831,7 @@
                 }
                 else
                 {
-                  Message msg =
+                  LocalizableMessage msg =
                       ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
                   throw new InitializationException(msg);
                 }
@@ -3868,7 +3864,7 @@
                 }
                 if (!found)
                 {
-                  Message msg =
+                  LocalizableMessage msg =
                       ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
                   throw new InitializationException(msg);
                 }
@@ -3936,7 +3932,7 @@
               }
               if (!found)
               {
-                Message msg =
+                LocalizableMessage msg =
                     ERR_JEB_ATTRIBUTE_INDEX_NOT_CONFIGURED.get(index);
                 throw new InitializationException(msg);
               }
@@ -4048,7 +4044,7 @@
     public void diskFullThresholdReached(DiskSpaceMonitor monitor)
     {
       isCanceled = true;
-      Message msg =
+      LocalizableMessage msg =
           ERR_REBUILD_INDEX_LACK_DISK.get(monitor.getDirectory().getPath(),
               monitor.getFreeSpace(), monitor.getLowThreshold());
       logError(msg);
@@ -4115,7 +4111,7 @@
       {
         completed = 100f * entriesProcessed / rebuildManager.getTotEntries();
       }
-      Message message =
+      LocalizableMessage message =
           NOTE_JEB_REBUILD_PROGRESS_REPORT.get(completed, entriesProcessed,
               rebuildManager.getTotEntries(), rate);
       logError(message);
@@ -4202,7 +4198,7 @@
       long deltaCount = (latestCount - previousCount);
       long latestTime = System.currentTimeMillis();
       long deltaTime = latestTime - previousTime;
-      Message message;
+      LocalizableMessage message;
       if (deltaTime == 0)
       {
         return;
@@ -4346,7 +4342,7 @@
       long deltaCount = (latestCount - previousCount);
       long latestTime = System.currentTimeMillis();
       long deltaTime = latestTime - previousTime;
-      Message message;
+      LocalizableMessage message;
       if (deltaTime == 0)
       {
         return;
@@ -4777,9 +4773,8 @@
           status = cursor.getSearchKey(key, dns, LockMode.RMW);
           if (status == OperationStatus.NOTFOUND)
           {
-            Message message =
-                Message.raw(Category.JEB, Severity.SEVERE_ERROR,
-                    "Search DN cache failed.");
+            LocalizableMessage message =
+                LocalizableMessage.raw("Search DN cache failed.");
             throw new JebException(message);
           }
           if (!isDNMatched(dns, dnBytes))
@@ -4815,9 +4810,8 @@
       OperationStatus status = cursor.putCurrent(newVal);
       if (status != OperationStatus.SUCCESS)
       {
-        Message message =
-            Message.raw(Category.JEB, Severity.SEVERE_ERROR,
-                "Add of DN to DN cache failed.");
+        LocalizableMessage message =
+            LocalizableMessage.raw("Add of DN to DN cache failed.");
         throw new JebException(message);
       }
     }
@@ -4911,7 +4905,7 @@
   public void diskFullThresholdReached(DiskSpaceMonitor monitor)
   {
     isCanceled = true;
-    Message msg;
+    LocalizableMessage msg;
     if (!isPhaseOneDone)
     {
       msg =
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/IndexInputBuffer.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/IndexInputBuffer.java
index 5356f1e..e334170 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/IndexInputBuffer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/IndexInputBuffer.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.backends.jeb.importLDIF;
@@ -36,7 +36,7 @@
 import java.nio.ByteBuffer;
 import java.nio.channels.FileChannel;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.backends.jeb.importLDIF.Importer.IndexManager;
 
 import com.sleepycat.util.PackedInteger;
@@ -193,7 +193,7 @@
       }
       catch (IOException ex)
       {
-        Message message = ERR_JEB_IMPORT_BUFFER_IO_ERROR.get(indexMgr
+        LocalizableMessage message = ERR_JEB_IMPORT_BUFFER_IO_ERROR.get(indexMgr
             .getBufferFileName());
         logError(message);
         throw new RuntimeException(ex);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/Suffix.java b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/Suffix.java
index 27703ff..9faebda 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/Suffix.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/jeb/importLDIF/Suffix.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.backends.jeb.importLDIF;
@@ -35,7 +36,7 @@
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.backends.jeb.importLDIF.Importer.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import com.sleepycat.je.DatabaseException;
 import com.sleepycat.je.LockMode;
 import static org.opends.messages.JebMessages.*;
@@ -244,7 +245,7 @@
     try {
       assureNotPending(dn);
     } catch (InterruptedException e) {
-      Message message = ERR_JEB_IMPORT_LDIF_PENDING_ERR.get(e.getMessage());
+      LocalizableMessage message = ERR_JEB_IMPORT_LDIF_PENDING_ERR.get(e.getMessage());
       logError(message);
       throw e;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/task/FailedDependencyAction.java b/opendj3-server-dev/src/server/org/opends/server/backends/task/FailedDependencyAction.java
index 86d3692..5679a74 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/task/FailedDependencyAction.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/task/FailedDependencyAction.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends.task;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.TaskMessages.*;
 
 
@@ -104,18 +105,18 @@
     }
   }
 
-  private Message name;
+  private LocalizableMessage name;
 
   /**
    * Gets the display name of this action.
    *
-   * @return Message representing the name of this action
+   * @return LocalizableMessage representing the name of this action
    */
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return name;
   }
 
-  private FailedDependencyAction(Message name) {
+  private FailedDependencyAction(LocalizableMessage name) {
     this.name = name;
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/task/RecurringTask.java b/opendj3-server-dev/src/server/org/opends/server/backends/task/RecurringTask.java
index f7303ff..2cc3dc3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/task/RecurringTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/task/RecurringTask.java
@@ -29,7 +29,7 @@
 import java.util.Arrays;
 import java.util.Date;
 import java.util.GregorianCalendar;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -169,14 +169,14 @@
     List<Attribute> attrList = recurringTaskEntry.getAttribute(attrType);
     if ((attrList == null) || attrList.isEmpty())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_RECURRINGTASK_NO_ID_ATTRIBUTE.get(ATTR_RECURRING_TASK_ID);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     if (attrList.size() > 1)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_RECURRINGTASK_MULTIPLE_ID_TYPES.get(ATTR_RECURRING_TASK_ID);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -184,7 +184,7 @@
     Attribute attr = attrList.get(0);
     if (attr.isEmpty())
     {
-      Message message = ERR_RECURRINGTASK_NO_ID.get(ATTR_RECURRING_TASK_ID);
+      LocalizableMessage message = ERR_RECURRINGTASK_NO_ID.get(ATTR_RECURRING_TASK_ID);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
@@ -192,7 +192,7 @@
     AttributeValue value = iterator.next();
     if (iterator.hasNext())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_RECURRINGTASK_MULTIPLE_ID_VALUES.get(ATTR_RECURRING_TASK_ID);
       throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
     }
@@ -212,14 +212,14 @@
     attrList = recurringTaskEntry.getAttribute(attrType);
     if ((attrList == null) || attrList.isEmpty())
     {
-      Message message = ERR_RECURRINGTASK_NO_SCHEDULE_ATTRIBUTE.get(
+      LocalizableMessage message = ERR_RECURRINGTASK_NO_SCHEDULE_ATTRIBUTE.get(
           ATTR_RECURRING_TASK_SCHEDULE);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     if (attrList.size() > 1)
     {
-      Message message = ERR_RECURRINGTASK_MULTIPLE_SCHEDULE_TYPES.get(
+      LocalizableMessage message = ERR_RECURRINGTASK_MULTIPLE_SCHEDULE_TYPES.get(
           ATTR_RECURRING_TASK_SCHEDULE);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -227,7 +227,7 @@
     attr = attrList.get(0);
     if (attr.isEmpty())
     {
-      Message message = ERR_RECURRINGTASK_NO_SCHEDULE_VALUES.get(
+      LocalizableMessage message = ERR_RECURRINGTASK_NO_SCHEDULE_VALUES.get(
         ATTR_RECURRING_TASK_SCHEDULE);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -236,7 +236,7 @@
     value = iterator.next();
     if (iterator.hasNext())
     {
-      Message message = ERR_RECURRINGTASK_MULTIPLE_SCHEDULE_VALUES.get(
+      LocalizableMessage message = ERR_RECURRINGTASK_MULTIPLE_SCHEDULE_VALUES.get(
           ATTR_RECURRING_TASK_SCHEDULE);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -264,14 +264,14 @@
     attrList = recurringTaskEntry.getAttribute(attrType);
     if ((attrList == null) || attrList.isEmpty())
     {
-      Message message = ERR_TASKSCHED_NO_CLASS_ATTRIBUTE.get(
+      LocalizableMessage message = ERR_TASKSCHED_NO_CLASS_ATTRIBUTE.get(
           ATTR_TASK_CLASS);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     if (attrList.size() > 1)
     {
-      Message message = ERR_TASKSCHED_MULTIPLE_CLASS_TYPES.get(
+      LocalizableMessage message = ERR_TASKSCHED_MULTIPLE_CLASS_TYPES.get(
           ATTR_TASK_CLASS);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -279,7 +279,7 @@
     attr = attrList.get(0);
     if (attr.isEmpty())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_TASKSCHED_NO_CLASS_VALUES.get(ATTR_TASK_CLASS);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -288,7 +288,7 @@
     value = iterator.next();
     if (iterator.hasNext())
     {
-      Message message = ERR_TASKSCHED_MULTIPLE_CLASS_VALUES.get(
+      LocalizableMessage message = ERR_TASKSCHED_MULTIPLE_CLASS_VALUES.get(
           ATTR_TASK_CLASS);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -309,7 +309,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_RECURRINGTASK_CANNOT_LOAD_CLASS.
+      LocalizableMessage message = ERR_RECURRINGTASK_CANNOT_LOAD_CLASS.
           get(String.valueOf(taskClassName), ATTR_TASK_CLASS,
               getExceptionMessage(e));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
@@ -329,7 +329,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_RECURRINGTASK_CANNOT_INSTANTIATE_CLASS_AS_TASK.get(
+      LocalizableMessage message = ERR_RECURRINGTASK_CANNOT_INSTANTIATE_CLASS_AS_TASK.get(
           String.valueOf(taskClassName), Task.class.getName());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message,
                                    e);
@@ -349,7 +349,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
 
-      Message message = ERR_RECURRINGTASK_CANNOT_INITIALIZE_INTERNAL.get(
+      LocalizableMessage message = ERR_RECURRINGTASK_CANNOT_INITIALIZE_INTERNAL.get(
           String.valueOf(taskClassName), ie.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, ie);
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/task/Task.java b/opendj3-server-dev/src/server/org/opends/server/backends/task/Task.java
index 53cc7bb..1f4691f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/task/Task.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/task/Task.java
@@ -48,7 +48,8 @@
 
 import javax.mail.MessagingException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
+import org.opends.messages.Severity;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.ErrorLogger;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -90,7 +91,7 @@
   private LinkedList<String> dependencyIDs;
 
   // A set of log messages generated by this task.
-  // TODO: convert from String to Message objects.
+  // TODO: convert from String to LocalizableMessage objects.
   // Since these are stored in an entry we would need
   // to adopt some way for writing message to string in such
   // a way that the information could be reparsed from its
@@ -141,7 +142,7 @@
    *
    * @return name of task
    */
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     // NOTE: this method is invoked via reflection.  If you rename
     // it be sure to modify the calls.
     return null;
@@ -153,9 +154,9 @@
    *
    * @param name of an attribute type associated with the object
    *        class that represents this entry in the directory
-   * @return Message diaplay name
+   * @return LocalizableMessage diaplay name
    */
-  public Message getAttributeDisplayName(String name) {
+  public LocalizableMessage getAttributeDisplayName(String name) {
     // Subclasses that are schedulable from the task interface
     // should override this
 
@@ -196,7 +197,7 @@
     {
       if (recurringTaskID == null)
       {
-        Message message = ERR_TASK_MISSING_ATTR.get(
+        LocalizableMessage message = ERR_TASK_MISSING_ATTR.get(
             String.valueOf(taskEntry.getName()), ATTR_TASK_ID);
         throw new InitializationException(message);
       }
@@ -219,7 +220,7 @@
       taskState = TaskState.fromString(stateString);
       if (taskState == null)
       {
-        Message message = ERR_TASK_INVALID_STATE.get(taskDN, stateString);
+        LocalizableMessage message = ERR_TASK_INVALID_STATE.get(taskDN, stateString);
         throw new InitializationException(message);
       }
     }
@@ -255,7 +256,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_TASK_CANNOT_PARSE_SCHEDULED_START_TIME.get(timeString, taskDN);
         throw new InitializationException(message, e);
       }
@@ -289,7 +290,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_TASK_CANNOT_PARSE_ACTUAL_START_TIME.get(timeString, taskDN);
         throw new InitializationException(message, e);
       }
@@ -323,7 +324,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_TASK_CANNOT_PARSE_COMPLETION_TIME.get(timeString, taskDN);
         throw new InitializationException(message, e);
       }
@@ -388,7 +389,7 @@
     {
       if (isRequired)
       {
-        Message message = ERR_TASK_MISSING_ATTR.get(
+        LocalizableMessage message = ERR_TASK_MISSING_ATTR.get(
             String.valueOf(taskEntry.getName()), attributeName);
         throw new InitializationException(message);
       }
@@ -400,7 +401,7 @@
 
     if (attrList.size() > 1)
     {
-      Message message = ERR_TASK_MULTIPLE_ATTRS_FOR_TYPE.get(
+      LocalizableMessage message = ERR_TASK_MULTIPLE_ATTRS_FOR_TYPE.get(
           attributeName, String.valueOf(taskEntry.getName()));
       throw new InitializationException(message);
     }
@@ -410,7 +411,7 @@
     {
       if (isRequired)
       {
-        Message message = ERR_TASK_NO_VALUES_FOR_ATTR.get(
+        LocalizableMessage message = ERR_TASK_NO_VALUES_FOR_ATTR.get(
             attributeName, String.valueOf(taskEntry.getName()));
         throw new InitializationException(message);
       }
@@ -423,7 +424,7 @@
     AttributeValue value = iterator.next();
     if (iterator.hasNext())
     {
-      Message message = ERR_TASK_MULTIPLE_VALUES_FOR_ATTR.get(
+      LocalizableMessage message = ERR_TASK_MULTIPLE_VALUES_FOR_ATTR.get(
           attributeName, String.valueOf(taskEntry.getName()));
       throw new InitializationException(message);
     }
@@ -460,7 +461,7 @@
 
     if (attrList.size() > 1)
     {
-      Message message = ERR_TASK_MULTIPLE_ATTRS_FOR_TYPE.get(
+      LocalizableMessage message = ERR_TASK_MULTIPLE_ATTRS_FOR_TYPE.get(
           attributeName, String.valueOf(taskEntry.getName()));
       throw new InitializationException(message);
     }
@@ -632,7 +633,7 @@
 
   /**
    * Sets a state for this task that is the result of a call to
-   * {@link #interruptTask(TaskState, org.opends.messages.Message)}.
+   * {@link #interruptTask(TaskState, org.opends.messages.LocalizableMessage)}.
    * It may take this task some time to actually cancel to that
    * actual state may differ until quiescence.
    *
@@ -647,7 +648,7 @@
   /**
    * Gets the interrupt state for this task that was set as a
    * result of a call to {@link #interruptTask(TaskState,
-   * org.opends.messages.Message)}.
+   * org.opends.messages.LocalizableMessage)}.
    *
    * @return interrupt state for this task
    */
@@ -660,7 +661,7 @@
   /**
    * Returns a state for this task after processing has completed.
    * If the task was interrupted with a call to
-   * {@link #interruptTask(TaskState, org.opends.messages.Message)}
+   * {@link #interruptTask(TaskState, org.opends.messages.LocalizableMessage)}
    * then that method's interruptState is returned here.  Otherwse
    * this method returns TaskState.COMPLETED_SUCCESSFULLY.  It is
    * assumed that if there were errors during task processing that
@@ -919,12 +920,12 @@
    *
    * @return  The set of messages that were logged by this task.
    */
-  public final List<Message> getLogMessages()
+  public final List<LocalizableMessage> getLogMessages()
   {
-    List<Message> msgList = new ArrayList<Message>();
+    List<LocalizableMessage> msgList = new ArrayList<LocalizableMessage>();
     for(String logString : logMessages) {
       // TODO: a better job or recreating the message
-      msgList.add(Message.raw(logString));
+      msgList.add(LocalizableMessage.raw(logString));
     }
     return Collections.unmodifiableList(msgList);
   }
@@ -939,24 +940,56 @@
    *
    * @param  message   The message to be logged.
    */
-  protected void logError(Message message)
+  protected void logError(LocalizableMessage message)
   {
     // Simply pass this on to the server error logger, and it will call back
     // to the addLogMessage method for this task.
     ErrorLogger.logError(message);
   }
 
-
-
   /**
-   * Adds a log message to the set of messages logged by this task.  This method
+   * Adds a log message to the set of messages logged by this task. This method
    * should not be called directly by tasks, but rather will be called
    * indirectly through the {@code ErrorLog.logError} methods. It does not
    * automatically persist the updated task information to disk.
    *
-   * @param  message  he log message
+   * @param message
+   *          the log message.
    */
-  public void addLogMessage(Message message)
+  // TODO : remove this method
+  public void addLogMessage(LocalizableMessage message) {
+    addLogMessage(Severity.SEVERE_ERROR, message);
+  }
+
+  /**
+   * Adds a log message to the set of messages logged by this task. This method
+   * should not be called directly by tasks, but rather will be called
+   * indirectly through the {@code ErrorLog.logError} methods. It does not
+   * automatically persist the updated task information to disk.
+   *
+   * @param severity
+   *          the severity of message.
+   * @param message
+   *          the log message.
+   */
+  public void addLogMessage(Severity severity, LocalizableMessage message) {
+    addLogMessage(severity, message, null);
+  }
+
+  /**
+   * Adds a log message to the set of messages logged by this task. This method
+   * should not be called directly by tasks, but rather will be called
+   * indirectly through the {@code ErrorLog.logError} methods. It does not
+   * automatically persist the updated task information to disk.
+   *
+   * @param severity
+   *          the severity of message.
+   * @param message
+   *          the log message.
+   * @param exception
+   *          the exception to log. May be {@code null}.
+   */
+  public void addLogMessage(Severity severity, LocalizableMessage message, Throwable exception)
   {
     // We cannot do task logging if the schema is either destroyed or
     // not initialized eg during in-core restart from Restart task.
@@ -981,14 +1014,22 @@
       buffer.append("[");
       buffer.append(TimeThread.getLocalTime());
       buffer.append("] severity=\"");
-      buffer.append(message.getDescriptor().getSeverity().name());
+      buffer.append(severity.name());
       buffer.append("\" msgCount=");
       buffer.append(logMessageCounter++);
       buffer.append(" msgID=");
-      buffer.append(message.getDescriptor().getId());
+      buffer.append(message.resourceName());
+      buffer.append("-");
+      buffer.append(message.ordinal());
       buffer.append(" message=\"");
       buffer.append(message.toString());
       buffer.append("\"");
+      if (exception != null)
+      {
+        buffer.append(" exception=\"");
+        buffer.append(StaticUtils.stackTraceToSingleLineString(exception));
+        buffer.append("\"");
+      }
 
       String messageString = buffer.toString();
       logMessages.add(messageString);
@@ -1160,7 +1201,7 @@
 
       taskState = TaskState.STOPPED_BY_ERROR;
 
-      Message message = ERR_TASK_EXECUTE_FAILED.get(
+      LocalizableMessage message = ERR_TASK_EXECUTE_FAILED.get(
           String.valueOf(taskEntry.getName()), stackTraceToSingleLineString(e));
       logError(message);
     }
@@ -1269,7 +1310,7 @@
    *                          successfully interrupted.
    * @param  interruptReason  A human-readable explanation for the cancellation.
    */
-  public void interruptTask(TaskState interruptState, Message interruptReason)
+  public void interruptTask(TaskState interruptState, LocalizableMessage interruptReason)
   {
     // No action is performed by default.
 
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 127175b..d85a4a6 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
@@ -40,7 +40,7 @@
 
 import javax.crypto.Mac;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.TaskBackendCfg;
@@ -158,12 +158,12 @@
     // We will only allow one base for task entries.
     if ((baseDNs == null) || (baseDNs.length == 0))
     {
-      Message message = ERR_TASKBE_NO_BASE_DNS.get();
+      LocalizableMessage message = ERR_TASKBE_NO_BASE_DNS.get();
       throw new ConfigException(message);
     }
     else if (baseDNs.length > 1)
     {
-      Message message = ERR_TASKBE_MULTIPLE_BASE_DNS.get();
+      LocalizableMessage message = ERR_TASKBE_MULTIPLE_BASE_DNS.get();
       throw new ConfigException(message);
     }
     else
@@ -186,7 +186,7 @@
         }
 
         // This should never happen.
-        Message message = ERR_TASKBE_CANNOT_DECODE_RECURRING_TASK_BASE_DN.get(
+        LocalizableMessage message = ERR_TASKBE_CANNOT_DECODE_RECURRING_TASK_BASE_DN.get(
             String.valueOf(recurringTaskBaseString), getExceptionMessage(e));
         throw new ConfigException(message, e);
       }
@@ -205,7 +205,7 @@
         }
 
         // This should never happen.
-        Message message = ERR_TASKBE_CANNOT_DECODE_SCHEDULED_TASK_BASE_DN.get(
+        LocalizableMessage message = ERR_TASKBE_CANNOT_DECODE_SCHEDULED_TASK_BASE_DN.get(
             String.valueOf(scheduledTaskBaseString), getExceptionMessage(e));
         throw new ConfigException(message, e);
       }
@@ -273,7 +273,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+      LocalizableMessage message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
           taskRootDN.toString(), getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -305,7 +305,7 @@
     try
     {
 
-      Message message = INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN.get();
+      LocalizableMessage message = INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN.get();
 
       taskScheduler.interruptRunningTasks(TaskState.STOPPED_BY_SHUTDOWN,
                                           message, true);
@@ -539,7 +539,7 @@
 
     if (parentDN == null)
     {
-      Message message = ERR_TASKBE_ADD_DISALLOWED_DN.
+      LocalizableMessage message = ERR_TASKBE_ADD_DISALLOWED_DN.
           get(String.valueOf(scheduledTaskParentDN),
               String.valueOf(recurringTaskParentDN));
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
@@ -564,7 +564,7 @@
     }
 
     // We won't allow the entry to be added.
-    Message message = ERR_TASKBE_ADD_DISALLOWED_DN.
+    LocalizableMessage message = ERR_TASKBE_ADD_DISALLOWED_DN.
         get(String.valueOf(scheduledTaskParentDN),
             String.valueOf(recurringTaskParentDN));
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
@@ -584,7 +584,7 @@
     DN parentDN = entryDN.getParentDNInSuffix();
     if (parentDN == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_TASKBE_DELETE_INVALID_ENTRY.get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -594,7 +594,7 @@
       Task t = taskScheduler.getScheduledTask(entryDN);
       if (t == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKBE_DELETE_NO_SUCH_TASK.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
@@ -626,7 +626,7 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKBE_DELETE_RUNNING.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -637,7 +637,7 @@
       RecurringTask rt = taskScheduler.getRecurringTask(entryDN);
       if (rt == null)
       {
-        Message message = ERR_TASKBE_DELETE_NO_SUCH_RECURRING_TASK.get(
+        LocalizableMessage message = ERR_TASKBE_DELETE_NO_SUCH_RECURRING_TASK.get(
             String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
@@ -646,7 +646,7 @@
     }
     else
     {
-      Message message =
+      LocalizableMessage message =
           ERR_TASKBE_DELETE_INVALID_ENTRY.get(String.valueOf(entryDN));
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -682,7 +682,7 @@
       DN parentDN = entryDN.getParentDNInSuffix();
       if (parentDN == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKBE_MODIFY_INVALID_ENTRY.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -692,7 +692,7 @@
         Task t = taskScheduler.getScheduledTask(entryDN);
         if (t == null)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_TASKBE_MODIFY_NO_SUCH_TASK.get(String.valueOf(entryDN));
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
         }
@@ -720,13 +720,13 @@
 
           if (acceptable)
           {
-            Message message = INFO_TASKBE_RUNNING_TASK_CANCELLED.get();
+            LocalizableMessage message = INFO_TASKBE_RUNNING_TASK_CANCELLED.get();
             t.interruptTask(TaskState.STOPPED_BY_ADMINISTRATOR, message);
             return;
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
                  ERR_TASKBE_MODIFY_RUNNING.get(String.valueOf(entryDN));
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                                          message);
@@ -758,14 +758,14 @@
             else if (newTask.getTaskState() ==
               TaskState.STOPPED_BY_ADMINISTRATOR)
             {
-              Message message = INFO_TASKBE_RUNNING_TASK_CANCELLED.get();
+              LocalizableMessage message = INFO_TASKBE_RUNNING_TASK_CANCELLED.get();
               t.interruptTask(TaskState.STOPPED_BY_ADMINISTRATOR, message);
             }
               return;
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
               ERR_TASKBE_MODIFY_RECURRING.get(String.valueOf(entryDN));
             throw new DirectoryException(
               ResultCode.UNWILLING_TO_PERFORM, message);
@@ -773,7 +773,7 @@
         }
         else
         {
-          Message message =
+          LocalizableMessage message =
               ERR_TASKBE_MODIFY_COMPLETED.get(String.valueOf(entryDN));
           throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                                        message);
@@ -782,13 +782,13 @@
       else if (parentDN.equals(recurringTaskParentDN))
       {
         // We don't currently support altering recurring tasks.
-        Message message =
+        LocalizableMessage message =
             ERR_TASKBE_MODIFY_RECURRING.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKBE_MODIFY_INVALID_ENTRY.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -864,7 +864,7 @@
                                    ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    Message message = ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_TASKBE_MODIFY_DN_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -957,7 +957,7 @@
       DN parentDN = baseDN.getParentDNInSuffix();
       if (parentDN == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKBE_SEARCH_INVALID_BASE.get(String.valueOf(baseDN));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
@@ -970,7 +970,7 @@
           Entry e = taskScheduler.getScheduledTaskEntry(baseDN);
           if (e == null)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_TASKBE_SEARCH_NO_SUCH_TASK.get(String.valueOf(baseDN));
             throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
                                          scheduledTaskParentDN, null);
@@ -999,7 +999,7 @@
           Entry e = taskScheduler.getRecurringTaskEntry(baseDN);
           if (e == null)
           {
-            Message message = ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK.get(
+            LocalizableMessage message = ERR_TASKBE_SEARCH_NO_SUCH_RECURRING_TASK.get(
                 String.valueOf(baseDN));
             throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
                                          recurringTaskParentDN, null);
@@ -1021,7 +1021,7 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKBE_SEARCH_INVALID_BASE.get(String.valueOf(baseDN));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
@@ -1138,7 +1138,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_TASKS_CANNOT_EXPORT_TO_FILE.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1157,7 +1157,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TASKS_CANNOT_EXPORT_TO_FILE.get(
+      LocalizableMessage message = ERR_TASKS_CANNOT_EXPORT_TO_FILE.get(
           stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -1181,7 +1181,7 @@
         {
           if (! le.canContinueReading())
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_TASKS_CANNOT_EXPORT_TO_FILE.get(String.valueOf(e));
             throw new DirectoryException(
                            DirectoryServer.getServerErrorResultCode(),
@@ -1251,7 +1251,7 @@
          throws DirectoryException
   {
     // This backend does not support LDIF imports.
-    Message message = ERR_TASKBE_IMPORT_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_TASKBE_IMPORT_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1330,7 +1330,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_TASKS_BACKUP_CANNOT_GET_MAC.get(
+          LocalizableMessage message = ERR_TASKS_BACKUP_CANNOT_GET_MAC.get(
               macKeyID, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
@@ -1353,7 +1353,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_TASKS_BACKUP_CANNOT_GET_DIGEST.get(
+          LocalizableMessage message = ERR_TASKS_BACKUP_CANNOT_GET_DIGEST.get(
               digestAlgorithm, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
@@ -1405,7 +1405,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TASKS_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
+      LocalizableMessage message = ERR_TASKS_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
           get(String.valueOf(filename), backupDirectory.getPath(),
               getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
@@ -1429,7 +1429,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_TASKS_BACKUP_CANNOT_GET_CIPHER.get(
+        LocalizableMessage message = ERR_TASKS_BACKUP_CANNOT_GET_CIPHER.get(
                 stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -1440,7 +1440,7 @@
     // Wrap the file output stream in a zip output stream.
     ZipOutputStream zipStream = new ZipOutputStream(outputStream);
 
-    Message message = ERR_TASKS_BACKUP_ZIP_COMMENT.get(
+    LocalizableMessage message = ERR_TASKS_BACKUP_ZIP_COMMENT.get(
             DynamicConstants.PRODUCT_NAME,
             backupID);
     zipStream.setComment(String.valueOf(message));
@@ -1592,7 +1592,7 @@
     BackupInfo backupInfo = backupDirectory.getBackupInfo(backupID);
     if (backupInfo == null)
     {
-      Message message = ERR_BACKUP_MISSING_BACKUPID.get(
+      LocalizableMessage message = ERR_BACKUP_MISSING_BACKUPID.get(
         backupDirectory.getPath(), backupID);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -1629,7 +1629,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get(
+      LocalizableMessage message = ERR_BACKUP_CANNOT_UPDATE_BACKUP_DESCRIPTOR.get(
         backupDirectory.getDescriptorPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1669,7 +1669,7 @@
 
     if (backupInfo == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_TASKS_RESTORE_NO_SUCH_BACKUP.get(backupID, backupPath);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -1681,7 +1681,7 @@
          backupInfo.getBackupProperty(BACKUP_PROPERTY_ARCHIVE_FILENAME);
     if (backupFilename == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_TASKS_RESTORE_NO_BACKUP_FILE.get(backupID, backupPath);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -1692,7 +1692,7 @@
     {
       if (! backupFile.exists())
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKS_RESTORE_NO_SUCH_FILE.get(backupID, backupFile.getPath());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
@@ -1704,7 +1704,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_TASKS_RESTORE_CANNOT_CHECK_FOR_ARCHIVE.get(
+      LocalizableMessage message = ERR_TASKS_RESTORE_CANNOT_CHECK_FOR_ARCHIVE.get(
           backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1720,7 +1720,7 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_DIGEST_ALGORITHM);
       if (digestAlgorithm == null)
       {
-        Message message = ERR_TASKS_RESTORE_UNKNOWN_DIGEST.get(backupID);
+        LocalizableMessage message = ERR_TASKS_RESTORE_UNKNOWN_DIGEST.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
       }
@@ -1732,7 +1732,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKS_RESTORE_CANNOT_GET_DIGEST.get(backupID, digestAlgorithm);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -1748,7 +1748,7 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_MAC_KEY_ID);
       if (macKeyID == null)
       {
-        Message message = ERR_TASKS_RESTORE_UNKNOWN_MAC.get(backupID);
+        LocalizableMessage message = ERR_TASKS_RESTORE_UNKNOWN_MAC.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
       }
@@ -1759,7 +1759,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_TASKS_RESTORE_CANNOT_GET_MAC.get(
+        LocalizableMessage message = ERR_TASKS_RESTORE_CANNOT_GET_MAC.get(
             backupID, macKeyID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -1775,7 +1775,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_TASKS_RESTORE_CANNOT_OPEN_BACKUP_FILE.get(
+      LocalizableMessage message = ERR_TASKS_RESTORE_CANNOT_OPEN_BACKUP_FILE.get(
           backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1792,7 +1792,7 @@
       }
       catch (CryptoManagerException e)
       {
-        Message message = ERR_TASKS_RESTORE_CANNOT_GET_CIPHER.get(
+        LocalizableMessage message = ERR_TASKS_RESTORE_CANNOT_GET_CIPHER.get(
                 backupFile.getPath(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -1816,7 +1816,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_TASKS_RESTORE_CANNOT_GET_ZIP_ENTRY.get(
+        LocalizableMessage message = ERR_TASKS_RESTORE_CANNOT_GET_ZIP_ENTRY.get(
             backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -1854,7 +1854,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_TASKS_RESTORE_CANNOT_CREATE_FILE.get(
+          LocalizableMessage message = ERR_TASKS_RESTORE_CANNOT_CREATE_FILE.get(
               backupID, filePath, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
@@ -1902,7 +1902,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_TASKS_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE.get(
+        LocalizableMessage message = ERR_TASKS_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE.get(
             backupID, fileName, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -1916,7 +1916,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_TASKS_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE.get(
+      LocalizableMessage message = ERR_TASKS_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE.get(
           backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -1930,12 +1930,12 @@
       byte[] calculatedHash = digest.digest();
       if (Arrays.equals(calculatedHash, unsignedHash))
       {
-        Message message = NOTE_TASKS_RESTORE_UNSIGNED_HASH_VALID.get();
+        LocalizableMessage message = NOTE_TASKS_RESTORE_UNSIGNED_HASH_VALID.get();
         logError(message);
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKS_RESTORE_UNSIGNED_HASH_INVALID.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
@@ -1947,12 +1947,12 @@
       byte[] calculatedSignature = mac.doFinal();
       if (Arrays.equals(calculatedSignature, signedHash))
       {
-        Message message = NOTE_TASKS_RESTORE_SIGNED_HASH_VALID.get();
+        LocalizableMessage message = NOTE_TASKS_RESTORE_SIGNED_HASH_VALID.get();
         logError(message);
       }
       else
       {
-        Message message = ERR_TASKS_RESTORE_SIGNED_HASH_INVALID.get(backupID);
+        LocalizableMessage message = ERR_TASKS_RESTORE_SIGNED_HASH_INVALID.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
       }
@@ -1961,14 +1961,14 @@
     // If we are just verifying the archive, then we're done.
     if (verifyOnly)
     {
-      Message message =
+      LocalizableMessage message =
           NOTE_TASKS_RESTORE_VERIFY_SUCCESSFUL.get(backupID, backupPath);
       logError(message);
       return;
     }
 
     // If we've gotten here, then the archive was restored successfully.
-    Message message = NOTE_TASKS_RESTORE_SUCCESSFUL.get(backupID, backupPath);
+    LocalizableMessage message = NOTE_TASKS_RESTORE_SUCCESSFUL.get(backupID, backupPath);
     logError(message);
   }
 
@@ -1979,7 +1979,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(Configuration configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     TaskBackendCfg config = (TaskBackendCfg) configuration;
     return isConfigAcceptable(config, unacceptableReasons, null);
@@ -1992,7 +1992,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(TaskBackendCfg configEntry,
-                                            List<Message> unacceptableReasons)
+                                            List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigAcceptable(configEntry, unacceptableReasons,
                               taskBackingFile);
@@ -2016,7 +2016,7 @@
    *          if not.
    */
   private static boolean isConfigAcceptable(TaskBackendCfg config,
-                                            List<Message> unacceptableReasons,
+                                            List<LocalizableMessage> unacceptableReasons,
                                             String taskBackingFile)
   {
     boolean configIsAcceptable = true;
@@ -2093,7 +2093,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     String tmpBackingFile = taskBackingFile;
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskScheduler.java b/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskScheduler.java
index 46d9c81..42b21a0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskScheduler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskScheduler.java
@@ -42,7 +42,7 @@
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AlertGenerator;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.core.DirectoryServer;
@@ -222,7 +222,7 @@
 
       if (recurringTasks.containsKey(id))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKSCHED_DUPLICATE_RECURRING_ID.get(String.valueOf(id));
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message);
       }
@@ -346,7 +346,7 @@
 
       if (tasks.containsKey(id))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_TASKSCHED_DUPLICATE_TASK_ID.get(String.valueOf(id));
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message);
       }
@@ -356,7 +356,7 @@
         Task t = tasks.get(dependencyID);
         if (t == null)
         {
-          Message message = ERR_TASKSCHED_DEPENDENCY_MISSING.get(
+          LocalizableMessage message = ERR_TASKSCHED_DEPENDENCY_MISSING.get(
             String.valueOf(id), dependencyID);
           throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
         }
@@ -477,7 +477,7 @@
       Task t = tasks.get(taskID);
       if (t == null)
       {
-        Message message = ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK.get(
+        LocalizableMessage message = ERR_TASKSCHED_REMOVE_PENDING_NO_SUCH_TASK.get(
             String.valueOf(taskID));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
@@ -491,7 +491,7 @@
       }
       else
       {
-        Message message = ERR_TASKSCHED_REMOVE_PENDING_NOT_PENDING.get(
+        LocalizableMessage message = ERR_TASKSCHED_REMOVE_PENDING_NOT_PENDING.get(
             String.valueOf(taskID));
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -533,7 +533,7 @@
         }
       }
 
-      Message message = ERR_TASKSCHED_REMOVE_COMPLETED_NO_SUCH_TASK.get(
+      LocalizableMessage message = ERR_TASKSCHED_REMOVE_COMPLETED_NO_SUCH_TASK.get(
           String.valueOf(taskID));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
     }
@@ -658,7 +658,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, de);
               }
 
-              Message message =
+              LocalizableMessage message =
                   ERR_TASKSCHED_ERROR_SCHEDULING_RECURRING_ITERATION.
                     get(recurringTaskID, de.getMessageObject());
               logError(message);
@@ -750,7 +750,7 @@
 
     for (TaskThread thread : idleThreads)
     {
-      Message message = INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN.get();
+      LocalizableMessage message = INFO_TASKBE_INTERRUPTED_BY_SHUTDOWN.get();
       thread.interruptTask(TaskState.STOPPED_BY_SHUTDOWN, message, true);
     }
   }
@@ -769,7 +769,7 @@
    *                          all active tasks have stopped before returning.
    */
   public void interruptRunningTasks(TaskState interruptState,
-                                    Message interruptReason,
+                                    LocalizableMessage interruptReason,
                                     boolean waitForStop)
   {
     // Grab a copy of the running threads so that we can operate on them without
@@ -1086,7 +1086,7 @@
 
           if (le.canContinueReading())
           {
-            Message message = ERR_TASKSCHED_CANNOT_PARSE_ENTRY_RECOVERABLE.get(
+            LocalizableMessage message = ERR_TASKSCHED_CANNOT_PARSE_ENTRY_RECOVERABLE.get(
                 backingFilePath, le.getLineNumber(), le.getMessage());
             logError(message);
 
@@ -1106,7 +1106,7 @@
               }
             }
 
-            Message message = ERR_TASKSCHED_CANNOT_PARSE_ENTRY_FATAL.get(
+            LocalizableMessage message = ERR_TASKSCHED_CANNOT_PARSE_ENTRY_FATAL.get(
                 backingFilePath, le.getLineNumber(), le.getMessage());
             throw new InitializationException(message);
           }
@@ -1135,7 +1135,7 @@
           DN parentDN = entryDN.getParentDNInSuffix();
           if (parentDN == null)
           {
-            Message message = ERR_TASKSCHED_ENTRY_HAS_NO_PARENT.
+            LocalizableMessage message = ERR_TASKSCHED_ENTRY_HAS_NO_PARENT.
                 get(String.valueOf(entryDN),
                     String.valueOf(taskBackend.getTaskRootDN()));
             logError(message);
@@ -1150,7 +1150,7 @@
                 String id = task.getTaskID();
                 if (tasks.containsKey(id))
                 {
-                  Message message =
+                  LocalizableMessage message =
                       WARN_TASKSCHED_DUPLICATE_TASK_ID.get(
                       String.valueOf(id));
                   logError(message);
@@ -1173,7 +1173,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, de);
               }
 
-              Message message = ERR_TASKSCHED_CANNOT_SCHEDULE_TASK_FROM_ENTRY.
+              LocalizableMessage message = ERR_TASKSCHED_CANNOT_SCHEDULE_TASK_FROM_ENTRY.
                   get(String.valueOf(entryDN), de.getMessageObject());
               logError(message);
             }
@@ -1192,7 +1192,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, de);
               }
 
-              Message message =
+              LocalizableMessage message =
                   ERR_TASKSCHED_CANNOT_SCHEDULE_RECURRING_TASK_FROM_ENTRY.
                     get(String.valueOf(entryDN), de.getMessageObject());
               logError(message);
@@ -1200,7 +1200,7 @@
           }
           else
           {
-            Message message = ERR_TASKSCHED_INVALID_TASK_ENTRY_DN.get(
+            LocalizableMessage message = ERR_TASKSCHED_INVALID_TASK_ENTRY_DN.get(
                 String.valueOf(entryDN), backingFilePath);
             logError(message);
           }
@@ -1216,7 +1216,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
       }
 
-      Message message = ERR_TASKSCHED_ERROR_READING_TASK_BACKING_FILE.get(
+      LocalizableMessage message = ERR_TASKSCHED_ERROR_READING_TASK_BACKING_FILE.get(
           String.valueOf(backingFilePath), stackTraceToSingleLineString(ioe));
       throw new InitializationException(message, ioe);
     }
@@ -1272,7 +1272,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
       }
 
-      Message message = ERR_TASKSCHED_CANNOT_CREATE_BACKING_FILE.get(
+      LocalizableMessage message = ERR_TASKSCHED_CANNOT_CREATE_BACKING_FILE.get(
           backingFile, stackTraceToSingleLineString(ioe));
       throw new InitializationException(message, ioe);
     }
@@ -1284,7 +1284,7 @@
       }
 
 
-      Message message = ERR_TASKSCHED_CANNOT_CREATE_BACKING_FILE.get(
+      LocalizableMessage message = ERR_TASKSCHED_CANNOT_CREATE_BACKING_FILE.get(
           backingFile, le.getMessage());
       throw new InitializationException(message, le);
     }
@@ -1372,7 +1372,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE.
+        LocalizableMessage message = WARN_TASKSCHED_CANNOT_RENAME_CURRENT_BACKING_FILE.
             get(String.valueOf(backingFilePath),
                 String.valueOf(saveFile.getAbsolutePath()),
                 stackTraceToSingleLineString(e));
@@ -1397,7 +1397,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE.
+        LocalizableMessage message = ERR_TASKSCHED_CANNOT_RENAME_NEW_BACKING_FILE.
             get(String.valueOf(tmpFilePath), String.valueOf(backingFilePath),
                 stackTraceToSingleLineString(e));
         logError(message);
@@ -1414,7 +1414,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
       }
 
-      Message message = ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE.get(
+      LocalizableMessage message = ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE.get(
           tmpFilePath, stackTraceToSingleLineString(ioe));
       logError(message);
       DirectoryServer.sendAlertNotification(this,
@@ -1428,7 +1428,7 @@
       }
 
 
-      Message message = ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE.get(
+      LocalizableMessage message = ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE.get(
           tmpFilePath, le.getMessage());
       logError(message);
       DirectoryServer.sendAlertNotification(this,
@@ -1441,7 +1441,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE.get(
+      LocalizableMessage message = ERR_TASKSCHED_CANNOT_WRITE_BACKING_FILE.get(
           tmpFilePath, stackTraceToSingleLineString(e));
       logError(message);
       DirectoryServer.sendAlertNotification(this,
@@ -1972,20 +1972,20 @@
     List<Attribute> attrList = entry.getAttribute(attrType);
     if ((attrList == null) || attrList.isEmpty())
     {
-      Message message = ERR_TASKSCHED_NO_CLASS_ATTRIBUTE.get(ATTR_TASK_ID);
+      LocalizableMessage message = ERR_TASKSCHED_NO_CLASS_ATTRIBUTE.get(ATTR_TASK_ID);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     if (attrList.size() > 1)
     {
-      Message message = ERR_TASKSCHED_MULTIPLE_CLASS_TYPES.get(ATTR_TASK_ID);
+      LocalizableMessage message = ERR_TASKSCHED_MULTIPLE_CLASS_TYPES.get(ATTR_TASK_ID);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     Attribute attr = attrList.get(0);
     if (attr.isEmpty())
     {
-      Message message = ERR_TASKSCHED_NO_CLASS_VALUES.get(ATTR_TASK_ID);
+      LocalizableMessage message = ERR_TASKSCHED_NO_CLASS_VALUES.get(ATTR_TASK_ID);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
@@ -1993,7 +1993,7 @@
     AttributeValue value = iterator.next();
     if (iterator.hasNext())
     {
-      Message message = ERR_TASKSCHED_MULTIPLE_CLASS_VALUES.get(ATTR_TASK_ID);
+      LocalizableMessage message = ERR_TASKSCHED_MULTIPLE_CLASS_VALUES.get(ATTR_TASK_ID);
       throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
     }
 
@@ -2011,7 +2011,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TASKSCHED_CANNOT_LOAD_CLASS.
+      LocalizableMessage message = ERR_TASKSCHED_CANNOT_LOAD_CLASS.
           get(String.valueOf(taskClassName), ATTR_TASK_CLASS,
               stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
@@ -2031,7 +2031,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_TASKSCHED_CANNOT_INSTANTIATE_CLASS_AS_TASK.get(
+      LocalizableMessage message = ERR_TASKSCHED_CANNOT_INSTANTIATE_CLASS_AS_TASK.get(
           String.valueOf(taskClassName), Task.class.getName());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -2049,14 +2049,14 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
 
-      Message message = ERR_TASKSCHED_CANNOT_INITIALIZE_INTERNAL.get(
+      LocalizableMessage message = ERR_TASKSCHED_CANNOT_INITIALIZE_INTERNAL.get(
           String.valueOf(taskClassName), ie.getMessage());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
     catch (Exception e)
     {
-      Message message = ERR_TASKSCHED_CANNOT_INITIALIZE_INTERNAL.get(
+      LocalizableMessage message = ERR_TASKSCHED_CANNOT_INITIALIZE_INTERNAL.get(
           String.valueOf(taskClassName), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -2065,7 +2065,7 @@
     if (!TaskState.isDone(task.getTaskState()) &&
         !DirectoryServer.getAllowedTasks().contains(taskClassName))
     {
-      Message message = ERR_TASKSCHED_NOT_ALLOWED_TASK.get(taskClassName);
+      LocalizableMessage message = ERR_TASKSCHED_NOT_ALLOWED_TASK.get(taskClassName);
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskState.java b/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskState.java
index b1c4c61..bc5d27f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskState.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskState.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.backends.task;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.TaskMessages.*;
 
 
@@ -339,18 +340,18 @@
     }
   }
 
-  private Message displayName;
+  private LocalizableMessage displayName;
 
   /**
    * Gets a locale sensitive representation of this state.
    *
-   * @return Message describing state
+   * @return LocalizableMessage describing state
    */
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return displayName;
   }
 
-  private TaskState(Message displayName) {
+  private TaskState(LocalizableMessage displayName) {
     this.displayName = displayName;
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskThread.java b/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskThread.java
index 5ec235c..9f54904 100644
--- a/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskThread.java
+++ b/opendj3-server-dev/src/server/org/opends/server/backends/task/TaskThread.java
@@ -28,7 +28,7 @@
 
 import java.util.Map;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
@@ -134,7 +134,7 @@
    * @param  exitThread       Indicates whether this thread should exit when
    *                          processing on the active task has completed.
    */
-  public void interruptTask(TaskState interruptState, Message interruptReason,
+  public void interruptTask(TaskState interruptState, LocalizableMessage interruptReason,
                             boolean exitThread)
   {
     if (getAssociatedTask() != null)
@@ -196,7 +196,7 @@
         {
           Task task = getAssociatedTask();
 
-          Message message = NOTE_TASK_STARTED.get(
+          LocalizableMessage message = NOTE_TASK_STARTED.get(
             task.getDisplayName(), task.getTaskID());
           logError(message);
 
@@ -216,7 +216,7 @@
 
         Task task = getAssociatedTask();
 
-        Message message = ERR_TASK_EXECUTE_FAILED.
+        LocalizableMessage message = ERR_TASK_EXECUTE_FAILED.
             get(String.valueOf(task.getTaskEntry().getName()),
                 stackTraceToSingleLineString(e));
         logError(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/BooleanConfigAttribute.java b/opendj3-server-dev/src/server/org/opends/server/config/BooleanConfigAttribute.java
index 995b26a..ee74fc4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/BooleanConfigAttribute.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/BooleanConfigAttribute.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.config;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -85,7 +85,7 @@
    *                              configuration attribute require administrative
    *                              action before they will take effect.
    */
-  public BooleanConfigAttribute(String name, Message description,
+  public BooleanConfigAttribute(String name, LocalizableMessage description,
                                 boolean requiresAdminAction)
   {
     super(name, description, true, false, requiresAdminAction);
@@ -107,7 +107,7 @@
    * @param  value                The value for this Boolean configuration
    *                              attribute.
    */
-  public BooleanConfigAttribute(String name, Message description,
+  public BooleanConfigAttribute(String name, LocalizableMessage description,
                                 boolean requiresAdminAction,
                                 boolean value)
   {
@@ -135,7 +135,7 @@
    * @param  pendingValue         The pending value for this Boolean
    *                              configuration attribute.
    */
-  public BooleanConfigAttribute(String name, Message description,
+  public BooleanConfigAttribute(String name, LocalizableMessage description,
                                 boolean requiresAdminAction,
                                 boolean activeValue, boolean pendingValue)
   {
@@ -331,7 +331,7 @@
   {
     if ((valueStrings == null) || valueStrings.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
       throw new ConfigException(message);
     }
 
@@ -340,7 +340,7 @@
     String valueString = iterator.next().toLowerCase();
     if (iterator.hasNext())
     {
-      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
       throw new ConfigException(message);
     }
 
@@ -356,7 +356,7 @@
     }
     else
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(getName(), valueString);
       throw new ConfigException(message);
     }
@@ -451,7 +451,7 @@
           if (pendingValueSet)
           {
             // We cannot have multiple pending values.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
             throw new ConfigException(message);
           }
@@ -460,7 +460,7 @@
           if (a.isEmpty())
           {
             // This is illegal -- it must have a value.
-            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
             throw new ConfigException(message);
           }
           else
@@ -485,7 +485,7 @@
             else
             {
               // This is an illegal value.
-              Message message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(
+              LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(
                   getName(), valueString);
               throw new ConfigException(message);
             }
@@ -493,7 +493,7 @@
             if (iterator.hasNext())
             {
               // This is illegal -- it must be single-valued.
-              Message message =
+              LocalizableMessage message =
                   ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
               throw new ConfigException(message);
             }
@@ -503,7 +503,7 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName());
           throw new ConfigException(message);
         }
@@ -514,7 +514,7 @@
         if (activeValueSet)
         {
           // We cannot have multiple active values.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
           throw new ConfigException(message);
         }
@@ -523,7 +523,7 @@
         if (a.isEmpty())
         {
           // This is illegal -- it must have a value.
-          Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+          LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
           throw new ConfigException(message);
         }
         else
@@ -548,7 +548,7 @@
           else
           {
             // This is an illegal value.
-            Message message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(
+            LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(
                 getName(), valueString);
             throw new ConfigException(message);
           }
@@ -556,7 +556,7 @@
           if (iterator.hasNext())
           {
             // This is illegal -- it must be single-valued.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
             throw new ConfigException(message);
           }
@@ -567,7 +567,7 @@
     if (! activeValueSet)
     {
       // This is not OK.  The value set must contain an active value.
-      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
       throw new ConfigException(message);
     }
 
@@ -720,14 +720,14 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(getName(), stringValue);
         throw new ConfigException(message);
       }
     }
     else
     {
-      Message message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(
           getName(), value.getClass().getName() + ":" +
                                        String.valueOf(value));
       throw new ConfigException(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/ConfigAttribute.java b/opendj3-server-dev/src/server/org/opends/server/config/ConfigAttribute.java
index 4cd8ff5..66f55bca 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/ConfigAttribute.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/ConfigAttribute.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.config;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -75,7 +76,7 @@
   private LinkedHashSet<AttributeValue> pendingValues;
 
   // The description for this configuration attribute.
-  private Message description;
+  private LocalizableMessage description;
 
   // The name for this configuration attribute.
   private String name;
@@ -98,7 +99,7 @@
    *                              configuration attribute require administrative
    *                              action before they will take effect.
    */
-  protected ConfigAttribute(String name, Message description,
+  protected ConfigAttribute(String name, LocalizableMessage description,
                             boolean isRequired, boolean isMultiValued,
                             boolean requiresAdminAction)
   {
@@ -131,7 +132,7 @@
    * @param  activeValues         The set of values for this attribute that are
    *                              currently active.
    */
-  protected ConfigAttribute(String name, Message description,
+  protected ConfigAttribute(String name, LocalizableMessage description,
                             boolean isRequired, boolean isMultiValued,
                             boolean requiresAdminAction,
                             LinkedHashSet<AttributeValue> activeValues)
@@ -181,7 +182,7 @@
    *                              <CODE>null</CODE> if changes will take effect
    *                              immediately.
    */
-  protected ConfigAttribute(String name, Message description,
+  protected ConfigAttribute(String name, LocalizableMessage description,
                             boolean isRequired, boolean isMultiValued,
                             boolean requiresAdminAction,
                             LinkedHashSet<AttributeValue> activeValues,
@@ -241,7 +242,7 @@
    * @return  The description for this configuration attribute, or
    *          <CODE>null</CODE> if there is no description.
    */
-  public Message getDescription()
+  public LocalizableMessage getDescription()
   {
     return description;
   }
@@ -402,7 +403,7 @@
     {
       if (isRequired)
       {
-        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(name);
+        LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(name);
         throw new ConfigException(message);
       }
       else
@@ -447,7 +448,7 @@
 
     if (! valueIsAcceptable(value, rejectReason))
     {
-      Message message = ERR_CONFIG_ATTR_REJECTED_VALUE.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_REJECTED_VALUE.get(
           value.getValue().toString(), name, rejectReason.toString());
       throw new ConfigException(message);
     }
@@ -457,7 +458,7 @@
     // provided, then reject it.
     if ((! isMultiValued) && iterator.hasNext())
     {
-      Message message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(name);
+      LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(name);
       throw new ConfigException(message);
     }
 
@@ -468,7 +469,7 @@
       value = iterator.next();
       if (! valueIsAcceptable(value, rejectReason))
       {
-        Message message = ERR_CONFIG_ATTR_REJECTED_VALUE.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_REJECTED_VALUE.get(
             value.getValue().toString(), name, rejectReason.toString());
         throw new ConfigException(message);
       }
@@ -557,7 +558,7 @@
       if ((numValues > 1) || (hasPendingValues && (pendingValues.size() > 0)) ||
           ((! hasPendingValues) && (activeValues.size() > 0)))
       {
-        Message message = ERR_CONFIG_ATTR_ADD_VALUES_IS_SINGLE_VALUED.get(name);
+        LocalizableMessage message = ERR_CONFIG_ATTR_ADD_VALUES_IS_SINGLE_VALUED.get(name);
         throw new ConfigException(message);
       }
     }
@@ -587,14 +588,14 @@
     {
       if (tempValues.contains(value))
       {
-        Message message = ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(
             name, value.getValue().toString());
         throw new ConfigException(message);
       }
 
       if (! valueIsAcceptable(value, rejectReason))
       {
-        Message message = ERR_CONFIG_ATTR_REJECTED_VALUE.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_REJECTED_VALUE.get(
             value.getValue().toString(), name, rejectReason.toString());
         throw new ConfigException(message);
       }
@@ -655,7 +656,7 @@
     {
       if (! tempValues.remove(value))
       {
-        Message message =
+        LocalizableMessage message =
            ERR_CONFIG_ATTR_NO_SUCH_VALUE.get(name, value.getValue().toString());
         throw new ConfigException(message);
       }
@@ -666,7 +667,7 @@
     // least one value.
     if (isRequired && tempValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(name);
+      LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(name);
       throw new ConfigException(message);
     }
 
@@ -699,7 +700,7 @@
   {
     if (isRequired)
     {
-      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(name);
+      LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(name);
       throw new ConfigException(message);
     }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/ConfigEntry.java b/opendj3-server-dev/src/server/org/opends/server/config/ConfigEntry.java
index 31db274..9234d9c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/ConfigEntry.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/ConfigEntry.java
@@ -32,7 +32,7 @@
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.ConfigAddListener;
 import org.opends.server.api.ConfigChangeListener;
 import org.opends.server.api.ConfigDeleteListener;
@@ -349,7 +349,7 @@
 
     if (conflictingChild != null)
     {
-      Message message = ERR_CONFIG_ENTRY_CONFLICTING_CHILD.get(
+      LocalizableMessage message = ERR_CONFIG_ENTRY_CONFLICTING_CHILD.get(
           conflictingChild.getDN().toString(), entry.getName().toString());
       throw new ConfigException(message);
     }
@@ -381,14 +381,14 @@
         ConfigEntry childEntry = children.get(childDN);
         if (childEntry == null)
         {
-          Message message = ERR_CONFIG_ENTRY_NO_SUCH_CHILD.get(
+          LocalizableMessage message = ERR_CONFIG_ENTRY_NO_SUCH_CHILD.get(
               childDN.toString(), entry.getName().toString());
           throw new ConfigException(message);
         }
 
         if (childEntry.hasChildren())
         {
-          Message message = ERR_CONFIG_ENTRY_CANNOT_REMOVE_NONLEAF.get(
+          LocalizableMessage message = ERR_CONFIG_ENTRY_CANNOT_REMOVE_NONLEAF.get(
               childDN.toString(), entry.getName().toString());
           throw new ConfigException(message);
         }
@@ -407,7 +407,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_ENTRY_CANNOT_REMOVE_CHILD.
+        LocalizableMessage message = ERR_CONFIG_ENTRY_CANNOT_REMOVE_CHILD.
             get(String.valueOf(childDN), String.valueOf(entry.getName()),
                 stackTraceToSingleLineString(e));
         throw new ConfigException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/ConfigException.java b/opendj3-server-dev/src/server/org/opends/server/config/ConfigException.java
index c6c86b5..a650e0e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/ConfigException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/ConfigException.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.config;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -62,7 +63,7 @@
    *
    * @param  message    The message to use for this configuration exception.
    */
-  public ConfigException(Message message)
+  public ConfigException(LocalizableMessage message)
   {
     super(message);
   }
@@ -77,7 +78,7 @@
    * @param  cause      The underlying cause that triggered this configuration
    *                    exception.
    */
-  public ConfigException(Message message, Throwable cause)
+  public ConfigException(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
   }
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 094d2cc..70388c0 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.config;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -91,7 +91,7 @@
    *                              configuration attribute require administrative
    *                              action before they will take effect.
    */
-  public DNConfigAttribute(String name, Message description, boolean isRequired,
+  public DNConfigAttribute(String name, LocalizableMessage description, boolean isRequired,
                            boolean isMultiValued, boolean requiresAdminAction)
   {
     super(name, description, isRequired, isMultiValued, requiresAdminAction);
@@ -119,7 +119,7 @@
    *                              action before they will take effect.
    * @param  value                The value for this DN configuration attribute.
    */
-  public DNConfigAttribute(String name, Message description, boolean isRequired,
+  public DNConfigAttribute(String name, LocalizableMessage description, boolean isRequired,
                            boolean isMultiValued, boolean requiresAdminAction,
                            DN value)
   {
@@ -159,7 +159,7 @@
    * @param  values               The set of values for this configuration
    *                              attribute.
    */
-  public DNConfigAttribute(String name, Message description, boolean isRequired,
+  public DNConfigAttribute(String name, LocalizableMessage description, boolean isRequired,
                            boolean isMultiValued, boolean requiresAdminAction,
                            List<DN> values)
   {
@@ -200,7 +200,7 @@
    * @param  pendingValues        The set of pending values for this
    *                              configuration attribute.
    */
-  public DNConfigAttribute(String name, Message description, boolean isRequired,
+  public DNConfigAttribute(String name, LocalizableMessage description, boolean isRequired,
                            boolean isMultiValued, boolean requiresAdminAction,
                            List<DN> activeValues, List<DN> pendingValues)
   {
@@ -271,13 +271,13 @@
   {
     if ((activeValues == null) || activeValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (activeValues.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -319,13 +319,13 @@
 
     if ((pendingValues == null) || pendingValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (pendingValues.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -365,7 +365,7 @@
   {
     if (value == null)
     {
-      Message message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
       throw new ConfigException(message);
     }
 
@@ -402,7 +402,7 @@
     {
       if (isRequired())
       {
-        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
         throw new ConfigException(message);
       }
       else
@@ -425,7 +425,7 @@
     int numValues = values.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
       throw new ConfigException(message);
     }
@@ -439,7 +439,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
         throw new ConfigException(message);
       }
 
@@ -449,7 +449,7 @@
 
       if (valueSet.contains(attrValue))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(
                     getName(), String.valueOf(value));
         throw new ConfigException(message);
@@ -622,7 +622,7 @@
     {
       if (isRequired())
       {
-        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
         throw new ConfigException(message);
       }
       else
@@ -635,7 +635,7 @@
     int numValues = valueStrings.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
       throw new ConfigException(message);
     }
@@ -647,7 +647,7 @@
     {
       if (valueString == null)
       {
-        Message message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
         if (allowFailures)
         {
           ErrorLogger.logError(message);
@@ -672,7 +672,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
                 valueString, getName(),
                 String.valueOf(e));
 
@@ -698,7 +698,7 @@
     // attribute and if so deal with it accordingly.
     if ((isRequired()) && valueSet.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
       throw new ConfigException(message);
     }
 
@@ -800,7 +800,7 @@
           if (pendingValues != null)
           {
             // We cannot have multiple pending value sets.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
             throw new ConfigException(message);
           }
@@ -811,7 +811,7 @@
             if (isRequired())
             {
               // This is illegal -- it must have a value.
-              Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+              LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
               throw new ConfigException(message);
             }
             else
@@ -826,7 +826,7 @@
             if ((numValues > 1) && (! isMultiValued()))
             {
               // This is illegal -- the attribute is single-valued.
-              Message message =
+              LocalizableMessage message =
                   ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
               throw new ConfigException(message);
             }
@@ -846,7 +846,7 @@
                   TRACER.debugCaught(DebugLogLevel.ERROR, e);
                 }
 
-                Message message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+                LocalizableMessage message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
                     v.getValue().toString(), getName(), String.valueOf(e));
                 throw new ConfigException(message, e);
               }
@@ -859,7 +859,7 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName());
           throw new ConfigException(message);
         }
@@ -870,7 +870,7 @@
         if (activeValues!= null)
         {
           // We cannot have multiple active value sets.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
           throw new ConfigException(message);
         }
@@ -881,7 +881,7 @@
           if (isRequired())
           {
             // This is illegal -- it must have a value.
-            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
             throw new ConfigException(message);
           }
           else
@@ -896,7 +896,7 @@
           if ((numValues > 1) && (! isMultiValued()))
           {
             // This is illegal -- the attribute is single-valued.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
             throw new ConfigException(message);
           }
@@ -916,7 +916,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              Message message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+              LocalizableMessage message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
                   v.getValue().toString(), getName(), String.valueOf(e));
               throw new ConfigException(message, e);
             }
@@ -930,7 +930,7 @@
     if (activeValues == null)
     {
       // This is not OK.  The value set must contain an active value.
-      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
       throw new ConfigException(message);
     }
 
@@ -1188,7 +1188,7 @@
     Object value = jmxAttribute.getValue();
     if (value == null)
     {
-      Message message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_DN_NULL.get(getName());
       throw new ConfigException(message);
     }
     else if (value instanceof DN)
@@ -1209,7 +1209,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
             (String) value, getName(), String.valueOf(e));
         throw new ConfigException(message, e);
       }
@@ -1253,7 +1253,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              Message message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
+              LocalizableMessage message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(
                   valueStr, getName(), String.valueOf(e));
               throw new ConfigException(message, e);
             }
@@ -1279,14 +1279,14 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_CONFIG_ATTR_INVALID_DN_VALUE.get(
+          LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_DN_VALUE.get(
               getName(), String.valueOf(value), String.valueOf(e));
           throw new ConfigException(message, e);
         }
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_ATTR_DN_INVALID_ARRAY_TYPE.get(
                     String.valueOf(jmxAttribute),
                     String.valueOf(componentType));
@@ -1295,7 +1295,7 @@
     }
     else
     {
-      Message message = ERR_CONFIG_ATTR_DN_INVALID_TYPE.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_DN_INVALID_TYPE.get(
           String.valueOf(value), getName(), value.getClass().getName());
       throw new ConfigException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/IntegerConfigAttribute.java b/opendj3-server-dev/src/server/org/opends/server/config/IntegerConfigAttribute.java
index fa11660..117fd5e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/IntegerConfigAttribute.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/IntegerConfigAttribute.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.config;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -113,7 +113,7 @@
    * @param  upperBound           The upper bound that will be enforced for
    *                              values of this attribute.
    */
-  public IntegerConfigAttribute(String name, Message description,
+  public IntegerConfigAttribute(String name, LocalizableMessage description,
                                 boolean isRequired, boolean isMultiValued,
                                 boolean requiresAdminAction,
                                 boolean hasLowerBound, long lowerBound,
@@ -158,7 +158,7 @@
    * @param  value                The value for this integer configuration
    *                              attribute.
    */
-  public IntegerConfigAttribute(String name, Message description,
+  public IntegerConfigAttribute(String name, LocalizableMessage description,
                                 boolean isRequired, boolean isMultiValued,
                                 boolean requiresAdminAction,
                                 boolean hasLowerBound, long lowerBound,
@@ -207,7 +207,7 @@
    * @param  values               The set of values for this configuration
    *                              attribute.
    */
-  public IntegerConfigAttribute(String name, Message description,
+  public IntegerConfigAttribute(String name, LocalizableMessage description,
                                 boolean isRequired, boolean isMultiValued,
                                 boolean requiresAdminAction,
                                 boolean hasLowerBound, long lowerBound,
@@ -264,7 +264,7 @@
    * @param  pendingValues        The set of pending values for this
    *                              configuration attribute.
    */
-  public IntegerConfigAttribute(String name, Message description,
+  public IntegerConfigAttribute(String name, LocalizableMessage description,
                                 boolean isRequired, boolean isMultiValued,
                                 boolean requiresAdminAction,
                                 boolean hasLowerBound, long lowerBound,
@@ -344,13 +344,13 @@
   {
     if ((activeValues == null) || activeValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (activeValues.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -376,13 +376,13 @@
   {
     if ((activeValues == null) || activeValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (activeValues.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -394,7 +394,7 @@
     }
     else
     {
-      Message message = ERR_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE.get(getName());
       throw new ConfigException(message);
     }
   }
@@ -434,13 +434,13 @@
 
     if ((pendingValues == null) || pendingValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (pendingValues.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -472,13 +472,13 @@
 
     if ((pendingValues == null) || pendingValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (pendingValues.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_INT_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -490,7 +490,7 @@
     }
     else
     {
-      Message message = ERR_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_VALUE_OUT_OF_INT_RANGE.get(getName());
       throw new ConfigException(message);
     }
   }
@@ -584,14 +584,14 @@
   {
     if (hasLowerBound && (value < lowerBound))
     {
-      Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
           getName(), value, lowerBound);
       throw new ConfigException(message);
     }
 
     if (hasUpperBound && (value > upperBound))
     {
-      Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
           getName(), value, upperBound);
       throw new ConfigException(message);
     }
@@ -629,7 +629,7 @@
     {
       if (isRequired())
       {
-        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
         throw new ConfigException(message);
       }
       else
@@ -652,7 +652,7 @@
     int numValues = values.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
       throw new ConfigException(message);
     }
@@ -666,14 +666,14 @@
     {
       if (hasLowerBound && (value < lowerBound))
       {
-        Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
             getName(), value, lowerBound);
         throw new ConfigException(message);
       }
 
       if (hasUpperBound && (value > upperBound))
       {
-        Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
             getName(), value, upperBound);
         throw new ConfigException(message);
       }
@@ -685,7 +685,7 @@
 
       if (valueSet.contains(attrValue))
       {
-        Message message = ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(
             getName(), valueString);
         throw new ConfigException(message);
       }
@@ -863,7 +863,7 @@
     {
       if (isRequired())
       {
-        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
         throw new ConfigException(message);
       }
       else
@@ -876,7 +876,7 @@
     int numValues = valueStrings.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
       throw new ConfigException(message);
     }
@@ -898,7 +898,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
                 valueString, getName(),
                 String.valueOf(e));
 
@@ -917,7 +917,7 @@
       if (hasLowerBound && (longValue < lowerBound))
       {
 
-        Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
                 getName(), longValue, lowerBound);
         if (allowFailures)
         {
@@ -933,7 +933,7 @@
 
       if (hasUpperBound && (longValue > upperBound))
       {
-        Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
                 getName(), longValue, upperBound);
 
         if (allowFailures)
@@ -958,7 +958,7 @@
     // attribute and if so deal with it accordingly.
     if ((isRequired()) && valueSet.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
       throw new ConfigException(message);
     }
 
@@ -1061,7 +1061,7 @@
           if (pendingValues != null)
           {
             // We cannot have multiple pending value sets.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
             throw new ConfigException(message);
           }
@@ -1072,7 +1072,7 @@
             if (isRequired())
             {
               // This is illegal -- it must have a value.
-              Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+              LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
               throw new ConfigException(message);
             }
             else
@@ -1087,7 +1087,7 @@
             if ((numValues > 1) && (! isMultiValued()))
             {
               // This is illegal -- the attribute is single-valued.
-              Message message =
+              LocalizableMessage message =
                   ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
               throw new ConfigException(message);
             }
@@ -1102,7 +1102,7 @@
               }
               catch (Exception e)
               {
-                Message message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+                LocalizableMessage message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
                     v.getValue().toString(), a.getName(), String.valueOf(e));
                 throw new ConfigException(message, e);
               }
@@ -1111,14 +1111,14 @@
               // Check the bounds set for this attribute.
               if (hasLowerBound && (longValue < lowerBound))
               {
-                Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+                LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
                     a.getName(), longValue, lowerBound);
                 throw new ConfigException(message);
               }
 
               if (hasUpperBound && (longValue > upperBound))
               {
-                Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+                LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
                     a.getName(), longValue, upperBound);
                 throw new ConfigException(message);
               }
@@ -1131,7 +1131,7 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(
                       a.getName());
           throw new ConfigException(message);
@@ -1143,7 +1143,7 @@
         if (activeValues!= null)
         {
           // We cannot have multiple active value sets.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
           throw new ConfigException(message);
         }
@@ -1154,7 +1154,7 @@
           if (isRequired())
           {
             // This is illegal -- it must have a value.
-            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
             throw new ConfigException(message);
           }
           else
@@ -1169,7 +1169,7 @@
           if ((numValues > 1) && (! isMultiValued()))
           {
             // This is illegal -- the attribute is single-valued.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
             throw new ConfigException(message);
           }
@@ -1184,7 +1184,7 @@
             }
             catch (Exception e)
             {
-              Message message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+              LocalizableMessage message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
                   v.getValue().toString(), a.getName(), String.valueOf(e));
               throw new ConfigException(message, e);
             }
@@ -1193,14 +1193,14 @@
             // Check the bounds set for this attribute.
             if (hasLowerBound && (longValue < lowerBound))
             {
-              Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+              LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
                   a.getName(), longValue, lowerBound);
               throw new ConfigException(message);
             }
 
             if (hasUpperBound && (longValue > upperBound))
             {
-              Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+              LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
                   a.getName(), longValue, upperBound);
               throw new ConfigException(message);
             }
@@ -1214,7 +1214,7 @@
     if (activeValues == null)
     {
       // This is not OK.  The value set must contain an active value.
-      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
       throw new ConfigException(message);
     }
 
@@ -1494,7 +1494,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
             String.valueOf(value), getName(), String.valueOf(e));
         throw new ConfigException(message, e);
       }
@@ -1542,7 +1542,7 @@
         }
         else
         {
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_INT_INVALID_ARRAY_TYPE.get(
                       jmxAttribute.getName(), componentType);
           throw new ConfigException(message);
@@ -1564,14 +1564,14 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(
             componentType + "[" + length + "]", getName(), String.valueOf(e));
         throw new ConfigException(message, e);
       }
     }
     else
     {
-      Message message = ERR_CONFIG_ATTR_INT_INVALID_TYPE.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_INT_INVALID_TYPE.get(
           String.valueOf(value), getName(), value.getClass().getName());
       throw new ConfigException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/IntegerWithUnitConfigAttribute.java b/opendj3-server-dev/src/server/org/opends/server/config/IntegerWithUnitConfigAttribute.java
index 44e09c3..769a910 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/IntegerWithUnitConfigAttribute.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/IntegerWithUnitConfigAttribute.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.config;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -135,7 +135,7 @@
    *                              enforced for the calculated value.
    * @param  upperBound           The upper bound for the calculated value.
    */
-  public IntegerWithUnitConfigAttribute(String name, Message description,
+  public IntegerWithUnitConfigAttribute(String name, LocalizableMessage description,
                                         boolean requiresAdminAction,
                                         HashMap<String,Double> units,
                                         boolean hasLowerBound, long lowerBound,
@@ -177,7 +177,7 @@
    * @param  selectedUnit         The selected unit for this configuration
    *                              attribute.
    */
-  public IntegerWithUnitConfigAttribute(String name, Message description,
+  public IntegerWithUnitConfigAttribute(String name, LocalizableMessage description,
                                         boolean requiresAdminAction,
                                         HashMap<String,Double> units,
                                         boolean hasLowerBound, long lowerBound,
@@ -238,7 +238,7 @@
    * @param  pendingSelectedUnit  The pending selected unit for this
    *                              configuration attribute.
    */
-  public IntegerWithUnitConfigAttribute(String name, Message description,
+  public IntegerWithUnitConfigAttribute(String name, LocalizableMessage description,
                                         boolean requiresAdminAction,
                                         HashMap<String,Double> units,
                                         boolean hasLowerBound, long lowerBound,
@@ -508,7 +508,7 @@
   {
     if ((unit == null) || (! units.containsKey(unit)))
     {
-      Message message = ERR_CONFIG_ATTR_INVALID_UNIT.get(unit, getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_UNIT.get(unit, getName());
       throw new ConfigException(message);
     }
 
@@ -516,14 +516,14 @@
     long calculatedValue = (long) (intValue * units.get(unit));
     if (hasLowerBound && (calculatedValue < lowerBound))
     {
-      Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
           getName(), calculatedValue, lowerBound);
       throw new ConfigException(message);
     }
 
     if (hasUpperBound && (calculatedValue > upperBound))
     {
-      Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
           getName(), calculatedValue, upperBound);
       throw new ConfigException(message);
     }
@@ -561,7 +561,7 @@
     int spacePos = value.indexOf(' ');
     if (spacePos <= 0)
     {
-      Message message = ERR_CONFIG_ATTR_NO_UNIT_DELIMITER.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_UNIT_DELIMITER.get(
           String.valueOf(value), getName());
       throw new ConfigException(message);
     }
@@ -579,7 +579,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.get(
           String.valueOf(value), getName(), String.valueOf(e));
       throw new ConfigException(message, e);
     }
@@ -773,7 +773,7 @@
     {
       if (isRequired())
       {
-        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
         throw new ConfigException(message);
       }
       else
@@ -786,7 +786,7 @@
     int numValues = valueStrings.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
       throw new ConfigException(message);
     }
@@ -798,7 +798,7 @@
     {
       if ((valueString == null) || (valueString.length() == 0))
       {
-        Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
         if (allowFailures)
         {
           ErrorLogger.logError(message);
@@ -814,7 +814,7 @@
       StringBuilder rejectReason = new StringBuilder();
       if (! valueIsAcceptable(valueString.toLowerCase(), rejectReason))
       {
-        Message message = ERR_CONFIG_ATTR_INVALID_VALUE_WITH_UNIT.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_VALUE_WITH_UNIT.get(
                 valueString, getName(),
                 rejectReason.toString());
 
@@ -840,7 +840,7 @@
     // attribute and if so deal with it accordingly.
     if ((isRequired()) && valueSet.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
       throw new ConfigException(message);
     }
 
@@ -937,7 +937,7 @@
           if (pendingUnit != null)
           {
             // We cannot have multiple pending value sets.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
             throw new ConfigException(message);
           }
@@ -946,7 +946,7 @@
           if (a.isEmpty())
           {
             // This is illegal -- it must have a value.
-            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
             throw new ConfigException(message);
           }
           else
@@ -958,7 +958,7 @@
             if (iterator.hasNext())
             {
               // This is illegal -- the attribute is single-valued.
-              Message message =
+              LocalizableMessage message =
                   ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
               throw new ConfigException(message);
             }
@@ -972,7 +972,7 @@
             }
             catch (Exception e)
             {
-              Message message = ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.
+              LocalizableMessage message = ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.
                   get(valueString, a.getName(), String.valueOf(e));
               throw new ConfigException(message);
             }
@@ -982,7 +982,7 @@
             // multiplier.
             if (! units.containsKey(pendingUnit))
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_CONFIG_ATTR_INVALID_UNIT.get(pendingUnit, a.getName());
               throw new ConfigException(message);
             }
@@ -994,14 +994,14 @@
             // Check the bounds set for this attribute.
             if (hasLowerBound && (pendingCalculatedValue < lowerBound))
             {
-              Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+              LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
                   a.getName(), pendingCalculatedValue, lowerBound);
               throw new ConfigException(message);
             }
 
             if (hasUpperBound && (pendingCalculatedValue > upperBound))
             {
-              Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+              LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
                   a.getName(), pendingCalculatedValue, upperBound);
               throw new ConfigException(message);
             }
@@ -1011,7 +1011,7 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName());
           throw new ConfigException(message);
         }
@@ -1022,7 +1022,7 @@
         if (activeUnit != null)
         {
           // We cannot have multiple active value sets.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
           throw new ConfigException(message);
         }
@@ -1031,7 +1031,7 @@
         if (a.isEmpty())
         {
           // This is illegal -- it must have a value.
-          Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+          LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
           throw new ConfigException(message);
         }
         else
@@ -1043,7 +1043,7 @@
           if (iterator.hasNext())
           {
             // This is illegal -- the attribute is single-valued.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
             throw new ConfigException(message);
           }
@@ -1057,7 +1057,7 @@
           }
           catch (Exception e)
           {
-            Message message = ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.get(
+            LocalizableMessage message = ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.get(
                 valueString, a.getName(), String.valueOf(e));
             throw new ConfigException(message);
           }
@@ -1066,7 +1066,7 @@
           // Get the unit and use it to determine the corresponding multiplier.
           if (! units.containsKey(activeUnit))
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_INVALID_UNIT.get(activeUnit, a.getName());
             throw new ConfigException(message);
           }
@@ -1078,14 +1078,14 @@
           // Check the bounds set for this attribute.
           if (hasLowerBound && (activeCalculatedValue < lowerBound))
           {
-            Message message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
+            LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(
                 a.getName(), activeCalculatedValue, lowerBound);
             throw new ConfigException(message);
           }
 
           if (hasUpperBound && (activeCalculatedValue > upperBound))
           {
-            Message message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
+            LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(
                 a.getName(), activeCalculatedValue, upperBound);
             throw new ConfigException(message);
           }
@@ -1096,7 +1096,7 @@
     if (activeUnit == null)
     {
       // This is not OK.  The value set must contain an active value.
-      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
       throw new ConfigException(message);
     }
 
@@ -1245,7 +1245,7 @@
     }
     else
     {
-      Message message = ERR_CONFIG_ATTR_INT_WITH_UNIT_INVALID_TYPE.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_INT_WITH_UNIT_INVALID_TYPE.get(
           String.valueOf(value), getName(), value.getClass().getName());
       throw new ConfigException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java b/opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java
index 46ef609..7f21fa3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java
@@ -47,7 +47,7 @@
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.AlertGenerator;
 import org.opends.server.api.ClientConnection;
@@ -167,7 +167,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-          Message message = ERR_CONFIG_JMX_CANNOT_REGISTER_MBEAN.get(
+          LocalizableMessage message = ERR_CONFIG_JMX_CANNOT_REGISTER_MBEAN.get(
               configEntryDN.toString(), String.valueOf(e));
           logError(message);
       }
@@ -222,7 +222,7 @@
               }
                 e.printStackTrace();
 
-                Message message = ERR_CONFIG_JMX_CANNOT_REGISTER_MBEAN.get(
+                LocalizableMessage message = ERR_CONFIG_JMX_CANNOT_REGISTER_MBEAN.get(
                     configEntryDN.toString(), String.valueOf(e));
                 logError(message);
             }
@@ -500,7 +500,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
+      LocalizableMessage message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
           get(String.valueOf(attributeName), String.valueOf(configEntryDN),
               getExceptionMessage(e));
       throw new AttributeNotFoundException(message.toString());
@@ -526,7 +526,7 @@
     if (rc != ResultCode.SUCCESS) {
        clientConnection = null ;
 
-       Message message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
+       LocalizableMessage message = ERR_CONFIG_JMX_CANNOT_GET_ATTRIBUTE.
          get(String.valueOf(attributeName), String.valueOf(configEntryDN),
              String.valueOf(op.getErrorMessage()));
        throw new AttributeNotFoundException(message.toString());
@@ -543,7 +543,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_JMX_ATTR_NO_ATTR.get(
+      LocalizableMessage message = ERR_CONFIG_JMX_ATTR_NO_ATTR.get(
           String.valueOf(configEntryDN), attributeName);
       logError(message);
       throw new AttributeNotFoundException(message.toString());
@@ -792,7 +792,7 @@
 
     buffer.append(")");
 
-    Message message = ERR_CONFIG_JMX_NO_METHOD.get(
+    LocalizableMessage message = ERR_CONFIG_JMX_NO_METHOD.get(
         buffer.toString(), configEntryDN.toString());
     throw new MBeanException(
                    new DirectoryException(ResultCode.NO_SUCH_OPERATION,
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/MultiChoiceConfigAttribute.java b/opendj3-server-dev/src/server/org/opends/server/config/MultiChoiceConfigAttribute.java
index 6659fec..c9e747e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/MultiChoiceConfigAttribute.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/MultiChoiceConfigAttribute.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.config;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -99,7 +99,7 @@
    *                              All values in this set should be represented
    *                              entirely in lowercase characters.
    */
-  public MultiChoiceConfigAttribute(String name, Message description,
+  public MultiChoiceConfigAttribute(String name, LocalizableMessage description,
                                     boolean isRequired, boolean isMultiValued,
                                     boolean requiresAdminAction,
                                     Set<String> allowedValues)
@@ -136,7 +136,7 @@
    * @param  value                The value for this string configuration
    *                              attribute.
    */
-  public MultiChoiceConfigAttribute(String name, Message description,
+  public MultiChoiceConfigAttribute(String name, LocalizableMessage description,
                                     boolean isRequired, boolean isMultiValued,
                                     boolean requiresAdminAction,
                                     Set<String> allowedValues, String value)
@@ -183,7 +183,7 @@
    * @param  values               The set of values for this configuration
    *                              attribute.
    */
-  public MultiChoiceConfigAttribute(String name, Message description,
+  public MultiChoiceConfigAttribute(String name, LocalizableMessage description,
                                     boolean isRequired, boolean isMultiValued,
                                     boolean requiresAdminAction,
                                     Set<String> allowedValues,
@@ -232,7 +232,7 @@
    * @param  pendingValues        The set of pending values for this
    *                              configuration attribute.
    */
-  public MultiChoiceConfigAttribute(String name, Message description,
+  public MultiChoiceConfigAttribute(String name, LocalizableMessage description,
                                     boolean isRequired, boolean isMultiValued,
                                     boolean requiresAdminAction,
                                     Set<String> allowedValues,
@@ -308,13 +308,13 @@
   {
     if ((activeValues == null) || activeValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (activeValues.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -356,13 +356,13 @@
 
     if ((pendingValues == null) || pendingValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (pendingValues.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -416,13 +416,13 @@
   {
     if ((value == null) || (value.length() == 0))
     {
-      Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (! allowedValues.contains(value.toLowerCase()))
     {
-      Message message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(value, getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(value, getName());
       throw new ConfigException(message);
     }
 
@@ -459,7 +459,7 @@
     {
       if (isRequired())
       {
-        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
         throw new ConfigException(message);
       }
       else
@@ -482,7 +482,7 @@
     int numValues = values.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
       throw new ConfigException(message);
     }
@@ -496,14 +496,14 @@
     {
       if ((value == null) || (value.length() == 0))
       {
-        Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
         throw new ConfigException(message);
       }
 
 
       if (! allowedValues.contains(value.toLowerCase()))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(value, getName());
         throw new ConfigException(message);
       }
@@ -514,7 +514,7 @@
 
       if (valueSet.contains(attrValue))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(getName(), value);
         throw new ConfigException(message);
       }
@@ -672,7 +672,7 @@
     {
       if (isRequired())
       {
-        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
         throw new ConfigException(message);
       }
       else
@@ -685,7 +685,7 @@
     int numValues = valueStrings.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
       throw new ConfigException(message);
     }
@@ -697,7 +697,7 @@
     {
       if ((valueString == null) || (valueString.length() == 0))
       {
-        Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
         if (allowFailures)
         {
           ErrorLogger.logError(message);
@@ -711,7 +711,7 @@
 
       if (! allowedValues.contains(valueString.toLowerCase()))
       {
-        Message message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(
+        LocalizableMessage message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(
                 valueString, getName());
         if (allowFailures)
         {
@@ -734,7 +734,7 @@
     // attribute and if so deal with it accordingly.
     if ((isRequired()) && valueSet.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
       throw new ConfigException(message);
     }
 
@@ -823,7 +823,7 @@
           if (pendingValues != null)
           {
             // We cannot have multiple pending value sets.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
             throw new ConfigException(message);
           }
@@ -834,7 +834,7 @@
             if (isRequired())
             {
               // This is illegal -- it must have a value.
-              Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+              LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
               throw new ConfigException(message);
             }
             else
@@ -849,7 +849,7 @@
             if ((numValues > 1) && (! isMultiValued()))
             {
               // This is illegal -- the attribute is single-valued.
-              Message message =
+              LocalizableMessage message =
                   ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
               throw new ConfigException(message);
             }
@@ -861,7 +861,7 @@
               if (! allowedValues.contains(lowerValue))
               {
                 // This is illegal -- the value is not allowed.
-                Message message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(
+                LocalizableMessage message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(
                     v.getValue().toString(), a.getName());
                 throw new ConfigException(message);
               }
@@ -874,7 +874,7 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName());
           throw new ConfigException(message);
         }
@@ -885,7 +885,7 @@
         if (activeValues!= null)
         {
           // We cannot have multiple active value sets.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
           throw new ConfigException(message);
         }
@@ -896,7 +896,7 @@
           if (isRequired())
           {
             // This is illegal -- it must have a value.
-            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
             throw new ConfigException(message);
           }
           else
@@ -911,7 +911,7 @@
           if ((numValues > 1) && (! isMultiValued()))
           {
             // This is illegal -- the attribute is single-valued.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
             throw new ConfigException(message);
           }
@@ -923,7 +923,7 @@
             if (! allowedValues.contains(lowerValue))
             {
               // This is illegal -- the value is not allowed.
-              Message message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(
+              LocalizableMessage message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(
                   v.getValue().toString(), a.getName());
               throw new ConfigException(message);
             }
@@ -937,7 +937,7 @@
     if (activeValues == null)
     {
       // This is not OK.  The value set must contain an active value.
-      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
       throw new ConfigException(message);
     }
 
@@ -1226,14 +1226,14 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_CONFIG_ATTR_INVALID_STRING_VALUE.get(
+          LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_STRING_VALUE.get(
               getName(), String.valueOf(value), String.valueOf(e));
           throw new ConfigException(message, e);
         }
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_ATTR_STRING_INVALID_ARRAY_TYPE.get(
                     getName(), componentType);
         throw new ConfigException(message);
@@ -1241,7 +1241,7 @@
     }
     else
     {
-      Message message = ERR_CONFIG_ATTR_STRING_INVALID_TYPE.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_STRING_INVALID_TYPE.get(
           String.valueOf(value), getName(), value.getClass().getName());
       throw new ConfigException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/ReadOnlyConfigAttribute.java b/opendj3-server-dev/src/server/org/opends/server/config/ReadOnlyConfigAttribute.java
index 8269eb9..7c7e03e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/ReadOnlyConfigAttribute.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/ReadOnlyConfigAttribute.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.config;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -72,7 +72,7 @@
    * @param  isMultiValued  Indicates whether this configuration attribute may
    *                        have multiple values.
    */
-  public ReadOnlyConfigAttribute(String name, Message description,
+  public ReadOnlyConfigAttribute(String name, LocalizableMessage description,
                                  boolean isMultiValued)
   {
     super(name, description, false, isMultiValued, false);
@@ -91,7 +91,7 @@
    * @param  description  The description for this configuration attribute.
    * @param  value        The value for this configuration attribute.
    */
-  public ReadOnlyConfigAttribute(String name, Message description, String value)
+  public ReadOnlyConfigAttribute(String name, LocalizableMessage description, String value)
   {
     super(name, description, false, false, false, getValueSet(value));
 
@@ -117,7 +117,7 @@
    * @param  description  The description for this configuration attribute.
    * @param  values       The set of values for this configuration attribute.
    */
-  public ReadOnlyConfigAttribute(String name, Message description,
+  public ReadOnlyConfigAttribute(String name, LocalizableMessage description,
                                  List<String> values)
   {
     super(name, description, false, true, false, getValueSet(values));
@@ -176,13 +176,13 @@
   {
     if ((values == null) || values.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (values.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -246,7 +246,7 @@
   public void setValue(String value)
          throws ConfigException
   {
-    Message message = ERR_CONFIG_ATTR_READ_ONLY.get(getName());
+    LocalizableMessage message = ERR_CONFIG_ATTR_READ_ONLY.get(getName());
     throw new ConfigException(message);
   }
 
@@ -263,7 +263,7 @@
   public void setValues(List<String> values)
          throws ConfigException
   {
-    Message message = ERR_CONFIG_ATTR_READ_ONLY.get(getName());
+    LocalizableMessage message = ERR_CONFIG_ATTR_READ_ONLY.get(getName());
     throw new ConfigException(message);
   }
 
@@ -597,7 +597,7 @@
   public void setValue(javax.management.Attribute jmxAttribute)
          throws ConfigException
   {
-    Message message = ERR_CONFIG_ATTR_READ_ONLY.get(getName());
+    LocalizableMessage message = ERR_CONFIG_ATTR_READ_ONLY.get(getName());
     throw new ConfigException(message);
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/config/StringConfigAttribute.java b/opendj3-server-dev/src/server/org/opends/server/config/StringConfigAttribute.java
index e5c7b01..a734d7b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/config/StringConfigAttribute.java
+++ b/opendj3-server-dev/src/server/org/opends/server/config/StringConfigAttribute.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.config;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -91,7 +91,7 @@
    *                              configuration attribute require administrative
    *                              action before they will take effect.
    */
-  public StringConfigAttribute(String name, Message description,
+  public StringConfigAttribute(String name, LocalizableMessage description,
                                boolean isRequired, boolean isMultiValued,
                                boolean requiresAdminAction)
   {
@@ -121,7 +121,7 @@
    * @param  value                The value for this string configuration
    *                              attribute.
    */
-  public StringConfigAttribute(String name, Message description,
+  public StringConfigAttribute(String name, LocalizableMessage description,
                                boolean isRequired, boolean isMultiValued,
                                boolean requiresAdminAction, String value)
   {
@@ -161,7 +161,7 @@
    * @param  values               The set of values for this configuration
    *                              attribute.
    */
-  public StringConfigAttribute(String name, Message description,
+  public StringConfigAttribute(String name, LocalizableMessage description,
                                boolean isRequired, boolean isMultiValued,
                                boolean requiresAdminAction, List<String> values)
   {
@@ -202,7 +202,7 @@
    * @param  pendingValues        The set of pending values for this
    *                              configuration attribute.
    */
-  public StringConfigAttribute(String name, Message description,
+  public StringConfigAttribute(String name, LocalizableMessage description,
                                boolean isRequired, boolean isMultiValued,
                                boolean requiresAdminAction,
                                List<String> activeValues,
@@ -275,13 +275,13 @@
   {
     if ((activeValues == null) || activeValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (activeValues.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -323,13 +323,13 @@
 
     if ((pendingValues == null) || pendingValues.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_STRING_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
     if (pendingValues.size() > 1)
     {
-      Message message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_STRING_VALUES.get(getName());
       throw new ConfigException(message);
     }
 
@@ -369,7 +369,7 @@
   {
     if ((value == null) || (value.length() == 0))
     {
-      Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
       throw new ConfigException(message);
     }
 
@@ -406,7 +406,7 @@
     {
       if (isRequired())
       {
-        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
         throw new ConfigException(message);
       }
       else
@@ -429,7 +429,7 @@
     int numValues = values.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
       throw new ConfigException(message);
     }
@@ -443,7 +443,7 @@
     {
       if ((value == null) || (value.length() == 0))
       {
-        Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
         throw new ConfigException(message);
       }
 
@@ -453,7 +453,7 @@
 
       if (valueSet.contains(attrValue))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(getName(), value);
         throw new ConfigException(message);
       }
@@ -600,7 +600,7 @@
     {
       if (isRequired())
       {
-        Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
         throw new ConfigException(message);
       }
       else
@@ -613,7 +613,7 @@
     int numValues = valueStrings.size();
     if ((! isMultiValued()) && (numValues > 1))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName());
       throw new ConfigException(message);
     }
@@ -625,7 +625,7 @@
     {
       if ((valueString == null) || (valueString.length() == 0))
       {
-        Message message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
+        LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName());
 
         if (allowFailures)
         {
@@ -648,7 +648,7 @@
     // attribute and if so deal with it accordingly.
     if ((isRequired()) && valueSet.isEmpty())
     {
-      Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName());
       throw new ConfigException(message);
     }
 
@@ -737,7 +737,7 @@
           if (pendingValues != null)
           {
             // We cannot have multiple pending value sets.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName());
             throw new ConfigException(message);
           }
@@ -748,7 +748,7 @@
             if (isRequired())
             {
               // This is illegal -- it must have a value.
-              Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+              LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
               throw new ConfigException(message);
             }
             else
@@ -763,7 +763,7 @@
             if ((numValues > 1) && (! isMultiValued()))
             {
               // This is illegal -- the attribute is single-valued.
-              Message message =
+              LocalizableMessage message =
                   ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
               throw new ConfigException(message);
             }
@@ -779,7 +779,7 @@
         {
           // This is illegal -- only the pending option is allowed for
           // configuration attributes.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName());
           throw new ConfigException(message);
         }
@@ -790,7 +790,7 @@
         if (activeValues!= null)
         {
           // We cannot have multiple active value sets.
-          Message message =
+          LocalizableMessage message =
               ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName());
           throw new ConfigException(message);
         }
@@ -801,7 +801,7 @@
           if (isRequired())
           {
             // This is illegal -- it must have a value.
-            Message message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
+            LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName());
             throw new ConfigException(message);
           }
           else
@@ -816,7 +816,7 @@
           if ((numValues > 1) && (! isMultiValued()))
           {
             // This is illegal -- the attribute is single-valued.
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName());
             throw new ConfigException(message);
           }
@@ -833,7 +833,7 @@
     if (activeValues == null)
     {
       // This is not OK.  The value set must contain an active value.
-      Message message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
+      LocalizableMessage message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName());
       throw new ConfigException(message);
     }
 
@@ -1119,14 +1119,14 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_CONFIG_ATTR_INVALID_STRING_VALUE.get(
+          LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_STRING_VALUE.get(
               getName(), String.valueOf(value), String.valueOf(e));
           throw new ConfigException(message, e);
         }
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_ATTR_STRING_INVALID_ARRAY_TYPE.get(
                     String.valueOf(jmxAttribute),
                     String.valueOf(componentType));
@@ -1135,7 +1135,7 @@
     }
     else
     {
-      Message message = ERR_CONFIG_ATTR_STRING_INVALID_TYPE.get(
+      LocalizableMessage message = ERR_CONFIG_ATTR_STRING_INVALID_TYPE.get(
           String.valueOf(value), getName(), value.getClass().getName());
       throw new ConfigException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/AccountUsableRequestControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/AccountUsableRequestControl.java
index f544b3f..9f8c148 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/AccountUsableRequestControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/AccountUsableRequestControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -64,7 +64,7 @@
     {
       if (value != null)
       {
-        Message message = ERR_ACCTUSABLEREQ_CONTROL_HAS_VALUE.get();
+        LocalizableMessage message = ERR_ACCTUSABLEREQ_CONTROL_HAS_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/AccountUsableResponseControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/AccountUsableResponseControl.java
index 7aff445..e4c33fb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/AccountUsableResponseControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/AccountUsableResponseControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.io.IOException;
@@ -80,7 +80,7 @@
       if (value == null)
       {
         // The response control must always have a value.
-        Message message = ERR_ACCTUSABLERES_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_ACCTUSABLERES_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -139,7 +139,7 @@
                 secondsBeforeUnlock);
 
           default:
-            Message message = ERR_ACCTUSABLERES_UNKNOWN_VALUE_ELEMENT_TYPE.get(
+            LocalizableMessage message = ERR_ACCTUSABLERES_UNKNOWN_VALUE_ELEMENT_TYPE.get(
                 byteToHex(reader.peekType()));
             throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
         }
@@ -155,7 +155,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_ACCTUSABLERES_DECODE_ERROR.get(getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/AuthorizationIdentityResponseControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/AuthorizationIdentityResponseControl.java
index e3d6d3c..a52c7b4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/AuthorizationIdentityResponseControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/AuthorizationIdentityResponseControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -62,7 +62,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_AUTHZIDRESP_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_AUTHZIDRESP_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -75,7 +75,7 @@
       catch(Exception e)
       {
         // TODO: message.
-        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, Message.EMPTY);
+        throw new DirectoryException(ResultCode.PROTOCOL_ERROR, LocalizableMessage.EMPTY);
       }
     }
 
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 1d7d8ce..a24ae67 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.io.IOException;
@@ -67,7 +67,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_ECN_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_ECN_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -88,7 +88,7 @@
         {
           if (changeType != PersistentSearchChangeType.MODIFY_DN)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ECN_ILLEGAL_PREVIOUS_DN.get(String.valueOf(changeType));
             throw new DirectoryException(
                 ResultCode.PROTOCOL_ERROR, message);
@@ -113,7 +113,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_ECN_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/EntryChangelogNotificationControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/EntryChangelogNotificationControl.java
index 97e437c..bb150c1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/EntryChangelogNotificationControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/EntryChangelogNotificationControl.java
@@ -35,7 +35,7 @@
 
 import java.io.IOException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.protocols.asn1.ASN1;
 import org.opends.server.protocols.asn1.ASN1Reader;
@@ -77,7 +77,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_ECLN_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_ECLN_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -96,7 +96,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
           ERR_ECLN_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/ExternalChangelogRequestControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/ExternalChangelogRequestControl.java
index 32813d8..148ee73 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/ExternalChangelogRequestControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/ExternalChangelogRequestControl.java
@@ -32,7 +32,7 @@
 
 import java.io.IOException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.protocols.asn1.ASN1;
 import org.opends.server.protocols.asn1.ASN1Reader;
 import org.opends.server.protocols.asn1.ASN1Writer;
@@ -88,7 +88,7 @@
         }
         catch (Exception e2)
         {
-          Message message =
+          LocalizableMessage message =
             ERR_CANNOT_DECODE_CONTROL_VALUE.get(
                 getOID() + " x=" + value.toHexString() + " v="
                 + mdssValue , getExceptionMessage(e).toString());
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 1966745..27a2ac9 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
@@ -26,7 +26,7 @@
  */
 
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
@@ -105,7 +105,7 @@
           if (lowerAuthzIDString.startsWith("dn:"))
             authzDN = DN.valueOf(authzIDString.substring(3));
           else {
-            Message message = INFO_GETEFFECTIVERIGHTS_INVALID_AUTHZID.get(
+            LocalizableMessage message = INFO_GETEFFECTIVERIGHTS_INVALID_AUTHZID.get(
                 lowerAuthzIDString);
             throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
           }
@@ -132,7 +132,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               INFO_GETEFFECTIVERIGHTS_DECODE_ERROR.get(e.getMessage());
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/LDAPAssertionRequestControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/LDAPAssertionRequestControl.java
index d9e9167..beedc79 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/LDAPAssertionRequestControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/LDAPAssertionRequestControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import org.opends.server.protocols.asn1.*;
@@ -65,7 +65,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_LDAPASSERT_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_LDAPASSERT_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPostReadRequestControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPostReadRequestControl.java
index 7e97cb9..405e9d7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPostReadRequestControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPostReadRequestControl.java
@@ -28,7 +28,7 @@
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.Iterator;
 import java.util.LinkedHashSet;
@@ -71,7 +71,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_POSTREADREQ_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_POSTREADREQ_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -93,7 +93,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ae);
         }
 
-        Message message = ERR_POSTREADREQ_CANNOT_DECODE_VALUE.get(ae
+        LocalizableMessage message = ERR_POSTREADREQ_CANNOT_DECODE_VALUE.get(ae
             .getMessage());
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, ae);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPostReadResponseControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPostReadResponseControl.java
index 21839e3..7036d23 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPostReadResponseControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPostReadResponseControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import org.opends.server.protocols.asn1.*;
@@ -65,7 +65,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_POSTREADRESP_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_POSTREADRESP_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -85,7 +85,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, le);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_POSTREADRESP_CANNOT_DECODE_VALUE.get(le.getMessage());
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
             le);
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPreReadRequestControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPreReadRequestControl.java
index 5872708..36aa3b7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPreReadRequestControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPreReadRequestControl.java
@@ -28,7 +28,7 @@
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.Iterator;
 import java.util.LinkedHashSet;
@@ -71,7 +71,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_PREREADREQ_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_PREREADREQ_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -93,7 +93,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ae);
         }
 
-        Message message = ERR_PREREADREQ_CANNOT_DECODE_VALUE.get(ae
+        LocalizableMessage message = ERR_PREREADREQ_CANNOT_DECODE_VALUE.get(ae
             .getMessage());
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, ae);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPreReadResponseControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPreReadResponseControl.java
index d63ab01..4a61c9a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPreReadResponseControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/LDAPPreReadResponseControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import org.opends.server.protocols.asn1.*;
@@ -66,7 +66,7 @@
     {
      if (value == null)
       {
-        Message message = ERR_PREREADRESP_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_PREREADRESP_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -86,7 +86,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, le);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_PREREADRESP_CANNOT_DECODE_VALUE.get(le.getMessage());
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
             le);
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesControl.java
index 7e13739..6da28d9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -69,7 +69,7 @@
       ArrayList<MatchedValuesFilter> filters;
       if (value == null)
       {
-        Message message = ERR_MATCHEDVALUES_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_MATCHEDVALUES_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -79,7 +79,7 @@
         reader.readStartSequence();
         if (!reader.hasNextElement())
         {
-          Message message = ERR_MATCHEDVALUES_NO_FILTERS.get();
+          LocalizableMessage message = ERR_MATCHEDVALUES_NO_FILTERS.get();
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
         }
 
@@ -101,7 +101,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_MATCHEDVALUES_CANNOT_DECODE_VALUE_AS_SEQUENCE.get(
+        LocalizableMessage message = ERR_MATCHEDVALUES_CANNOT_DECODE_VALUE_AS_SEQUENCE.get(
             getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesFilter.java b/opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesFilter.java
index a272165..cbed6e7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesFilter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/MatchedValuesFilter.java
@@ -26,7 +26,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -571,7 +571,7 @@
       case OR:
       case NOT:
         // These filter types cannot be used in a matched values filter.
-        Message message = ERR_MVFILTER_INVALID_LDAP_FILTER_TYPE.get(
+        LocalizableMessage message = ERR_MVFILTER_INVALID_LDAP_FILTER_TYPE.get(
             String.valueOf(filter), String.valueOf(filter.getFilterType()));
         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
 
@@ -734,7 +734,7 @@
     catch(Exception e)
     {
       // TODO: Need a better message.
-      Message message =
+      LocalizableMessage message =
           ERR_MVFILTER_INVALID_ELEMENT_TYPE.get(e.toString());
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
@@ -763,7 +763,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_MVFILTER_CANNOT_DECODE_AVA.get(getExceptionMessage(e));
           throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                                   e);
@@ -781,7 +781,7 @@
           reader.readStartSequence();
           if(!reader.hasNextElement())
           {
-            Message message = ERR_MVFILTER_NO_SUBSTRING_ELEMENTS.get();
+            LocalizableMessage message = ERR_MVFILTER_NO_SUBSTRING_ELEMENTS.get();
             throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
 
@@ -827,7 +827,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_MVFILTER_CANNOT_DECODE_SUBSTRINGS.get(getExceptionMessage(e));
           throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                                   e);
@@ -850,7 +850,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_MVFILTER_CANNOT_DECODE_PRESENT_TYPE.get(
+          LocalizableMessage message = ERR_MVFILTER_CANNOT_DECODE_PRESENT_TYPE.get(
               getExceptionMessage(e));
           throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                                   e);
@@ -892,7 +892,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_MVFILTER_CANNOT_DECODE_EXTENSIBLE_MATCH.get(
+          LocalizableMessage message = ERR_MVFILTER_CANNOT_DECODE_EXTENSIBLE_MATCH.get(
               getExceptionMessage(e));
           throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message,
                                   e);
@@ -900,7 +900,7 @@
 
 
       default:
-        Message message =
+        LocalizableMessage message =
             ERR_MVFILTER_INVALID_ELEMENT_TYPE.get(byteToHex(type));
         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/PagedResultsControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/PagedResultsControl.java
index 82762b9..d3ae99f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/PagedResultsControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/PagedResultsControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -70,7 +70,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_LDAP_PAGED_RESULTS_DECODE_NULL.get();
+        LocalizableMessage message = ERR_LDAP_PAGED_RESULTS_DECODE_NULL.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -86,7 +86,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE.get(String.valueOf(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
@@ -103,7 +103,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_LDAP_PAGED_RESULTS_DECODE_SIZE.get(String.valueOf(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
@@ -120,7 +120,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_LDAP_PAGED_RESULTS_DECODE_COOKIE.get(String.valueOf(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
@@ -136,7 +136,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_LDAP_PAGED_RESULTS_DECODE_SEQUENCE.get(String.valueOf(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordExpiredControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordExpiredControl.java
index afbc1ee..2f09715 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordExpiredControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordExpiredControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -69,7 +69,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_PWEXPIRED_CONTROL_INVALID_VALUE.get();
+          LocalizableMessage message = ERR_PWEXPIRED_CONTROL_INVALID_VALUE.get();
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
         }
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordExpiringControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordExpiringControl.java
index c6a4756..e5ca851 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordExpiringControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordExpiringControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -64,7 +64,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_PWEXPIRING_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_PWEXPIRING_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -81,7 +81,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION.
+        LocalizableMessage message = ERR_PWEXPIRING_CANNOT_DECODE_SECONDS_UNTIL_EXPIRATION.
             get(getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyErrorType.java b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyErrorType.java
index 2a2e38c..086d3de 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyErrorType.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyErrorType.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
 
@@ -32,7 +33,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -149,7 +150,7 @@
   private int value;
 
   // The message ID for the description of this password policy error type.
-  private Message description;
+  private LocalizableMessage description;
 
 
 
@@ -163,7 +164,7 @@
    * @param  description    The message for the description of this password
    *                        policy error type.
    */
-  private PasswordPolicyErrorType(int value, Message description)
+  private PasswordPolicyErrorType(int value, LocalizableMessage description)
   {
     this.value         = value;
     this.description   = description;
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyRequestControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyRequestControl.java
index 336a606..e06f19c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyRequestControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyRequestControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -63,7 +63,7 @@
     {
       if (value != null)
       {
-        Message message = ERR_PWPOLICYREQ_CONTROL_HAS_VALUE.get();
+        LocalizableMessage message = ERR_PWPOLICYREQ_CONTROL_HAS_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java
index f483c87..b395319 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyResponseControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -68,7 +68,7 @@
       if (value == null)
       {
         // The response control must always have a value.
-        Message message = ERR_PWPOLICYRES_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_PWPOLICYRES_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -92,7 +92,7 @@
           warningValue = (int)reader.readInteger();
           if (warningType == null)
           {
-            Message message = ERR_PWPOLICYRES_INVALID_WARNING_TYPE.get(
+            LocalizableMessage message = ERR_PWPOLICYRES_INVALID_WARNING_TYPE.get(
                 byteToHex(reader.peekType()));
             throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
                 message);
@@ -106,7 +106,7 @@
           errorType = PasswordPolicyErrorType.valueOf(errorValue);
           if (errorType == null)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_PWPOLICYRES_INVALID_ERROR_TYPE.get(errorValue);
             throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
                 message);
@@ -130,7 +130,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_PWPOLICYRES_DECODE_ERROR.get(getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyWarningType.java b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyWarningType.java
index c300581..66a1fa4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyWarningType.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/PasswordPolicyWarningType.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
 
@@ -32,7 +33,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -84,7 +85,7 @@
   private final byte type;
 
   // The message ID for the description of this password policy error type.
-  private final Message description;
+  private final LocalizableMessage description;
 
 
 
@@ -97,7 +98,7 @@
    * @param  description    The message for the description of this password
    *                        policy error type.
    */
-  private PasswordPolicyWarningType(byte type, Message description)
+  private PasswordPolicyWarningType(byte type, LocalizableMessage description)
   {
     this.type          = type;
     this.description   = description;
@@ -143,7 +144,7 @@
   @Override
   public String toString()
   {
-    return Message.toString(description);
+    return description == null ? null : description.toString();
   }
 }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/PersistentSearchChangeType.java b/opendj3-server-dev/src/server/org/opends/server/controls/PersistentSearchChangeType.java
index d5c83c2..e47bf3f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/PersistentSearchChangeType.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/PersistentSearchChangeType.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.controls;
 
@@ -32,7 +32,7 @@
 import java.util.Iterator;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.protocols.ldap.LDAPResultCode;
 import org.opends.server.types.LDAPException;
 
@@ -138,7 +138,7 @@
       case 8:
         return MODIFY_DN;
       default:
-        Message message = ERR_PSEARCH_CHANGETYPES_INVALID_TYPE.get(intValue);
+        LocalizableMessage message = ERR_PSEARCH_CHANGETYPES_INVALID_TYPE.get(intValue);
         throw new LDAPException(LDAPResultCode.CONSTRAINT_VIOLATION, message);
     }
   }
@@ -167,7 +167,7 @@
       case 0:
         // No change types are included.  This won't be allowed because it
         // doesn't make any sense.
-        Message message = ERR_PSEARCH_CHANGETYPES_NO_TYPES.get();
+        LocalizableMessage message = ERR_PSEARCH_CHANGETYPES_NO_TYPES.get();
         throw new LDAPException(LDAPResultCode.CONSTRAINT_VIOLATION, message);
       case 1:
         changeTypes.add(ADD);
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/PersistentSearchControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/PersistentSearchControl.java
index 9a407e2..4963711 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/PersistentSearchControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/PersistentSearchControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.Set;
@@ -66,7 +66,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_PSEARCH_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_PSEARCH_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -97,7 +97,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_PSEARCH_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
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 5fec084..773aa48 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
@@ -29,7 +29,7 @@
 import java.io.IOException;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AuthenticationPolicyState;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.PasswordPolicyState;
@@ -72,13 +72,13 @@
     {
       if (!isCritical)
       {
-        Message message = ERR_PROXYAUTH1_CONTROL_NOT_CRITICAL.get();
+        LocalizableMessage message = ERR_PROXYAUTH1_CONTROL_NOT_CRITICAL.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
       if (value == null)
       {
-        Message message = ERR_PROXYAUTH1_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_PROXYAUTH1_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -97,7 +97,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_PROXYAUTH1_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
@@ -306,7 +306,7 @@
       if (userEntry == null)
       {
         // The requested user does not exist.
-        Message message =
+        LocalizableMessage message =
             ERR_PROXYAUTH1_NO_SUCH_USER.get(String.valueOf(authzDN));
         throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
       }
@@ -319,7 +319,7 @@
 
       if (state.isDisabled())
       {
-        Message message = ERR_PROXYAUTH1_UNUSABLE_ACCOUNT.get(String
+        LocalizableMessage message = ERR_PROXYAUTH1_UNUSABLE_ACCOUNT.get(String
             .valueOf(userEntry.getName()));
         throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
       }
@@ -333,7 +333,7 @@
             pwpState.lockedDueToMaximumResetAge() ||
             pwpState.isPasswordExpired())
         {
-          Message message = ERR_PROXYAUTH1_UNUSABLE_ACCOUNT.get(String
+          LocalizableMessage message = ERR_PROXYAUTH1_UNUSABLE_ACCOUNT.get(String
               .valueOf(authzDN));
           throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED,
               message);
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 ec19049..3f1a0fe 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
@@ -29,7 +29,7 @@
 import java.io.IOException;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AuthenticationPolicyState;
 import org.opends.server.api.IdentityMapper;
 import org.opends.server.core.DirectoryServer;
@@ -72,13 +72,13 @@
     {
       if (!isCritical)
       {
-        Message message = ERR_PROXYAUTH2_CONTROL_NOT_CRITICAL.get();
+        LocalizableMessage message = ERR_PROXYAUTH2_CONTROL_NOT_CRITICAL.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
       if (value == null)
       {
-        Message message = ERR_PROXYAUTH2_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_PROXYAUTH2_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -103,7 +103,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_PROXYAUTH2_INVALID_AUTHZID.get(lowerAuthZIDStr);
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
               e);
@@ -258,7 +258,7 @@
           if (userEntry == null)
           {
             // The requested user does not exist.
-            Message message = ERR_PROXYAUTH2_NO_SUCH_USER.get(lowerAuthzID);
+            LocalizableMessage message = ERR_PROXYAUTH2_NO_SUCH_USER.get(lowerAuthzID);
             throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED,
                                          message);
           }
@@ -291,14 +291,14 @@
            DirectoryServer.getProxiedAuthorizationIdentityMapper();
       if (proxyMapper == null)
       {
-        Message message = ERR_PROXYAUTH2_NO_IDENTITY_MAPPER.get();
+        LocalizableMessage message = ERR_PROXYAUTH2_NO_IDENTITY_MAPPER.get();
         throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
       }
 
       Entry userEntry = proxyMapper.getEntryForID(lowerAuthzID.substring(2));
       if (userEntry == null)
       {
-        Message message = ERR_PROXYAUTH2_NO_SUCH_USER.get(lowerAuthzID);
+        LocalizableMessage message = ERR_PROXYAUTH2_NO_SUCH_USER.get(lowerAuthzID);
         throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
       }
       else
@@ -312,7 +312,7 @@
     }
     else
     {
-      Message message = ERR_PROXYAUTH2_INVALID_AUTHZID.get(lowerAuthzID);
+      LocalizableMessage message = ERR_PROXYAUTH2_INVALID_AUTHZID.get(lowerAuthzID);
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
     }
   }
@@ -327,7 +327,7 @@
 
     if (state.isDisabled())
     {
-      Message message = ERR_PROXYAUTH2_UNUSABLE_ACCOUNT.get(String
+      LocalizableMessage message = ERR_PROXYAUTH2_UNUSABLE_ACCOUNT.get(String
           .valueOf(userEntry.getName()));
       throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED, message);
     }
@@ -341,7 +341,7 @@
           pwpState.lockedDueToMaximumResetAge() ||
           pwpState.isPasswordExpired())
       {
-        Message message = ERR_PROXYAUTH2_UNUSABLE_ACCOUNT.get(String
+        LocalizableMessage message = ERR_PROXYAUTH2_UNUSABLE_ACCOUNT.get(String
             .valueOf(userEntry.getName()));
         throw new DirectoryException(ResultCode.AUTHORIZATION_DENIED,
             message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/ServerSideSortRequestControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/ServerSideSortRequestControl.java
index 3374f9b..87f5bac 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/ServerSideSortRequestControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/ServerSideSortRequestControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -92,7 +92,7 @@
     {
       if (value == null)
       {
-        Message message = INFO_SORTREQ_CONTROL_NO_VALUE.get();
+        LocalizableMessage message = INFO_SORTREQ_CONTROL_NO_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -102,7 +102,7 @@
         reader.readStartSequence();
         if (!reader.hasNextElement())
         {
-          Message message = INFO_SORTREQ_CONTROL_NO_SORT_KEYS.get();
+          LocalizableMessage message = INFO_SORTREQ_CONTROL_NO_SORT_KEYS.get();
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
         }
 
@@ -133,7 +133,7 @@
                 DirectoryServer.getOrderingMatchingRule(orderingRuleID);
             if (orderingRule == null)
             {
-              Message message =
+              LocalizableMessage message =
                   INFO_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE.
                       get(orderingRuleID);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -150,7 +150,7 @@
           if ((orderingRule == null) &&
               (attrType.getOrderingMatchingRule() == null))
           {
-            Message message =
+            LocalizableMessage message =
                 INFO_SORTREQ_CONTROL_NO_ORDERING_RULE_FOR_ATTR.get(attrName);
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                 message);
@@ -169,7 +169,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             INFO_SORTREQ_CONTROL_CANNOT_DECODE_VALUE.get(
                 getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
@@ -250,7 +250,7 @@
       {
         if (token.length() == 0)
         {
-          Message message =
+          LocalizableMessage message =
               INFO_SORTREQ_CONTROL_NO_ATTR_NAME.get(sortOrderString);
           throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
@@ -266,13 +266,13 @@
       }
       else if (colonPos == 0)
       {
-        Message message =
+        LocalizableMessage message =
             INFO_SORTREQ_CONTROL_NO_ATTR_NAME.get(sortOrderString);
         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
       else if (colonPos == (token.length() - 1))
       {
-        Message message =
+        LocalizableMessage message =
             INFO_SORTREQ_CONTROL_NO_MATCHING_RULE.get(sortOrderString);
         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
@@ -294,7 +294,7 @@
 
     if (decodedKeyList.isEmpty())
     {
-      Message message = INFO_SORTREQ_CONTROL_NO_SORT_KEYS.get();
+      LocalizableMessage message = INFO_SORTREQ_CONTROL_NO_SORT_KEYS.get();
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
   }
@@ -464,7 +464,7 @@
                 decodedKey[1].toLowerCase());
         if (orderingRule == null)
         {
-          Message message =
+          LocalizableMessage message =
               INFO_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE.
                   get(decodedKey[1]);
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -481,7 +481,7 @@
       if ((orderingRule == null) &&
           (attrType.getOrderingMatchingRule() == null))
       {
-        Message message =
+        LocalizableMessage message =
             INFO_SORTREQ_CONTROL_NO_ORDERING_RULE_FOR_ATTR.get(
                 decodedKey[0]);
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/ServerSideSortResponseControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/ServerSideSortResponseControl.java
index bd94405..acfbe6d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/ServerSideSortResponseControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/ServerSideSortResponseControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.io.IOException;
@@ -92,7 +92,7 @@
     {
       if (value == null)
       {
-        Message message = INFO_SORTRES_CONTROL_NO_VALUE.get();
+        LocalizableMessage message = INFO_SORTRES_CONTROL_NO_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -114,7 +114,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             INFO_SORTRES_CONTROL_CANNOT_DECODE_VALUE.get(
                 getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/SubentriesControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/SubentriesControl.java
index ba8c6c9..6e0dc82 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/SubentriesControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/SubentriesControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.IOException;
 
@@ -62,7 +62,7 @@
     {
       if (value == null)
       {
-        Message message = ERR_SUBENTRIES_NO_CONTROL_VALUE.get();
+        LocalizableMessage message = ERR_SUBENTRIES_NO_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -79,7 +79,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_SUBENTRIES_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/SubtreeDeleteControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/SubtreeDeleteControl.java
index dafefe3..fca09de 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/SubtreeDeleteControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/SubtreeDeleteControl.java
@@ -33,7 +33,7 @@
 
 import java.io.IOException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.protocols.asn1.ASN1Writer;
 import org.forgerock.opendj.ldap.ByteString;
 import org.opends.server.types.Control;
@@ -64,7 +64,7 @@
     {
       if (value != null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_SUBTREE_DELETE_INVALID_CONTROL_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/VLVRequestControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/VLVRequestControl.java
index 3bbd3ee..ba40298 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/VLVRequestControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/VLVRequestControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.io.IOException;
@@ -78,7 +78,7 @@
     {
       if (value == null)
       {
-        Message message = INFO_VLVREQ_CONTROL_NO_VALUE.get();
+        LocalizableMessage message = INFO_VLVREQ_CONTROL_NO_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -108,7 +108,7 @@
             break;
 
           default:
-            Message message = INFO_VLVREQ_CONTROL_INVALID_TARGET_TYPE.get(
+            LocalizableMessage message = INFO_VLVREQ_CONTROL_INVALID_TARGET_TYPE.get(
                 byteToHex(targetType));
             throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
         }
@@ -134,7 +134,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             INFO_VLVREQ_CONTROL_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/controls/VLVResponseControl.java b/opendj3-server-dev/src/server/org/opends/server/controls/VLVResponseControl.java
index 202879b..98e0838 100644
--- a/opendj3-server-dev/src/server/org/opends/server/controls/VLVResponseControl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/controls/VLVResponseControl.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.controls;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.io.IOException;
@@ -83,7 +83,7 @@
     {
       if (value == null)
       {
-        Message message = INFO_VLVRES_CONTROL_NO_VALUE.get();
+        LocalizableMessage message = INFO_VLVRES_CONTROL_NO_VALUE.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
 
@@ -107,7 +107,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             INFO_VLVRES_CONTROL_CANNOT_DECODE_VALUE.get(getExceptionMessage(e));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message, e);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/AbandonOperationBasis.java b/opendj3-server-dev/src/server/org/opends/server/core/AbandonOperationBasis.java
index 0745505..a40409a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/AbandonOperationBasis.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/AbandonOperationBasis.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -31,7 +31,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.plugin.PluginResult;
 import org.opends.server.types.*;
@@ -192,7 +192,7 @@
       // configurable option in the server.
       boolean notifyRequestor = DirectoryServer.notifyAbandonedOperations();
 
-      Message cancelReason = INFO_CANCELED_BY_ABANDON_REQUEST.get(messageID);
+      LocalizableMessage cancelReason = INFO_CANCELED_BY_ABANDON_REQUEST.get(messageID);
 
       CancelRequest _cancelRequest = new CancelRequest(notifyRequestor,
                                                        cancelReason);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/AccessControlConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/AccessControlConfigManager.java
index 432d4a1..79b6854 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/AccessControlConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/AccessControlConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -290,7 +291,7 @@
         newHandler = new DefaultAccessControlHandler();
         newHandler.initializeAccessControlHandler(null);
         if(logMessage) {
-          Message message = WARN_CONFIG_AUTHZ_DISABLED.get();
+          LocalizableMessage message = WARN_CONFIG_AUTHZ_DISABLED.get();
           logError(message);
           if (currentConfiguration != null) {
             DirectoryServer.sendAlertNotification(this,
@@ -300,7 +301,7 @@
       } else {
         newHandler = loadHandler(handlerClassName, config, initHandler);
         if(logMessage) {
-          Message message = NOTE_CONFIG_AUTHZ_ENABLED.get(handlerClassName);
+          LocalizableMessage message = NOTE_CONFIG_AUTHZ_ENABLED.get(handlerClassName);
           logError(message);
           if (currentConfiguration != null) {
             DirectoryServer.sendAlertNotification(this,
@@ -312,7 +313,7 @@
       if (debugEnabled()) {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = ERR_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER.
+      LocalizableMessage message = ERR_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER.
               get(handlerClassName, String.valueOf(config.dn().toString()),
                       stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
@@ -326,7 +327,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       AccessControlHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     try
     {
@@ -356,7 +357,7 @@
                                  AccessControlHandlerCfg configuration)
   {
     ResultCode resultCode = ResultCode.SUCCESS;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     try
     {
@@ -467,7 +468,7 @@
                                            AccessControlHandlerCfg.class,
                                            List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(provider, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -475,7 +476,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -484,7 +485,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_AUTHZ_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_AUTHZ_CONFIG_NOT_ACCEPTABLE.get(
             // Bug: where in a section where configuration is null
             // WAS: String.valueOf( configuration.dn())
             // Now:
@@ -498,7 +499,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER.
+      LocalizableMessage message = ERR_CONFIG_AUTHZ_UNABLE_TO_INSTANTIATE_HANDLER.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/AccountStatusNotificationHandlerConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/AccountStatusNotificationHandlerConfigManager.java
index 0d5729b..dc4b23c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/AccountStatusNotificationHandlerConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/AccountStatusNotificationHandlerConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -145,7 +146,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       AccountStatusNotificationHandlerCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -182,7 +183,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     // Get the configuration entry DN and the associated handler class.
@@ -242,7 +243,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       AccountStatusNotificationHandlerCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -252,7 +253,7 @@
     DN configEntryDN = configuration.dn();
     if (notificationHandlers.containsKey(configEntryDN))
     {
-      Message message = ERR_CONFIG_ACCTNOTHANDLER_EXISTS.get(
+      LocalizableMessage message = ERR_CONFIG_ACCTNOTHANDLER_EXISTS.get(
               String.valueOf(configEntryDN));
       unacceptableReasons.add (message);
       status = false;
@@ -290,7 +291,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     // Register a change listener with it so we can be notified of changes
@@ -323,7 +324,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       AccountStatusNotificationHandlerCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // A delete should always be acceptable, so just return true.
@@ -341,7 +342,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     uninstallNotificationHandler (configuration.dn());
@@ -444,7 +445,7 @@
                   "isConfigurationAcceptable",
                   AccountStatusNotificationHandlerCfg.class, List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(notificationHandler,
                                                      configuration,
                                                      unacceptableReasons);
@@ -453,7 +454,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -462,7 +463,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_ACCTNOTHANDLER_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_ACCTNOTHANDLER_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -472,7 +473,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_ACCTNOTHANDLER_INITIALIZATION_FAILED.get(
+      LocalizableMessage message = ERR_CONFIG_ACCTNOTHANDLER_INITIALIZATION_FAILED.get(
               className,
               String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/AlertHandlerConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/AlertHandlerConfigManager.java
index 9342df0..eda56be 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/AlertHandlerConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/AlertHandlerConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -141,7 +142,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(AlertHandlerCfg configuration,
-                                              List<Message> unacceptableReasons)
+                                              List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -172,7 +173,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -216,7 +217,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       AlertHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // alert handler is in use.
@@ -233,7 +234,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     AlertHandler alertHandler = alertHandlers.remove(configuration.dn());
     if (alertHandler != null)
@@ -251,7 +252,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(AlertHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -283,7 +284,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing alert handler if it's already enabled.
@@ -393,7 +394,7 @@
              handler.getClass().getMethod("isConfigurationAcceptable",
                                           AlertHandlerCfg.class, List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(handler, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -401,7 +402,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -410,7 +411,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_ALERTHANDLER_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_ALERTHANDLER_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -420,7 +421,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_ALERTHANDLER_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_ALERTHANDLER_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java
index 20e02a0..51aa84e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/AttributeSyntaxConfigManager.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 
@@ -43,7 +44,7 @@
 import org.opends.server.admin.server.ServerManagementContext;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.config.ConfigException;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DirectoryException;
@@ -137,7 +138,7 @@
           }
           catch (DirectoryException de)
           {
-            Message message = WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX.get(
                String.valueOf(syntaxConfiguration.dn()), de.getMessageObject());
             logError(message);
             continue;
@@ -159,7 +160,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       AttributeSyntaxCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -191,7 +192,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -216,7 +217,7 @@
       }
       catch (DirectoryException de)
       {
-        Message message = WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX.get(
+        LocalizableMessage message = WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX.get(
                 String.valueOf(configuration.dn()), de.getMessageObject());
         messages.add(message);
 
@@ -246,7 +247,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       AttributeSyntaxCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // If the syntax is enabled, then check to see if there are any defined
     // attribute types that use the syntax.  If so, then don't allow it to be
@@ -260,7 +261,7 @@
       {
         if (oid.equals(at.getSyntaxOID()))
         {
-          Message message = WARN_CONFIG_SCHEMA_CANNOT_DELETE_SYNTAX_IN_USE.get(
+          LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_DELETE_SYNTAX_IN_USE.get(
                   syntax.getSyntaxName(), at.getNameOrOID());
           unacceptableReasons.add(message);
 
@@ -282,7 +283,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     AttributeSyntax syntax = syntaxes.remove(configuration.dn());
     if (syntax != null)
@@ -301,7 +302,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       AttributeSyntaxCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -330,7 +331,7 @@
         {
           if (oid.equals(at.getSyntaxOID()))
           {
-            Message message =
+            LocalizableMessage message =
                     WARN_CONFIG_SCHEMA_CANNOT_DISABLE_SYNTAX_IN_USE.get(
                             syntax.getSyntaxName(),
                             at.getNameOrOID());
@@ -355,7 +356,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing syntax if it's already enabled.
@@ -409,7 +410,7 @@
       }
       catch (DirectoryException de)
       {
-        Message message = WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX.get(
+        LocalizableMessage message = WARN_CONFIG_SCHEMA_SYNTAX_CONFLICTING_SYNTAX.get(
                 String.valueOf(configuration.dn()),
                 de.getMessageObject());
         messages.add(message);
@@ -478,7 +479,7 @@
                                                     AttributeSyntaxCfg.class,
                                                     List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(syntax, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -486,7 +487,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -495,7 +496,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_SCHEMA_SYNTAX_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_SCHEMA_SYNTAX_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -505,7 +506,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_SCHEMA_SYNTAX_CANNOT_INITIALIZE.
+      LocalizableMessage message = ERR_CONFIG_SCHEMA_SYNTAX_CANNOT_INITIALIZE.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
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 193b531..bf9aed8 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
@@ -27,7 +27,7 @@
 package org.opends.server.core;
 import java.util.HashSet;
 import java.util.Set;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -231,7 +231,7 @@
     {
       for (ClientConnection conn : connectionSet)
       {
-        Message message = WARN_CLIENTCONNECTION_DISCONNECT_DUE_TO_DELETE.get(
+        LocalizableMessage message = WARN_CLIENTCONNECTION_DISCONNECT_DUE_TO_DELETE.get(
                 String.valueOf(entry.getName()));
 
         conn.disconnect(DisconnectReason.INVALID_CREDENTIALS, true, message);
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 4bc7833..bd5a15b 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -136,7 +136,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_BACKEND_CANNOT_GET_CONFIG_BASE.get(getExceptionMessage(e));
       throw new ConfigException(message, e);
 
@@ -148,7 +148,7 @@
     // configuration, even if there are no backends defined below it.
     if (backendRoot == null)
     {
-      Message message = ERR_CONFIG_BACKEND_BASE_DOES_NOT_EXIST.get();
+      LocalizableMessage message = ERR_CONFIG_BACKEND_BASE_DOES_NOT_EXIST.get();
       throw new ConfigException(message);
     }
 
@@ -174,7 +174,7 @@
         // then log an error and skip it.
         if (DirectoryServer.hasBackend(backendCfg.getBackendId()))
         {
-          Message message = WARN_CONFIG_BACKEND_DUPLICATE_BACKEND_ID.get(
+          LocalizableMessage message = WARN_CONFIG_BACKEND_DUPLICATE_BACKEND_ID.get(
               backendID, String.valueOf(backendDN));
           logError(message);
           continue;
@@ -202,7 +202,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_CONFIG_BACKEND_CANNOT_INSTANTIATE.
+          LocalizableMessage message = ERR_CONFIG_BACKEND_CANNOT_INSTANTIATE.
               get(String.valueOf(className), String.valueOf(backendDN),
                   stackTraceToSingleLineString(e));
           logError(message);
@@ -251,7 +251,7 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
           {
-            Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+            LocalizableMessage message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
                 backendID, String.valueOf(failureReason));
             logError(message);
             // FIXME -- Do we need to send an admin alert?
@@ -265,7 +265,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+          LocalizableMessage message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
               backendID, stackTraceToSingleLineString(e));
           logError(message);
           // FIXME -- Do we need to send an admin alert?
@@ -285,7 +285,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_CONFIG_BACKEND_CANNOT_INITIALIZE.
+          LocalizableMessage message = ERR_CONFIG_BACKEND_CANNOT_INITIALIZE.
               get(String.valueOf(className), String.valueOf(backendDN),
                   stackTraceToSingleLineString(e));
           logError(message);
@@ -339,7 +339,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND.get(
+          LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND.get(
               backendID, getExceptionMessage(e));
           logError(message);
           // FIXME -- Do we need to send an admin alert?
@@ -355,7 +355,7 @@
       {
         // The backend is explicitly disabled.  Log a mild warning and
         // continue.
-        Message message =
+        LocalizableMessage message =
             INFO_CONFIG_BACKEND_DISABLED.get(String.valueOf(backendDN));
         logError(message);
       }
@@ -368,7 +368,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
        BackendCfg configEntry,
-       List<Message> unacceptableReason)
+       List<LocalizableMessage> unacceptableReason)
   {
     DN backendDN = configEntry.dn();
 
@@ -498,7 +498,7 @@
     Backend            backend             = registeredBackends.get(backendDN);
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // See if the entry contains an attribute that indicates whether the
@@ -543,7 +543,7 @@
             StringBuilder failureReason = new StringBuilder();
             if (! LockFileManager.releaseLock(lockFile, failureReason))
             {
-              Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.
+              LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.
                   get(backend.getBackendID(), String.valueOf(failureReason));
               logError(message);
               // FIXME -- Do we need to send an admin alert?
@@ -556,7 +556,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e2);
             }
 
-            Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.
+            LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.
                 get(backend.getBackendID(), stackTraceToSingleLineString(e2));
             logError(message);
             // FIXME -- Do we need to send an admin alert?
@@ -714,7 +714,7 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
         {
-          Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+          LocalizableMessage message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
               backendID, String.valueOf(failureReason));
           logError(message);
           // FIXME -- Do we need to send an admin alert?
@@ -733,7 +733,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+        LocalizableMessage message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
             backendID, stackTraceToSingleLineString(e));
         logError(message);
         // FIXME -- Do we need to send an admin alert?
@@ -768,7 +768,7 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.releaseLock(lockFile, failureReason))
           {
-            Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.
+            LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.
                 get(backendID, String.valueOf(failureReason));
             logError(message);
             // FIXME -- Do we need to send an admin alert?
@@ -781,7 +781,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e2);
           }
 
-          Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
+          LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
               backendID, stackTraceToSingleLineString(e2));
           logError(message);
           // FIXME -- Do we need to send an admin alert?
@@ -812,7 +812,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND.get(
+        LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND.get(
                 backendID, getExceptionMessage(e));
 
         resultCode = DirectoryServer.getServerErrorResultCode();
@@ -849,7 +849,7 @@
    */
   public boolean isConfigurationAddAcceptable(
        BackendCfg configEntry,
-       List<Message> unacceptableReason)
+       List<LocalizableMessage> unacceptableReason)
   {
     DN backendDN = configEntry.dn();
 
@@ -937,7 +937,7 @@
     DN                backendDN           = cfg.dn();
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Register as a change listener for this backend entry so that we will
@@ -952,7 +952,7 @@
     {
       // The backend is explicitly disabled.  We will log a message to
       // indicate that it won't be enabled and return.
-      Message message =
+      LocalizableMessage message =
           INFO_CONFIG_BACKEND_DISABLED.get(String.valueOf(backendDN));
       logError(message);
       messages.add(message);
@@ -967,7 +967,7 @@
     String backendID = cfg.getBackendId();
     if (DirectoryServer.hasBackend(backendID))
     {
-      Message message = WARN_CONFIG_BACKEND_DUPLICATE_BACKEND_ID.get(
+      LocalizableMessage message = WARN_CONFIG_BACKEND_DUPLICATE_BACKEND_ID.get(
           String.valueOf(backendDN), backendID);
       logError(message);
       messages.add(message);
@@ -1046,7 +1046,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+        LocalizableMessage message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
             backendID, String.valueOf(failureReason));
         logError(message);
         // FIXME -- Do we need to send an admin alert?
@@ -1065,7 +1065,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
+      LocalizableMessage message = ERR_CONFIG_BACKEND_CANNOT_ACQUIRE_SHARED_LOCK.get(
           backendID, stackTraceToSingleLineString(e));
       logError(message);
       // FIXME -- Do we need to send an admin alert?
@@ -1102,7 +1102,7 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-          Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
+          LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
               backendID, String.valueOf(failureReason));
           logError(message);
           // FIXME -- Do we need to send an admin alert?
@@ -1115,7 +1115,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e2);
         }
 
-        Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
+        LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
             backendID, stackTraceToSingleLineString(e2));
         logError(message);
         // FIXME -- Do we need to send an admin alert?
@@ -1146,7 +1146,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND.get(
+      LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND.get(
               backendID, getExceptionMessage(e));
 
       resultCode = DirectoryServer.getServerErrorResultCode();
@@ -1169,7 +1169,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
        BackendCfg configEntry,
-       List<Message> unacceptableReason)
+       List<LocalizableMessage> unacceptableReason)
   {
     DN backendDN = configEntry.dn();
 
@@ -1210,7 +1210,7 @@
     DN                backendDN           = configEntry.dn();
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // See if this backend config manager has a backend registered with the
@@ -1258,7 +1258,7 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-          Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
+          LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
               backend.getBackendID(), String.valueOf(failureReason));
           logError(message);
           // FIXME -- Do we need to send an admin alert?
@@ -1271,7 +1271,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e2);
         }
 
-        Message message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
+        LocalizableMessage message = WARN_CONFIG_BACKEND_CANNOT_RELEASE_SHARED_LOCK.get(
             backend.getBackendID(), stackTraceToSingleLineString(e2));
         logError(message);
         // FIXME -- Do we need to send an admin alert?
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 0ae5c59..9e572fd 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
@@ -32,7 +32,7 @@
 import org.opends.server.types.ResultCode;
 import org.opends.server.api.Backend;
 import static org.forgerock.util.Reject.ifNull;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.CoreMessages.*;
 
 import java.util.TreeMap;
@@ -71,18 +71,18 @@
    *         committed to the server
    * @throws DirectoryException if the base DN cannot be registered
    */
-  public List<Message> registerBaseDN(DN baseDN, Backend backend,
+  public List<LocalizableMessage> registerBaseDN(DN baseDN, Backend backend,
                                       boolean isPrivate)
           throws DirectoryException
   {
 
-    List<Message> errors = new LinkedList<Message>();
+    List<LocalizableMessage> errors = new LinkedList<LocalizableMessage>();
 
     // Check to see if the base DN is already registered with the server.
     Backend existingBackend = baseDNs.get(baseDN);
     if (existingBackend != null)
     {
-      Message message = ERR_REGISTER_BASEDN_ALREADY_EXISTS.
+      LocalizableMessage message = ERR_REGISTER_BASEDN_ALREADY_EXISTS.
           get(String.valueOf(baseDN), backend.getBackendID(),
               existingBackend.getBackendID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
@@ -102,7 +102,7 @@
 
         if (baseDN.isAncestorOf(dn) || baseDN.isDescendantOf(dn))
         {
-          Message message = ERR_REGISTER_BASEDN_HIERARCHY_CONFLICT.
+          LocalizableMessage message = ERR_REGISTER_BASEDN_HIERARCHY_CONFLICT.
               get(String.valueOf(baseDN), backend.getBackendID(),
                   String.valueOf(dn));
           throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -129,7 +129,7 @@
         {
           if (! dn.isDescendantOf(superiorBaseDN))
           {
-            Message message = ERR_REGISTER_BASEDN_DIFFERENT_PARENT_BASES.
+            LocalizableMessage message = ERR_REGISTER_BASEDN_DIFFERENT_PARENT_BASES.
                 get(String.valueOf(baseDN), backend.getBackendID(),
                     String.valueOf(dn));
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -147,7 +147,7 @@
     {
       if (backend.getParentBackend() != null)
       {
-        Message message = ERR_REGISTER_BASEDN_NEW_BASE_NOT_SUBORDINATE.
+        LocalizableMessage message = ERR_REGISTER_BASEDN_NEW_BASE_NOT_SUBORDINATE.
             get(String.valueOf(baseDN), backend.getBackendID(),
                 backend.getParentBackend().getBackendID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -198,7 +198,7 @@
     {
       if (superiorBackend.entryExists(baseDN))
       {
-        Message message = WARN_REGISTER_BASEDN_ENTRIES_IN_MULTIPLE_BACKENDS.
+        LocalizableMessage message = WARN_REGISTER_BASEDN_ENTRIES_IN_MULTIPLE_BACKENDS.
             get(superiorBackend.getBackendID(), String.valueOf(baseDN),
                 backend.getBackendID());
         errors.add(message);
@@ -270,10 +270,10 @@
    *         committed to the server
    * @throws DirectoryException if the base DN could not be deregistered
    */
-  public List<Message> deregisterBaseDN(DN baseDN)
+  public List<LocalizableMessage> deregisterBaseDN(DN baseDN)
          throws DirectoryException
   {
-    LinkedList<Message> errors = new LinkedList<Message>();
+    LinkedList<LocalizableMessage> errors = new LinkedList<LocalizableMessage>();
 
     ifNull(baseDN);
 
@@ -282,7 +282,7 @@
     Backend backend = baseDNs.get(baseDN);
     if (backend == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_DEREGISTER_BASEDN_NOT_REGISTERED.get(String.valueOf(baseDN));
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -379,7 +379,7 @@
       {
         // Suppress this warning message on server shutdown.
         if (!DirectoryServer.getInstance().isShuttingDown()) {
-          Message message = WARN_DEREGISTER_BASEDN_MISSING_HIERARCHY.get(
+          LocalizableMessage message = WARN_DEREGISTER_BASEDN_MISSING_HIERARCHY.get(
             String.valueOf(baseDN), backend.getBackendID());
           errors.add(message);
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/BindOperation.java b/opendj3-server-dev/src/server/org/opends/server/core/BindOperation.java
index 4f45633..3fc6f68 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/BindOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/BindOperation.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
@@ -188,7 +188,7 @@
    * @return  A human-readable message providing the reason that the
    *          authentication failed, or <CODE>null</CODE> if none is available.
    */
-  public abstract Message getAuthFailureReason();
+  public abstract LocalizableMessage getAuthFailureReason();
 
   /**
    * Specifies the reason that the authentication failed.
@@ -196,7 +196,7 @@
    * @param  message providing the reason that the
    *                 authentication failed.
    */
-  public abstract void setAuthFailureReason(Message message);
+  public abstract void setAuthFailureReason(LocalizableMessage message);
 
   /**
    * Retrieves the user entry DN for this bind operation.  It will only be
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 75ec140..2ef3319 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
@@ -34,7 +34,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.plugin.PluginResult;
 import org.opends.server.core.networkgroups.NetworkGroup;
@@ -99,7 +99,7 @@
   private List<Control> responseControls;
 
   /** A message explaining the reason for the authentication failure. */
-  private Message authFailureReason;
+  private LocalizableMessage authFailureReason;
 
   /** The SASL mechanism used for SASL authentication. */
   private String saslMechanism;
@@ -494,7 +494,7 @@
    * {@inheritDoc}
    */
   @Override
-  public final Message getAuthFailureReason()
+  public final LocalizableMessage getAuthFailureReason()
   {
     return authFailureReason;
   }
@@ -503,7 +503,7 @@
    * {@inheritDoc}
    */
   @Override
-  public final void setAuthFailureReason(Message message)
+  public final void setAuthFailureReason(LocalizableMessage message)
   {
     if (DirectoryServer.returnBindErrorMessages())
     {
@@ -652,7 +652,7 @@
     clientConnection.setUnauthenticated();
 
     // Abandon any operations that may be in progress for the client.
-    Message cancelReason = INFO_CANCELED_BY_BIND_REQUEST.get();
+    LocalizableMessage cancelReason = INFO_CANCELED_BY_BIND_REQUEST.get();
     CancelRequest cancelRequest = new CancelRequest(true, cancelReason);
     clientConnection.cancelAllOperationsExcept(cancelRequest, getMessageID());
 
@@ -825,7 +825,7 @@
    */
   private void updateOperationErrMsgAndResCode()
   {
-    Message message = ERR_BIND_OPERATION_UNKNOWN_USER.get();
+    LocalizableMessage message = ERR_BIND_OPERATION_UNKNOWN_USER.get();
     setResultCode(ResultCode.INVALID_CREDENTIALS);
     setAuthFailureReason(message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/BindOperationWrapper.java b/opendj3-server-dev/src/server/org/opends/server/core/BindOperationWrapper.java
index efb682d..615356a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/BindOperationWrapper.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/BindOperationWrapper.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import org.opends.server.types.*;
@@ -72,7 +72,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getAuthFailureReason()
+  public LocalizableMessage getAuthFailureReason()
   {
     return getOperation().getAuthFailureReason();
   }
@@ -162,7 +162,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void setAuthFailureReason(Message reason)
+  public void setAuthFailureReason(LocalizableMessage reason)
   {
     if (DirectoryServer.returnBindErrorMessages())
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/CertificateMapperConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/CertificateMapperConfigManager.java
index ee71f3e..135f1d0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/CertificateMapperConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/CertificateMapperConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -147,7 +148,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       CertificateMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -179,7 +180,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -224,7 +225,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       CertificateMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // certificate mapper is in use.
@@ -241,7 +242,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     DirectoryServer.deregisterCertificateMapper(configuration.dn());
 
@@ -262,7 +263,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       CertificateMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -294,7 +295,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing mapper if it's already enabled.
@@ -409,7 +410,7 @@
                                                     CertificateMapperCfg.class,
                                                     List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(mapper, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -417,7 +418,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -426,7 +427,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_CERTMAPPER_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_CERTMAPPER_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -440,7 +441,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_CERTMAPPER_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_CERTMAPPER_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java
index 6a47c3d..7acbd38 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/ConnectionHandlerConfigManager.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2012 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -103,7 +103,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // Register as a change listener for this connection handler entry
     // so that we will be notified of any changes that may be made to
@@ -169,7 +169,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // See whether the connection handler should be enabled.
     if (connectionHandler == null) {
@@ -356,7 +356,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       ConnectionHandlerCfg configuration,
-      List<Message> unacceptableReasons) {
+      List<LocalizableMessage> unacceptableReasons) {
     if (configuration.isEnabled()) {
       // It's enabled so always validate the class.
       return isJavaClassAcceptable(configuration, unacceptableReasons);
@@ -373,7 +373,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       ConnectionHandlerCfg configuration,
-      List<Message> unacceptableReasons) {
+      List<LocalizableMessage> unacceptableReasons) {
     if (configuration.isEnabled()) {
       // It's enabled so always validate the class.
       return isJavaClassAcceptable(configuration, unacceptableReasons);
@@ -390,7 +390,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       ConnectionHandlerCfg configuration,
-      List<Message> unacceptableReasons) {
+      List<LocalizableMessage> unacceptableReasons) {
     // A delete should always be acceptable, so just return true.
     return true;
   }
@@ -422,7 +422,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE.
+      LocalizableMessage message = ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE.
           get(String.valueOf(className), String.valueOf(config.dn()),
               stackTraceToSingleLineString(e));
       throw new ConfigException(message, e);
@@ -444,7 +444,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE.
+      LocalizableMessage message = ERR_CONFIG_CONNHANDLER_CANNOT_INITIALIZE.
           get(String.valueOf(className), String.valueOf(config.dn()),
               stackTraceToSingleLineString(e));
       throw new ConfigException(message, e);
@@ -460,7 +460,7 @@
   // class is acceptable.
   private boolean isJavaClassAcceptable(
       ConnectionHandlerCfg config,
-      List<Message> unacceptableReasons) {
+      List<LocalizableMessage> unacceptableReasons) {
     String className = config.getJavaClass();
     ConnectionHandlerCfgDefn d =
       ConnectionHandlerCfgDefn.getInstance();
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/CoreConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/CoreConfigManager.java
index 8175608..2931f77 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/CoreConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/CoreConfigManager.java
@@ -28,7 +28,7 @@
 
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ServerManagementContext;
 import org.opends.server.admin.std.meta.GlobalCfgDefn;
@@ -100,7 +100,7 @@
         }
         catch (RuntimeException e)
         {
-          Message message = ERR_CONFIG_CORE_INVALID_SMTP_SERVER.get(server);
+          LocalizableMessage message = ERR_CONFIG_CORE_INVALID_SMTP_SERVER.get(server);
           throw new ConfigException(message, e);
         }
       }
@@ -355,7 +355,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(GlobalCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -371,7 +371,7 @@
         }
         catch (RuntimeException e)
         {
-          Message message = ERR_CONFIG_CORE_INVALID_SMTP_SERVER.get(server);
+          LocalizableMessage message = ERR_CONFIG_CORE_INVALID_SMTP_SERVER.get(server);
           unacceptableReasons.add(message);
           configAcceptable = false;
         }
@@ -385,7 +385,7 @@
         .getAuthenticationPolicy(defaultPasswordPolicyDN);
     if (!policy.isPasswordPolicy())
     {
-      Message message =
+      LocalizableMessage message =
         ERR_CONFIG_PWPOLICY_CANNOT_CHANGE_DEFAULT_POLICY_WRONG_TYPE
           .get(configuration.getDefaultPasswordPolicy());
       unacceptableReasons.add(message);
@@ -405,7 +405,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    List<Message>      messages            = new ArrayList<Message>();
+    List<LocalizableMessage>      messages            = new ArrayList<LocalizableMessage>();
 
     applyGlobalConfiguration(configuration);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/DefaultCompressedSchema.java b/opendj3-server-dev/src/server/org/opends/server/core/DefaultCompressedSchema.java
index 74b1de2..c5133cb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/DefaultCompressedSchema.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/DefaultCompressedSchema.java
@@ -42,7 +42,7 @@
 import java.util.List;
 import java.util.Map.Entry;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.CompressedSchema;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.protocols.asn1.ASN1;
@@ -305,7 +305,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        final Message message = ERR_COMPRESSEDSCHEMA_CANNOT_WRITE_UPDATED_DATA
+        final LocalizableMessage message = ERR_COMPRESSEDSCHEMA_CANNOT_WRITE_UPDATED_DATA
             .get(stackTraceToSingleLineString(e));
         throw new DirectoryException(
             DirectoryServer.getServerErrorResultCode(), message, e);
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 e9cb3a3..0cc5ad2 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
@@ -53,8 +53,7 @@
 import javax.management.MBeanServer;
 import javax.management.MBeanServerFactory;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageDescriptor;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AdministrationConnector;
 import org.opends.server.admin.AdministrationDataSync;
 import org.opends.server.admin.ClassLoaderProvider;
@@ -125,7 +124,7 @@
    * The message to be displayed on the command-line when the user asks for the
    * usage.
    */
-  private static Message toolDescription = INFO_DSCORE_TOOL_DESCRIPTION.get();
+  private static LocalizableMessage toolDescription = INFO_DSCORE_TOOL_DESCRIPTION.get();
 
   /**
    * Return codes used when the hidden option --checkStartability is used.
@@ -722,6 +721,9 @@
    */
   public static final int DEFAULT_TIMEOUT = 200;
 
+  /** Temporary context object, to provide instance methods instead of static methods. */
+  private final DirectoryServerContext serverContext = new DirectoryServerContext();
+
   /**
    * Creates a new instance of the Directory Server.  This will allow only a
    * single instance of the server per JVM.
@@ -731,6 +733,30 @@
     this(new DirectoryEnvironmentConfig());
   }
 
+  /**
+   * Temporary class to provide instance methods instead of static methods for
+   * server. Once all static methods related to context are removed from the
+   * server then DirectoryServer class can be used directly as implementation of
+   * ServerContext.
+   */
+  private class DirectoryServerContext implements ServerContext
+  {
+
+    /** {@inheritDoc} */
+    @Override
+    public String getInstanceRoot()
+    {
+      return DirectoryServer.getInstanceRoot();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public String getServerRoot()
+    {
+      return DirectoryServer.getServerRoot();
+    }
+
+  }
 
 
   /**
@@ -962,7 +988,7 @@
     {
       if (isRunning)
       {
-        Message message = ERR_CANNOT_BOOTSTRAP_WHILE_RUNNING.get();
+        LocalizableMessage message = ERR_CANNOT_BOOTSTRAP_WHILE_RUNNING.get();
         throw new InitializationException(message);
       }
 
@@ -1053,7 +1079,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CANNOT_CREATE_MBEAN_SERVER.get(String.valueOf(e));
+      LocalizableMessage message = ERR_CANNOT_CREATE_MBEAN_SERVER.get(String.valueOf(e));
       throw new InitializationException(message, e);
     }
   }
@@ -1090,7 +1116,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_CANNOT_LOAD_CONFIG_HANDLER_CLASS.get(
                   configClass, stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
@@ -1140,7 +1166,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_CANNOT_INSTANTIATE_CONFIG_HANDLER.get(
                   String.valueOf(configClass),
                   e.getLocalizedMessage());
@@ -1178,7 +1204,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_CANNOT_INITIALIZE_CONFIG_HANDLER.get(
                   String.valueOf(configClass),
                   String.valueOf(configFile),
@@ -1236,13 +1262,13 @@
     {
       if (! isBootstrapped)
       {
-        Message message = ERR_CANNOT_START_BEFORE_BOOTSTRAP.get();
+        LocalizableMessage message = ERR_CANNOT_START_BEFORE_BOOTSTRAP.get();
         throw new InitializationException(message);
       }
 
       if (isRunning)
       {
-        Message message = ERR_CANNOT_START_WHILE_RUNNING.get();
+        LocalizableMessage message = ERR_CANNOT_START_WHILE_RUNNING.get();
         throw new InitializationException(message);
       }
 
@@ -1259,7 +1285,7 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
           {
-            Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(
+            LocalizableMessage message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(
                 lockFile, String.valueOf(failureReason));
             throw new InitializationException(message);
           }
@@ -1277,7 +1303,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(
+          LocalizableMessage message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(
               lockFile, stackTraceToSingleLineString(e));
           throw new InitializationException(message, e);
         }
@@ -1325,7 +1351,7 @@
 
 
       // Initialize the server loggers.
-      loggerConfigManager = new LoggerConfigManager();
+      loggerConfigManager = new LoggerConfigManager(serverContext);
       loggerConfigManager.initializeLoggerConfig();
 
       RuntimeInformation.logInfo();
@@ -1464,9 +1490,9 @@
            pluginConfigManager.invokeStartupPlugins();
       if (! startupPluginResult.continueProcessing())
       {
-        Message message = ERR_STARTUP_PLUGIN_ERROR.
+        LocalizableMessage message = ERR_STARTUP_PLUGIN_ERROR.
             get(startupPluginResult.getErrorMessage(),
-                startupPluginResult.getErrorMessage().getDescriptor().getId());
+                startupPluginResult.getErrorMessage().ordinal());
         throw new InitializationException(message);
       }
 
@@ -1509,7 +1535,7 @@
       // Indicate that the server is now running.
       isRunning = true;
 
-      Message message = NOTE_DIRECTORY_SERVER_STARTED.get();
+      LocalizableMessage message = NOTE_DIRECTORY_SERVER_STARTED.get();
       logError(message);
       sendAlertNotification(this, ALERT_TYPE_SERVER_STARTED, message);
 
@@ -1599,7 +1625,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
+      LocalizableMessage message = ERR_CANNOT_BOOTSTRAP_MATCHING_RULE.
           get(currentFactory.getClass().getName(),
               stackTraceToSingleLineString(e));
       logError(message);
@@ -1837,7 +1863,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_CANNOT_INITIALIZE_CONFIG_HANDLER.get(
                   String.valueOf(configClass),
                   String.valueOf(configFile),
@@ -2039,7 +2065,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CANNOT_GET_ROOT_DSE_CONFIG_ENTRY.get(
+      LocalizableMessage message = ERR_CANNOT_GET_ROOT_DSE_CONFIG_ENTRY.get(
           stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
     }
@@ -2303,7 +2329,7 @@
           // rollback to auto mode is failing too!!
           // well, just log an error message and suggest the admin
           // to restart the server with the last valid config...
-          Message message = ERR_CONFIG_WORKFLOW_CANNOT_CONFIGURE_MANUAL.get();
+          LocalizableMessage message = ERR_CONFIG_WORKFLOW_CANNOT_CONFIGURE_MANUAL.get();
           logError(message);
         }
       }
@@ -2330,7 +2356,7 @@
           // rollback to auto mode is failing too!!
           // well, just log an error message and suggest the admin
           // to restart the server with the last valid config...
-          Message message = ERR_CONFIG_WORKFLOW_CANNOT_CONFIGURE_AUTO.get();
+          LocalizableMessage message = ERR_CONFIG_WORKFLOW_CANNOT_CONFIGURE_AUTO.get();
           logError(message);
         }
       }
@@ -2788,7 +2814,7 @@
     {
       TRACER.debugCaught(DebugLogLevel.ERROR, e);
     }
-    Message message = ERR_CANNOT_GET_ROOT_DSE_CONFIG_ENTRY.get(
+    LocalizableMessage message = ERR_CANNOT_GET_ROOT_DSE_CONFIG_ENTRY.get(
         stackTraceToSingleLineString(e));
     throw new InitializationException(message, e);
   }
@@ -4592,7 +4618,7 @@
    */
   public static void sendAlertNotification(AlertGenerator generator,
                                            String alertType,
-                                           Message alertMessage)
+                                           LocalizableMessage alertMessage)
   {
     if (directoryServer.alertHandlers == null
         || directoryServer.alertHandlers.isEmpty())
@@ -4651,11 +4677,11 @@
     }
 
 
-    Message message = NOTE_SENT_ALERT_NOTIFICATION.get(
+    LocalizableMessage message = NOTE_SENT_ALERT_NOTIFICATION.get(
         generator.getClassName(), alertType,
             alertMessage != null ?
-                    String.valueOf(alertMessage.getDescriptor().getId()) :
-                    String.valueOf(MessageDescriptor.NULL_ID),
+                    alertMessage.resourceName()+"-"+alertMessage.ordinal():
+                    "-1",
             alertMessage);
     logError(message);
   }
@@ -5712,7 +5738,7 @@
     if (existingRootEntryDN != null
         && !existingRootEntryDN.equals(actualRootEntryDN))
     {
-      Message message = ERR_CANNOT_REGISTER_DUPLICATE_ALTERNATE_ROOT_BIND_DN.
+      LocalizableMessage message = ERR_CANNOT_REGISTER_DUPLICATE_ALTERNATE_ROOT_BIND_DN.
           get(String.valueOf(alternateRootBindDN),
               String.valueOf(existingRootEntryDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
@@ -6027,7 +6053,7 @@
           new TreeMap<String, Backend>(directoryServer.backends);
       if (newBackends.containsKey(backendID))
       {
-        Message message = ERR_REGISTER_BACKEND_ALREADY_EXISTS.get(backendID);
+        LocalizableMessage message = ERR_REGISTER_BACKEND_ALREADY_EXISTS.get(backendID);
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else
@@ -6231,14 +6257,14 @@
 
     synchronized (directoryServer)
     {
-      List<Message> warnings =
+      List<LocalizableMessage> warnings =
               directoryServer.baseDnRegistry.registerBaseDN(
                       baseDN, backend, isPrivate);
 
       // Since we've committed the changes we need to log any issues
       // that this registration has caused
       if (warnings != null) {
-        for (Message warning : warnings) {
+        for (LocalizableMessage warning : warnings) {
           logError(warning);
         }
       }
@@ -6280,13 +6306,13 @@
 
     synchronized(directoryServer) {
 
-      List<Message> warnings =
+      List<LocalizableMessage> warnings =
               directoryServer.baseDnRegistry.deregisterBaseDN(baseDN);
 
       // Since we've committed the changes we need to log any issues
       // that this registration has caused
       if (warnings != null) {
-        for (Message error : warnings) {
+        for (LocalizableMessage error : warnings) {
           logError(error);
         }
       }
@@ -6979,7 +7005,7 @@
   private void startConnectionHandlers() throws ConfigException
   {
     Set<HostPort> usedListeners = new LinkedHashSet<HostPort>();
-    Set<Message> errorMessages = new LinkedHashSet<Message>();
+    Set<LocalizableMessage> errorMessages = new LinkedHashSet<LocalizableMessage>();
     // Check that the port specified in the connection handlers is
     // available.
     for (ConnectionHandler<?> c : connectionHandlers)
@@ -6990,7 +7016,7 @@
         {
           // The port was already specified: this is a configuration error,
           // log a message.
-          Message message = ERR_HOST_PORT_ALREADY_SPECIFIED.get(
+          LocalizableMessage message = ERR_HOST_PORT_ALREADY_SPECIFIED.get(
               c.getConnectionHandlerName(), listener.toString());
           logError(message);
           errorMessages.add(message);
@@ -7012,7 +7038,7 @@
     // If there are no connection handlers log a message.
     if (connectionHandlers.isEmpty())
     {
-      Message message = ERR_NOT_AVAILABLE_CONNECTION_HANDLERS.get();
+      LocalizableMessage message = ERR_NOT_AVAILABLE_CONNECTION_HANDLERS.get();
       logError(message);
       throw new ConfigException(ERR_ERROR_STARTING_CONNECTION_HANDLERS.get());
     }
@@ -7067,13 +7093,13 @@
         case MODIFY_DN:
           if (directoryServer.lockdownMode)
           {
-            Message message = NOTE_REJECT_OPERATION_IN_LOCKDOWN_MODE.get();
+            LocalizableMessage message = NOTE_REJECT_OPERATION_IN_LOCKDOWN_MODE.get();
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                                          message);
           }
           else
           {
-            Message message = ERR_REJECT_UNAUTHENTICATED_OPERATION.get();
+            LocalizableMessage message = ERR_REJECT_UNAUTHENTICATED_OPERATION.get();
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                                          message);
           }
@@ -7085,13 +7111,13 @@
          {
            if (directoryServer.lockdownMode)
            {
-             Message message = NOTE_REJECT_OPERATION_IN_LOCKDOWN_MODE.get();
+             LocalizableMessage message = NOTE_REJECT_OPERATION_IN_LOCKDOWN_MODE.get();
              throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                                           message);
            }
            else
            {
-             Message message = ERR_REJECT_UNAUTHENTICATED_OPERATION.get();
+             LocalizableMessage message = ERR_REJECT_UNAUTHENTICATED_OPERATION.get();
              throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                                           message);
            }
@@ -7128,7 +7154,7 @@
 
           DN user = clientConnection.getAuthenticationInfo()
               .getAuthorizationDN();
-          Message message = ERR_ENQUEUE_MUST_CHANGE_PASSWORD
+          LocalizableMessage message = ERR_ENQUEUE_MUST_CHANGE_PASSWORD
               .get(user != null ? user.toString() : "anonymous");
           throw new DirectoryException(
                   ResultCode.CONSTRAINT_VIOLATION, message);
@@ -7902,7 +7928,7 @@
    * @param  reason     The human-readable reason that the directory server is
    *                    shutting down.
    */
-  public static void shutDown(String className, Message reason)
+  public static void shutDown(String className, LocalizableMessage reason)
   {
     synchronized (directoryServer)
     {
@@ -7923,7 +7949,7 @@
     }
 
     // Send an alert notification that the server is shutting down.
-    Message message = NOTE_SERVER_SHUTDOWN.get(className, reason);
+    LocalizableMessage message = NOTE_SERVER_SHUTDOWN.get(className, reason);
     sendAlertNotification(directoryServer, ALERT_TYPE_SERVER_SHUTDOWN,
             message);
 
@@ -8304,7 +8330,7 @@
    * @param  reason     The human-readable reason that the directory server is
    *                    shutting down.
    */
-  public static void restart(String className, Message reason)
+  public static void restart(String className, LocalizableMessage reason)
   {
     restart(className, reason, directoryServer.environmentConfig);
   }
@@ -8322,7 +8348,7 @@
    *                    shutting down.
    * @param  config     The environment configuration to use for the server.
    */
-  public static void restart(String className, Message reason,
+  public static void restart(String className, LocalizableMessage reason,
                              DirectoryEnvironmentConfig config)
   {
     try
@@ -8844,7 +8870,7 @@
 
     if (lockdownMode)
     {
-      Message message = WARN_DIRECTORY_SERVER_ENTERING_LOCKDOWN_MODE.get();
+      LocalizableMessage message = WARN_DIRECTORY_SERVER_ENTERING_LOCKDOWN_MODE.get();
       logError(message);
 
       sendAlertNotification(directoryServer, ALERT_TYPE_ENTERING_LOCKDOWN_MODE,
@@ -8852,7 +8878,7 @@
     }
     else
     {
-      Message message = NOTE_DIRECTORY_SERVER_LEAVING_LOCKDOWN_MODE.get();
+      LocalizableMessage message = NOTE_DIRECTORY_SERVER_LEAVING_LOCKDOWN_MODE.get();
       logError(message);
 
       sendAlertNotification(directoryServer, ALERT_TYPE_LEAVING_LOCKDOWN_MODE,
@@ -8867,7 +8893,7 @@
    * @param msg the message to be displayed on the command-line when the user
    * asks for the usage.
    */
-  public static void setToolDescription (Message msg)
+  public static void setToolDescription (LocalizableMessage msg)
   {
     toolDescription = msg;
   }
@@ -8985,7 +9011,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    Message theToolDescription = DirectoryServer.toolDescription;
+    LocalizableMessage theToolDescription = DirectoryServer.toolDescription;
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.core.DirectoryServer",
                             theToolDescription, false);
@@ -9073,7 +9099,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_DSCORE_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_DSCORE_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       System.err.println(message);
       System.exit(1);
     }
@@ -9086,7 +9112,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_DSCORE_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_DSCORE_ERROR_PARSING_ARGS.get(ae.getMessage());
       System.err.println(message);
       System.err.println(argParser.getUsage());
       System.exit(1);
@@ -9160,7 +9186,7 @@
       return;
     }
     else if (noDetach.isPresent() && timeout.isPresent()) {
-      Message message = ERR_DSCORE_ERROR_NODETACH_TIMEOUT.get();
+      LocalizableMessage message = ERR_DSCORE_ERROR_NODETACH_TIMEOUT.get();
       System.err.println(message);
       System.err.println(argParser.getUsage());
       System.exit(1);
@@ -9175,7 +9201,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
+        LocalizableMessage message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
                                     String.valueOf(failureReason));
         System.err.println(message);
         System.exit(1);
@@ -9188,7 +9214,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
+      LocalizableMessage message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
                                   stackTraceToSingleLineString(e));
       System.err.println(message);
       System.exit(1);
@@ -9362,13 +9388,13 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
 
-      Message message = ERR_DSCORE_CANNOT_BOOTSTRAP.get(ie.getMessage());
+      LocalizableMessage message = ERR_DSCORE_CANNOT_BOOTSTRAP.get(ie.getMessage());
       System.err.println(message);
       System.exit(1);
     }
     catch (Exception e)
     {
-      Message message = ERR_DSCORE_CANNOT_BOOTSTRAP.get(
+      LocalizableMessage message = ERR_DSCORE_CANNOT_BOOTSTRAP.get(
               stackTraceToSingleLineString(e));
       System.err.println(message);
       System.exit(1);
@@ -9385,7 +9411,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ie);
       }
 
-      Message message = ERR_DSCORE_CANNOT_START.get(ie.getMessage());
+      LocalizableMessage message = ERR_DSCORE_CANNOT_START.get(ie.getMessage());
       shutDown(theDirectoryServer.getClass().getName(), message);
     }
     catch (ConfigException ce)
@@ -9395,13 +9421,13 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
 
-      Message message = ERR_DSCORE_CANNOT_START.get(ce.getMessage() +
+      LocalizableMessage message = ERR_DSCORE_CANNOT_START.get(ce.getMessage() +
       (ce.getCause() != null ? " " + ce.getCause().getLocalizedMessage() : ""));
       shutDown(theDirectoryServer.getClass().getName(), message);
     }
     catch (Exception e)
     {
-      Message message = ERR_DSCORE_CANNOT_START.get(
+      LocalizableMessage message = ERR_DSCORE_CANNOT_START.get(
               stackTraceToSingleLineString(e));
       shutDown(theDirectoryServer.getClass().getName(), message);
     }
@@ -9522,7 +9548,7 @@
       else
       {
         // The server's already running.
-        Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
+        LocalizableMessage message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
             String.valueOf(failureReason));
         System.err.println(message);
         isServerRunning = true;
@@ -9532,7 +9558,7 @@
     {
       // We'll treat this as if the server is running because we won't
       // be able to start it anyway.
-      Message message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
+      LocalizableMessage message = ERR_CANNOT_ACQUIRE_EXCLUSIVE_SERVER_LOCK.get(lockFile,
           getExceptionMessage(e));
       System.err.println(message);
       isServerRunning = true;
@@ -9559,7 +9585,7 @@
         {
           // Conflicting arguments
           returnValue = CHECK_ERROR;
-          Message message = ERR_DSCORE_ERROR_NODETACH_AND_WINDOW_SERVICE.get();
+          LocalizableMessage message = ERR_DSCORE_ERROR_NODETACH_AND_WINDOW_SERVICE.get();
           System.err.println(message);
 
         }
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 335ce4e..eafe60a 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -55,7 +55,7 @@
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.server.EntryCacheMonitorProviderCfg;
 import org.opends.server.api.Backend;
 import org.opends.server.config.ConfigConstants;
@@ -137,7 +137,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_ENTRYCACHE_CANNOT_INSTALL_DEFAULT_CACHE.get(
+      LocalizableMessage message = ERR_CONFIG_ENTRYCACHE_CANNOT_INSTALL_DEFAULT_CACHE.get(
           stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
     }
@@ -246,7 +246,7 @@
           } catch (UnsupportedOperationException ex) {
             // Some backend implementations might not support entry
             // cache preload. Log a warning and continue.
-            Message message = WARN_CACHE_PRELOAD_BACKEND_FAILED.get(
+            LocalizableMessage message = WARN_CACHE_PRELOAD_BACKEND_FAILED.get(
               backend.getBackendID());
             logError(message);
             continue;
@@ -262,7 +262,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       EntryCacheCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -330,7 +330,7 @@
 
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     // If an entry cache was installed then remove it.
@@ -394,7 +394,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       EntryCacheCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -442,7 +442,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     // Register a change listener with it so we can be notified of changes
@@ -474,7 +474,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       EntryCacheCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // If we've gotten to this point, then it is acceptable as far as we are
@@ -501,7 +501,7 @@
 
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     // If the entry cache was installed then remove it.
@@ -652,15 +652,15 @@
                                                    EntryCacheCfg.class,
                                                    List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(cache, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
         {
-          MessageBuilder buffer = new MessageBuilder();
+          LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -669,7 +669,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_ENTRYCACHE_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_ENTRYCACHE_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -687,13 +687,13 @@
         if (e instanceof InitializationException) {
           throw (InitializationException) e;
         } else {
-          Message message = ERR_CONFIG_ENTRYCACHE_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_ENTRYCACHE_CONFIG_NOT_ACCEPTABLE.get(
             String.valueOf(configuration.dn()), e.getCause() != null ?
               e.getCause().getMessage() : stackTraceToSingleLineString(e));
           throw new InitializationException(message);
         }
       }
-      Message message = ERR_CONFIG_ENTRYCACHE_CANNOT_INITIALIZE_CACHE.get(
+      LocalizableMessage message = ERR_CONFIG_ENTRYCACHE_CANNOT_INITIALIZE_CACHE.get(
         className, (e.getCause() != null ? e.getCause().getMessage() :
           stackTraceToSingleLineString(e)));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/ExtendedOperationConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/ExtendedOperationConfigManager.java
index a353cc8..49b58b4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/ExtendedOperationConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/ExtendedOperationConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -168,7 +169,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
        ExtendedOperationHandlerCfg configuration,
-       List<Message> unacceptableReasons)
+       List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled()) {
       // It's enabled so always validate the class.
@@ -193,7 +194,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // See whether the handler should be enabled.
     if (handler == null) {
@@ -257,7 +258,7 @@
    */
   public boolean isConfigurationAddAcceptable(
        ExtendedOperationHandlerCfg configuration,
-       List<Message> unacceptableReasons)
+       List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(configuration, unacceptableReasons);
   }
@@ -271,7 +272,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // Register as a change listener for this connection handler entry
     // so that we will be notified of any changes that may be made to
@@ -326,7 +327,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
        ExtendedOperationHandlerCfg configuration,
-       List<Message> unacceptableReasons)
+       List<LocalizableMessage> unacceptableReasons)
   {
     // A delete should always be acceptable, so just return true.
     return true;
@@ -366,7 +367,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_EXTOP_INVALID_CLASS.
+      LocalizableMessage message = ERR_CONFIG_EXTOP_INVALID_CLASS.
           get(String.valueOf(className), String.valueOf(config.dn()),
               String.valueOf(e));
       throw new ConfigException(message, e);
@@ -381,7 +382,7 @@
   // Determines whether or not the new configuration's implementation
   // class is acceptable.
   private boolean isJavaClassAcceptable(ExtendedOperationHandlerCfg config,
-                                        List<Message> unacceptableReasons)
+                                        List<LocalizableMessage> unacceptableReasons)
   {
     String className = config.getJavaClass();
     ExtendedOperationHandlerCfgDefn d =
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/ExtensionConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/ExtensionConfigManager.java
index f3880fe..f68f2c7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/ExtensionConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/ExtensionConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -147,7 +148,7 @@
    */
   public boolean isConfigurationAddAcceptable(
           ExtensionCfg configuration,
-          List<Message> unacceptableReasons)
+          List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -179,7 +180,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -223,7 +224,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       ExtensionCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -238,7 +239,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     DirectoryServer.deregisterExtension(configuration.dn());
 
@@ -258,7 +259,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       ExtensionCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -290,7 +291,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing extension if it's already enabled.
@@ -406,7 +407,7 @@
                                            ExtensionCfg.class,
                                            List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(extension, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -414,7 +415,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -423,7 +424,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_EXTENSION_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_EXTENSION_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -437,7 +438,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_EXTENSION_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_EXTENSION_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
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 5f9945e..d6e66c9 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
@@ -31,7 +31,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.ClassPropertyDefinition;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -203,7 +203,7 @@
   @Override
   public boolean isConfigurationAddAcceptable(
                       GroupImplementationCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -228,7 +228,7 @@
                                  GroupImplementationCfg configuration)
   {
     ResultCode resultCode = ResultCode.SUCCESS;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -264,7 +264,7 @@
   @Override
   public boolean isConfigurationDeleteAcceptable(
                       GroupImplementationCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // group implementation is in use.
@@ -279,7 +279,7 @@
                                  GroupImplementationCfg configuration)
   {
     ResultCode resultCode = ResultCode.SUCCESS;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     Group group = groupImplementations.remove(configuration.dn());
     if (group != null)
@@ -314,7 +314,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       GroupImplementationCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -340,7 +340,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     // Get the existing group implementation if it's already enabled.
     Group existingGroup = groupImplementations.get(configuration.dn());
 
@@ -462,13 +462,13 @@
                                                    GroupImplementationCfg.class,
                                                    List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(group, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
         {
           String reason = collectionToString(unacceptableReasons, ".  ");
-          Message message = ERR_CONFIG_GROUP_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_GROUP_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), reason);
           throw new InitializationException(message);
         }
@@ -478,7 +478,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_GROUP_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_GROUP_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/IdentityMapperConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/IdentityMapperConfigManager.java
index 62c2a3e..c4c0309 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/IdentityMapperConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/IdentityMapperConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -162,7 +163,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       IdentityMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -194,7 +195,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -239,7 +240,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       IdentityMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // identity mapper is in use.
@@ -256,7 +257,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     DirectoryServer.deregisterIdentityMapper(configuration.dn());
 
@@ -276,7 +277,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       IdentityMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -308,7 +309,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing mapper if it's already enabled.
@@ -421,7 +422,7 @@
                                                     IdentityMapperCfg.class,
                                                     List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(mapper, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -429,7 +430,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -438,7 +439,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_IDMAPPER_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_IDMAPPER_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -448,7 +449,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_IDMAPPER_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_IDMAPPER_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/IdleTimeLimitThread.java b/opendj3-server-dev/src/server/org/opends/server/core/IdleTimeLimitThread.java
index a659f35..f165a65 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/IdleTimeLimitThread.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/IdleTimeLimitThread.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions copyright 2012-2014 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -87,7 +87,7 @@
    */
   public void run()
   {
-    Message disconnectMessage = INFO_IDLETIME_LIMIT_EXCEEDED.get();
+    LocalizableMessage disconnectMessage = INFO_IDLETIME_LIMIT_EXCEEDED.get();
 
     long sleepTime = 5000L;
 
@@ -148,7 +148,7 @@
                       TRACER.debugCaught(DebugLogLevel.ERROR, e);
                     }
 
-                    Message message = ERR_IDLETIME_DISCONNECT_ERROR.get(
+                    LocalizableMessage message = ERR_IDLETIME_DISCONNECT_ERROR.get(
                             c.getConnectionID(),
                             stackTraceToSingleLineString(e)
                     );
@@ -175,7 +175,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_IDLETIME_UNEXPECTED_ERROR.get(stackTraceToSingleLineString(e));
         ErrorLogger.logError(message);
       }
@@ -197,7 +197,7 @@
   /**
    * {@inheritDoc}
    */
-  public void processServerShutdown(Message reason)
+  public void processServerShutdown(LocalizableMessage reason)
   {
     synchronized (shutdownLock)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/KeyManagerProviderConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/KeyManagerProviderConfigManager.java
index a699543..043850d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/KeyManagerProviderConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/KeyManagerProviderConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -147,7 +148,7 @@
    */
   public boolean isConfigurationAddAcceptable(
           KeyManagerProviderCfg configuration,
-          List<Message> unacceptableReasons)
+          List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -179,7 +180,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -223,7 +224,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       KeyManagerProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // provider is in use.
@@ -240,7 +241,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     DirectoryServer.deregisterKeyManagerProvider(configuration.dn());
 
@@ -260,7 +261,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       KeyManagerProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -292,7 +293,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing provider if it's already enabled.
@@ -408,7 +409,7 @@
                                            KeyManagerProviderCfg.class,
                                            List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(provider, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -416,7 +417,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -425,7 +426,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_KEYMANAGER_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_KEYMANAGER_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -439,7 +440,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_KEYMANAGER_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_KEYMANAGER_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/LogRetentionPolicyConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/LogRetentionPolicyConfigManager.java
index ea76572..77266df 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/LogRetentionPolicyConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/LogRetentionPolicyConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.admin.std.server.LogRetentionPolicyCfg;
 import org.opends.server.admin.std.server.RootCfg;
@@ -104,7 +105,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       LogRetentionPolicyCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return isJavaClassAcceptable(configuration, unacceptableReasons);
   }
@@ -114,7 +115,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       LogRetentionPolicyCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // TODO: Make sure nothing is using this policy before deleting it.
     return true;
@@ -128,7 +129,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     try
     {
@@ -167,7 +168,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     RetentionPolicy policy = DirectoryServer.getRetentionPolicy(config.dn());
     if(policy != null)
@@ -188,7 +189,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       LogRetentionPolicyCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return isJavaClassAcceptable(configuration, unacceptableReasons);
   }
@@ -202,7 +203,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     RetentionPolicy policy =
         DirectoryServer.getRetentionPolicy(configuration.dn());
@@ -216,7 +217,7 @@
   }
 
   private boolean isJavaClassAcceptable(LogRetentionPolicyCfg config,
-                                        List<Message> unacceptableReasons)
+                                        List<LocalizableMessage> unacceptableReasons)
   {
     String className = config.getJavaClass();
     LogRetentionPolicyCfgDefn d = LogRetentionPolicyCfgDefn.getInstance();
@@ -228,7 +229,7 @@
       theClass = pd.loadClass(className, RetentionPolicy.class);
       theClass.newInstance();
     } catch (Exception e) {
-      Message message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(className,
+      LocalizableMessage message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(className,
                                   config.dn().toString(),
                                   String.valueOf(e));
       unacceptableReasons.add(message);
@@ -242,7 +243,7 @@
       theClass.getMethod("initializeLogRetentionPolicy", config
           .configurationClass());
     } catch (Exception e) {
-      Message message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(className,
+      LocalizableMessage message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(className,
                                   config.dn().toString(),
                                   String.valueOf(e));
       unacceptableReasons.add(message);
@@ -276,11 +277,11 @@
     {
       // Rethrow the exceptions thrown be the invoked method.
       Throwable e = ite.getTargetException();
-      Message message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(
+      LocalizableMessage message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(
           className, config.dn().toString(), stackTraceToSingleLineString(e));
       throw new ConfigException(message, e);
     } catch (Exception e) {
-      Message message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(
+      LocalizableMessage message = ERR_CONFIG_RETENTION_POLICY_INVALID_CLASS.get(
           className, config.dn().toString(), String.valueOf(e));
       throw new ConfigException(message, e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/LogRotationPolicyConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/LogRotationPolicyConfigManager.java
index c4eb0c3..8cbac47 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/LogRotationPolicyConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/LogRotationPolicyConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.loggers.RotationPolicy;
 import org.opends.server.admin.server.ConfigurationAddListener;
@@ -104,7 +105,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       LogRotationPolicyCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return isJavaClassAcceptable(configuration, unacceptableReasons);
   }
@@ -114,7 +115,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       LogRotationPolicyCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // TODO: Make sure nothing is using this policy before deleting it.
     return true;
@@ -128,7 +129,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     try
     {
@@ -167,7 +168,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     RotationPolicy policy = DirectoryServer.getRotationPolicy(config.dn());
     if(policy != null)
@@ -188,7 +189,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       LogRotationPolicyCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return isJavaClassAcceptable(configuration, unacceptableReasons);
   }
@@ -202,7 +203,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     RotationPolicy policy =
         DirectoryServer.getRotationPolicy(configuration.dn());
@@ -216,7 +217,7 @@
   }
 
   private boolean isJavaClassAcceptable(LogRotationPolicyCfg config,
-                                        List<Message> unacceptableReasons)
+                                        List<LocalizableMessage> unacceptableReasons)
   {
     String className = config.getJavaClass();
     LogRotationPolicyCfgDefn d = LogRotationPolicyCfgDefn.getInstance();
@@ -228,7 +229,7 @@
       theClass = pd.loadClass(className, RotationPolicy.class);
       theClass.newInstance();
     } catch (Exception e) {
-      Message message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(className,
+      LocalizableMessage message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(className,
                                   config.dn().toString(),
                                   String.valueOf(e));
       unacceptableReasons.add(message);
@@ -242,7 +243,7 @@
       theClass.getMethod("initializeLogRotationPolicy", config
           .configurationClass());
     } catch (Exception e) {
-      Message message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(className,
+      LocalizableMessage message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(className,
                                   config.dn().toString(),
                                   String.valueOf(e));
       unacceptableReasons.add(message);
@@ -276,11 +277,11 @@
     {
       // Rethrow the exceptions thrown be the invoked method.
       Throwable e = ite.getTargetException();
-      Message message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(
+      LocalizableMessage message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(
           className, config.dn().toString(), stackTraceToSingleLineString(e));
       throw new ConfigException(message, e);
     } catch (Exception e) {
-      Message message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(
+      LocalizableMessage message = ERR_CONFIG_ROTATION_POLICY_INVALID_CLASS.get(
           className, config.dn().toString(), String.valueOf(e));
       throw new ConfigException(message, e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/LoggerConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/LoggerConfigManager.java
index 6f20583..82de250 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/LoggerConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/LoggerConfigManager.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;
 
@@ -32,7 +32,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
 import org.opends.server.admin.server.ServerManagementContext;
@@ -64,6 +64,20 @@
     ConfigurationDeleteListener<LogPublisherCfg>
 {
 
+  private final ServerContext serverContext;
+
+  /**
+   * Create the logger config manager with the provided
+   * server context.
+   *
+   * @param context
+   *            The server context.
+   */
+  public LoggerConfigManager(final ServerContext context)
+  {
+    this.serverContext = context;
+  }
+
   /**
    * Initializes all the log publishers.
    *
@@ -120,7 +134,7 @@
       }
       else
       {
-        Message message = ERR_CONFIG_LOGGER_INVALID_OBJECTCLASS.get(
+        LocalizableMessage message = ERR_CONFIG_LOGGER_INVALID_OBJECTCLASS.get(
             String.valueOf(config.dn()));
         throw new ConfigException(message);
       }
@@ -139,10 +153,10 @@
       logError(WARN_CONFIG_LOGGER_NO_ACTIVE_ERROR_LOGGERS.get());
     }
 
-    DebugLogger.getInstance().initializeLogger(debugPublisherCfgs);
-    AccessLogger.getInstance().initializeLogger(accessPublisherCfgs);
-    HTTPAccessLogger.getInstance().initializeLogger(httpAccessPublisherCfgs);
-    ErrorLogger.getInstance().initializeLogger(errorPublisherCfgs);
+    DebugLogger.getInstance().initializeLogger(debugPublisherCfgs, serverContext);
+    AccessLogger.getInstance().initializeLogger(accessPublisherCfgs, serverContext);
+    HTTPAccessLogger.getInstance().initializeLogger(httpAccessPublisherCfgs, serverContext);
+    ErrorLogger.getInstance().initializeLogger(errorPublisherCfgs, serverContext);
   }
 
   /**
@@ -159,7 +173,7 @@
    *         corresponds.
    */
   private AbstractLogger getLoggerInstance(LogPublisherCfg config,
-      List<Message> messages)
+      List<LocalizableMessage> messages)
   {
     if (config instanceof DebugLogPublisherCfg)
     {
@@ -190,7 +204,7 @@
    */
   @Override
   public boolean isConfigurationAddAcceptable(LogPublisherCfg config,
-                                              List<Message> unacceptableReasons)
+                                              List<LocalizableMessage> unacceptableReasons)
   {
     AbstractLogger instance = getLoggerInstance(config, unacceptableReasons);
     if (instance != null)
@@ -206,7 +220,7 @@
   @Override
   public ConfigChangeResult applyConfigurationAdd(LogPublisherCfg config)
   {
-    List<Message> messages = new ArrayList<Message>(1);
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>(1);
     AbstractLogger instance = getLoggerInstance(config, messages);
     if (instance != null)
     {
@@ -225,7 +239,7 @@
    */
   @Override
   public boolean isConfigurationDeleteAcceptable(LogPublisherCfg config,
-                                              List<Message> unacceptableReasons)
+                                              List<LocalizableMessage> unacceptableReasons)
   {
     AbstractLogger instance = getLoggerInstance(config, unacceptableReasons);
     if (instance != null)
@@ -242,7 +256,7 @@
   @Override
   public ConfigChangeResult applyConfigurationDelete(LogPublisherCfg config)
   {
-    List<Message> messages = new ArrayList<Message>(1);
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>(1);
     AbstractLogger instance = getLoggerInstance(config, messages);
     if (instance != null)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/MatchingRuleConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/MatchingRuleConfigManager.java
index 32b614f..e2d16cd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/MatchingRuleConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/MatchingRuleConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -145,7 +146,7 @@
           }
           catch (DirectoryException de)
           {
-            Message message = WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(
                 String.valueOf(mrConfiguration.dn()), de.getMessageObject());
             ErrorLogger.logError(message);
             continue;
@@ -166,7 +167,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(MatchingRuleCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -197,7 +198,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -225,7 +226,7 @@
       }
       catch (DirectoryException de)
       {
-        Message message = WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(
+        LocalizableMessage message = WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(
                 String.valueOf(configuration.dn()),
                 de.getMessageObject());
         messages.add(message);
@@ -255,7 +256,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(MatchingRuleCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // If the matching rule is enabled, then check to see if there are any
     // defined attribute types or matching rule uses that use the matching rule.
@@ -273,7 +274,7 @@
           ApproximateMatchingRule amr = at.getApproximateMatchingRule();
           if ((amr != null) && oid.equals(amr.getOID()))
           {
-            Message message =
+            LocalizableMessage message =
                     WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT.get(
                             matchingRule.getName(),
                             at.getNameOrOID());
@@ -286,7 +287,7 @@
           EqualityMatchingRule emr = at.getEqualityMatchingRule();
           if ((emr != null) && oid.equals(emr.getOID()))
           {
-            Message message =
+            LocalizableMessage message =
                     WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT.get(
                             matchingRule.getName(),
                             at.getNameOrOID());
@@ -299,7 +300,7 @@
           OrderingMatchingRule omr = at.getOrderingMatchingRule();
           if ((omr != null) && oid.equals(omr.getOID()))
           {
-            Message message =
+            LocalizableMessage message =
                     WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT.get(
                             matchingRule.getName(),
                             at.getNameOrOID());
@@ -312,7 +313,7 @@
           SubstringMatchingRule smr = at.getSubstringMatchingRule();
           if ((smr != null) && oid.equals(smr.getOID()))
           {
-            Message message =
+            LocalizableMessage message =
                     WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_AT.get(
                             matchingRule.getName(),
                             at.getNameOrOID());
@@ -328,7 +329,7 @@
         {
           if (oid.equals(mru.getMatchingRule().getOID()))
           {
-            Message message =
+            LocalizableMessage message =
                     WARN_CONFIG_SCHEMA_CANNOT_DELETE_MR_IN_USE_BY_MRU.get(
                             matchingRule.getName(),
                             mru.getName());
@@ -354,7 +355,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     MatchingRuleFactory<?> factory =
             matchingRuleFactories.remove(configuration.dn());
@@ -376,7 +377,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(MatchingRuleCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
     if (configuration.isEnabled())
@@ -415,7 +416,7 @@
             ApproximateMatchingRule amr = at.getApproximateMatchingRule();
             if ((amr != null) && oid.equals(amr.getOID()))
             {
-              Message message =
+              LocalizableMessage message =
                       WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT.get(
                               matchingRule.getName(),
                               at.getNameOrOID());
@@ -428,7 +429,7 @@
             EqualityMatchingRule emr = at.getEqualityMatchingRule();
             if ((emr != null) && oid.equals(emr.getOID()))
             {
-              Message message =
+              LocalizableMessage message =
                       WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT.get(
                               matchingRule.getName(),
                               at.getNameOrOID());
@@ -441,7 +442,7 @@
             OrderingMatchingRule omr = at.getOrderingMatchingRule();
             if ((omr != null) && oid.equals(omr.getOID()))
             {
-              Message message =
+              LocalizableMessage message =
                       WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT.get(
                               matchingRule.getName(),
                               at.getNameOrOID());
@@ -454,7 +455,7 @@
             SubstringMatchingRule smr = at.getSubstringMatchingRule();
             if ((smr != null) && oid.equals(smr.getOID()))
             {
-              Message message =
+              LocalizableMessage message =
                       WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_AT
                       .get(matchingRule.getName(), at.getNameOrOID());
               unacceptableReasons.add(message);
@@ -469,7 +470,7 @@
           {
             if (oid.equals(mru.getMatchingRule().getOID()))
             {
-              Message message =
+              LocalizableMessage message =
                       WARN_CONFIG_SCHEMA_CANNOT_DISABLE_MR_IN_USE_BY_MRU.get(
                               matchingRule.getName(), mru.getName());
               unacceptableReasons.add(message);
@@ -494,7 +495,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
    // Get the existing matching rule factory if it's already enabled.
@@ -550,7 +551,7 @@
       }
       catch (DirectoryException de)
       {
-        Message message = WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(
+        LocalizableMessage message = WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(
                 String.valueOf(configuration.dn()), de.getMessageObject());
         messages.add(message);
 
@@ -621,7 +622,7 @@
                                                MatchingRuleCfg.class,
                                                List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(factory,
                                              configuration,
                                              unacceptableReasons);
@@ -630,7 +631,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -639,7 +640,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_SCHEMA_MR_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_SCHEMA_MR_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -649,7 +650,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_SCHEMA_MR_CANNOT_INITIALIZE.
+      LocalizableMessage message = ERR_CONFIG_SCHEMA_MR_CANNOT_INITIALIZE.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/MonitorConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/MonitorConfigManager.java
index a682c44..0055f87 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/MonitorConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/MonitorConfigManager.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -144,7 +144,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       MonitorProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -176,7 +176,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -220,7 +220,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       MonitorProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // It will always be acceptable to delete or disable a monitor provider.
     return true;
@@ -236,7 +236,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     MonitorProvider<?> monitor = monitors.remove(configuration.dn());
     if (monitor != null)
@@ -255,7 +255,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       MonitorProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -287,7 +287,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing monitor provider if it's already enabled.
@@ -395,7 +395,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_MONITOR_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_MONITOR_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/OperationWrapper.java b/opendj3-server-dev/src/server/org/opends/server/core/OperationWrapper.java
index f0fbd50..8f3891b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/OperationWrapper.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/OperationWrapper.java
@@ -22,15 +22,15 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
 import java.util.List;
 import java.util.Map;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.controls.ControlDecoder;
 import org.opends.server.types.*;
@@ -80,14 +80,14 @@
    * {@inheritDoc}
    */
   @Override
-  public void appendErrorMessage(Message message)
+  public void appendErrorMessage(LocalizableMessage message)
   {
     operation.appendErrorMessage(message);
   }
 
   /** {@inheritDoc} */
   @Override
-  public void appendMaskedErrorMessage(Message maskedMessage)
+  public void appendMaskedErrorMessage(LocalizableMessage maskedMessage)
   {
     operation.appendMaskedErrorMessage(maskedMessage);
   }
@@ -117,7 +117,7 @@
   public void disconnectClient(
           DisconnectReason disconnectReason,
           boolean sendNotification,
-          Message message
+          LocalizableMessage message
   )
   {
     operation.disconnectClient(
@@ -209,14 +209,14 @@
    * {@inheritDoc}
    */
   @Override
-  public MessageBuilder getErrorMessage()
+  public LocalizableMessageBuilder getErrorMessage()
   {
     return operation.getErrorMessage();
   }
 
   /** {@inheritDoc} */
   @Override
-  public MessageBuilder getMaskedErrorMessage()
+  public LocalizableMessageBuilder getMaskedErrorMessage()
   {
     return operation.getMaskedErrorMessage();
   }
@@ -450,7 +450,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void setErrorMessage(MessageBuilder errorMessage)
+  public void setErrorMessage(LocalizableMessageBuilder errorMessage)
   {
     operation.setErrorMessage(errorMessage);
   }
@@ -475,7 +475,7 @@
 
   /** {@inheritDoc} */
   @Override
-  public void setMaskedErrorMessage(MessageBuilder maskedErrorMessage)
+  public void setMaskedErrorMessage(LocalizableMessageBuilder maskedErrorMessage)
   {
     operation.setMaskedErrorMessage(maskedErrorMessage);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/PasswordGeneratorConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/PasswordGeneratorConfigManager.java
index fed9c31..0fac481 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/PasswordGeneratorConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/PasswordGeneratorConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -144,7 +145,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PasswordGeneratorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -175,7 +176,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing generator if it's already enabled.
@@ -249,7 +250,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       PasswordGeneratorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -280,7 +281,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -323,7 +324,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(
-      PasswordGeneratorCfg configuration, List<Message> unacceptableReasons)
+      PasswordGeneratorCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     // A delete should always be acceptable, so just return true.
     return true;
@@ -402,7 +403,7 @@
                                             PasswordGeneratorCfg.class,
                                             List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(generator, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -410,7 +411,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -419,7 +420,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_PWGENERATOR_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_PWGENERATOR_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -429,7 +430,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_PWGENERATOR_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_PWGENERATOR_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyConfigManager.java
index 247d5b3..de46c7e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyConfigManager.java
@@ -39,7 +39,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.ClassPropertyDefinition;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
@@ -116,14 +116,14 @@
     // there are no policies defined, so that's a problem.
     if (passwordPolicyNames.length == 0)
     {
-      Message message = ERR_CONFIG_PWPOLICY_NO_POLICIES.get();
+      LocalizableMessage message = ERR_CONFIG_PWPOLICY_NO_POLICIES.get();
       throw new ConfigException(message);
     }
 
     // Get the DN of the default password policy from the core configuration.
     if (DirectoryServer.getDefaultPasswordPolicyDN() == null)
     {
-      Message message = ERR_CONFIG_PWPOLICY_NO_DEFAULT_POLICY.get();
+      LocalizableMessage message = ERR_CONFIG_PWPOLICY_NO_DEFAULT_POLICY.get();
       throw new ConfigException(message);
     }
 
@@ -141,7 +141,7 @@
     if (null == DirectoryServer.getDefaultPasswordPolicy())
     {
       DN defaultPolicyDN = DirectoryServer.getDefaultPasswordPolicyDN();
-      Message message = ERR_CONFIG_PWPOLICY_MISSING_DEFAULT_POLICY.get(String
+      LocalizableMessage message = ERR_CONFIG_PWPOLICY_MISSING_DEFAULT_POLICY.get(String
           .valueOf(defaultPolicyDN));
       throw new ConfigException(message);
     }
@@ -165,7 +165,7 @@
           {
             // Just log a message instead of failing the server initialization.
             // This will allow the administrator to fix any problems.
-            Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+            LocalizableMessage message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
                 String.valueOf(subentry.getDN()),
                 stackTraceToSingleLineString(e));
             logError(message);
@@ -203,7 +203,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(
-      AuthenticationPolicyCfg configuration, List<Message> unacceptableReason)
+      AuthenticationPolicyCfg configuration, List<LocalizableMessage> unacceptableReason)
   {
     // See if we can create a password policy from the provided configuration
     // entry. If so, then it's acceptable.
@@ -221,7 +221,7 @@
   {
     // See if we can create a password policy from the provided configuration
     // entry. If so, then register it with the Directory Server.
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     try
     {
       createAuthenticationPolicy(configuration);
@@ -259,7 +259,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(
-      AuthenticationPolicyCfg configuration, List<Message> unacceptableReason)
+      AuthenticationPolicyCfg configuration, List<LocalizableMessage> unacceptableReason)
   {
     // We'll allow the policy to be removed as long as it isn't the default.
     // FIXME: something like a referential integrity check is needed to ensure
@@ -268,7 +268,7 @@
     DN defaultPolicyDN = DirectoryServer.getDefaultPasswordPolicyDN();
     if ((defaultPolicyDN != null) && defaultPolicyDN.equals(configuration.dn()))
     {
-      Message message = WARN_CONFIG_PWPOLICY_CANNOT_DELETE_DEFAULT_POLICY
+      LocalizableMessage message = WARN_CONFIG_PWPOLICY_CANNOT_DELETE_DEFAULT_POLICY
           .get(String.valueOf(defaultPolicyDN));
       unacceptableReason.add(message);
       return false;
@@ -291,7 +291,7 @@
     // FIXME: something like a referential integrity check is needed to ensure
     // a policy is not removed when referenced by a user entry (either
     // directly or via a virtual attribute).
-    ArrayList<Message> messages = new ArrayList<Message>(1);
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>(1);
     DN policyDN = configuration.dn();
     DN defaultPolicyDN = DirectoryServer.getDefaultPasswordPolicyDN();
     if ((defaultPolicyDN != null) && defaultPolicyDN.equals(policyDN))
@@ -481,7 +481,7 @@
     {
       if (!(policyConfiguration instanceof PasswordPolicyCfg))
       {
-        Message msg = ERR_CONFIG_PWPOLICY_DEFAULT_POLICY_IS_WRONG_TYPE
+        LocalizableMessage msg = ERR_CONFIG_PWPOLICY_DEFAULT_POLICY_IS_WRONG_TYPE
             .get(String.valueOf(policyConfiguration.dn()));
         throw new ConfigException(msg);
       }
@@ -507,7 +507,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+      LocalizableMessage message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
           String.valueOf(policyConfiguration.dn()),
           stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
@@ -547,7 +547,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+      LocalizableMessage message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
           String.valueOf(policyConfiguration.dn()),
           stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
@@ -563,7 +563,7 @@
   // implementation class is acceptable.
   private static boolean isAuthenticationPolicyConfigurationAcceptable(
       AuthenticationPolicyCfg policyConfiguration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // If this is going to be the default password policy then check the type is
     // correct.
@@ -572,7 +572,7 @@
     {
       if (!(policyConfiguration instanceof PasswordPolicyCfg))
       {
-        Message msg = ERR_CONFIG_PWPOLICY_DEFAULT_POLICY_IS_WRONG_TYPE
+        LocalizableMessage msg = ERR_CONFIG_PWPOLICY_DEFAULT_POLICY_IS_WRONG_TYPE
             .get(String.valueOf(policyConfiguration.dn()));
         unacceptableReasons.add(msg);
         return false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyFactory.java b/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyFactory.java
index 273b5bb..99f68bc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyFactory.java
@@ -41,7 +41,7 @@
 import java.text.SimpleDateFormat;
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.PasswordPolicyCfgDefn.*;
 import org.opends.server.admin.std.server.PasswordPolicyCfg;
@@ -129,7 +129,7 @@
     public ConfigChangeResult applyConfigurationChange(
         PasswordPolicyCfg configuration)
     {
-      ArrayList<Message> messages = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
       try
       {
         updateConfiguration(configuration, this);
@@ -169,7 +169,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationChangeAcceptable(
-        PasswordPolicyCfg configuration, List<Message> unacceptableReasons)
+        PasswordPolicyCfg configuration, List<LocalizableMessage> unacceptableReasons)
     {
       try
       {
@@ -177,21 +177,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+        LocalizableMessage message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
             String.valueOf(configuration.dn()), ce.getMessage());
         unacceptableReasons.add(message);
         return false;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
+        LocalizableMessage message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG.get(
             String.valueOf(configuration.dn()), ie.getMessage());
         unacceptableReasons.add(message);
         return false;
       }
       catch (Exception e)
       {
-        Message message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG
+        LocalizableMessage message = ERR_CONFIG_PWPOLICY_INVALID_POLICY_CONFIG
             .get(String.valueOf(configuration.dn()),
                 stackTraceToSingleLineString(e));
         unacceptableReasons.add(message);
@@ -255,7 +255,7 @@
           syntax = syntaxOID;
         }
 
-        Message message = ERR_PWPOLICY_INVALID_PASSWORD_ATTRIBUTE_SYNTAX.get(
+        LocalizableMessage message = ERR_PWPOLICY_INVALID_PASSWORD_ATTRIBUTE_SYNTAX.get(
             String.valueOf(configEntryDN), passwordAttribute.getNameOrOID(),
             String.valueOf(syntax));
         throw new ConfigException(message);
@@ -272,7 +272,7 @@
 
         if (authPasswordSyntax && (!scheme.supportsAuthPasswordSyntax()))
         {
-          Message message = ERR_PWPOLICY_SCHEME_DOESNT_SUPPORT_AUTH.get(
+          LocalizableMessage message = ERR_PWPOLICY_SCHEME_DOESNT_SUPPORT_AUTH.get(
               String.valueOf(schemeDN), passwordAttribute.getNameOrOID());
           throw new ConfigException(message);
         }
@@ -295,7 +295,7 @@
           }
           else
           {
-            Message message = ERR_PWPOLICY_DEPRECATED_SCHEME_NOT_AUTH.get(
+            LocalizableMessage message = ERR_PWPOLICY_DEPRECATED_SCHEME_NOT_AUTH.get(
                 String.valueOf(configEntryDN), String.valueOf(schemeDN));
             throw new ConfigException(message);
           }
@@ -340,7 +340,7 @@
       if ((!configuration.isExpirePasswordsWithoutWarning())
           && (configuration.getPasswordExpirationWarningInterval() <= 0))
       {
-        Message message =
+        LocalizableMessage message =
           ERR_PWPOLICY_MUST_HAVE_WARNING_IF_NOT_EXPIRE_WITHOUT_WARNING
             .get(String.valueOf(configEntryDN));
         throw new ConfigException(message);
@@ -379,7 +379,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWPOLICY_CANNOT_DETERMINE_REQUIRE_CHANGE_BY_TIME
+        LocalizableMessage message = ERR_PWPOLICY_CANNOT_DETERMINE_REQUIRE_CHANGE_BY_TIME
             .get(String.valueOf(configEntryDN), getExceptionMessage(e));
         throw new InitializationException(message, e);
       }
@@ -400,7 +400,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_PWPOLICY_INVALID_LAST_LOGIN_TIME_FORMAT.get(
+          LocalizableMessage message = ERR_PWPOLICY_INVALID_LAST_LOGIN_TIME_FORMAT.get(
               String.valueOf(configEntryDN), String.valueOf(formatString));
           throw new ConfigException(message);
         }
@@ -425,7 +425,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            Message message =
+            LocalizableMessage message =
               ERR_PWPOLICY_INVALID_PREVIOUS_LAST_LOGIN_TIME_FORMAT
                 .get(String.valueOf(configEntryDN), String.valueOf(s));
             throw new ConfigException(message);
@@ -447,7 +447,7 @@
           if ((warnInterval + configuration.getMinPasswordAge()) >=configuration
               .getMaxPasswordAge())
           {
-            Message message =
+            LocalizableMessage message =
               ERR_PWPOLICY_MIN_AGE_PLUS_WARNING_GREATER_THAN_MAX_AGE
                 .get(String.valueOf(configEntryDN));
             throw new ConfigException(message);
@@ -455,7 +455,7 @@
         }
         else if (warnInterval >= configuration.getMaxPasswordAge())
         {
-          Message message = ERR_PWPOLICY_WARNING_INTERVAL_LARGER_THAN_MAX_AGE
+          LocalizableMessage message = ERR_PWPOLICY_WARNING_INTERVAL_LARGER_THAN_MAX_AGE
               .get(String.valueOf(configEntryDN));
           throw new ConfigException(message);
         }
@@ -1216,7 +1216,7 @@
   @Override
   public boolean isConfigurationAcceptable(
       final PasswordPolicyCfg configuration,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     try
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyState.java b/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyState.java
index 22d2771..dd1af5d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyState.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/PasswordPolicyState.java
@@ -31,8 +31,8 @@
 import java.text.SimpleDateFormat;
 import java.util.*;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.meta.PasswordPolicyCfgDefn;
 import org.opends.server.api.*;
 import org.opends.server.loggers.ErrorLogger;
@@ -248,7 +248,7 @@
                   userDNString, stackTraceToSingleLineString(e));
             }
 
-            Message message = ERR_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME.
+            LocalizableMessage message = ERR_PWPSTATE_CANNOT_DECODE_GENERALIZED_TIME.
                 get(v.getValue().toString(), attributeType.getNameOrOID(),
                     userDNString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -2808,7 +2808,7 @@
    */
   public boolean passwordIsAcceptable(Operation operation, Entry userEntry,
       ByteString newPassword, Set<ByteString> currentPasswords,
-      MessageBuilder invalidReason)
+      LocalizableMessageBuilder invalidReason)
   {
     for (PasswordValidator<?> validator : passwordPolicy
         .getPasswordValidators())
@@ -3620,7 +3620,7 @@
    */
   public void generateAccountStatusNotification(
           AccountStatusNotificationType notificationType,
-          Entry userEntry, Message message,
+          Entry userEntry, LocalizableMessage message,
           Map<AccountStatusNotificationProperty,List<String>>
                notificationProperties)
   {
@@ -3694,7 +3694,7 @@
     ResultCode resultCode = internalModify.getResultCode();
     if (resultCode != ResultCode.SUCCESS)
     {
-      Message message = ERR_PWPSTATE_CANNOT_UPDATE_USER_ENTRY.get(userDNString,
+      LocalizableMessage message = ERR_PWPSTATE_CANNOT_UPDATE_USER_ENTRY.get(userDNString,
                             String.valueOf(internalModify.getErrorMessage()));
 
       // If this is a root user, or if the password policy says that we should
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/PasswordStorageSchemeConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/PasswordStorageSchemeConfigManager.java
index 18caa2a..a14f02b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/PasswordStorageSchemeConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/PasswordStorageSchemeConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -137,7 +138,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       PasswordStorageSchemeCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -174,7 +175,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     // Get the configuration entry DN and the associated
@@ -235,7 +236,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       PasswordStorageSchemeCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // returned status -- all is fine by default
@@ -245,7 +246,7 @@
     DN configEntryDN = configuration.dn();
     if (storageSchemes.containsKey(configEntryDN))
     {
-      Message message = ERR_CONFIG_PWSCHEME_EXISTS.get(
+      LocalizableMessage message = ERR_CONFIG_PWSCHEME_EXISTS.get(
               String.valueOf(configEntryDN));
       unacceptableReasons.add (message);
       status = false;
@@ -283,7 +284,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     // Register a change listener with it so we can be notified of changes
@@ -317,7 +318,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       PasswordStorageSchemeCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // A delete should always be acceptable, so just return true.
@@ -335,7 +336,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     uninstallPasswordStorageScheme (configuration.dn());
@@ -431,7 +432,7 @@
                              "isConfigurationAcceptable",
                              PasswordStorageSchemeCfg.class, List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(passwordStorageScheme,
                                                      configuration,
                                                      unacceptableReasons);
@@ -440,7 +441,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -449,7 +450,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_PWSCHEME_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_PWSCHEME_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -459,7 +460,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_PWSCHEME_INITIALIZATION_FAILED.get(className,
+      LocalizableMessage message = ERR_CONFIG_PWSCHEME_INITIALIZATION_FAILED.get(className,
           String.valueOf(configuration.dn()),
           stackTraceToSingleLineString(e)
           );
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/PasswordValidatorConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/PasswordValidatorConfigManager.java
index a519382..735aa59 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/PasswordValidatorConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/PasswordValidatorConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -148,7 +149,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       PasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -180,7 +181,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -226,7 +227,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       PasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // password validator is in use.
@@ -243,7 +244,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     DirectoryServer.deregisterPasswordValidator(configuration.dn());
 
@@ -264,7 +265,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -296,7 +297,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing validator if it's already enabled.
@@ -415,7 +416,7 @@
                                             PasswordValidatorCfg.class,
                                             List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(validator, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -423,7 +424,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -432,7 +433,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_PWVALIDATOR_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_PWVALIDATOR_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -442,7 +443,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_PWVALIDATOR_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_PWVALIDATOR_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
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 2f3d994..ed57fa7 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
@@ -33,8 +33,8 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.ClassPropertyDefinition;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -379,15 +379,15 @@
                                                     PluginCfg.class,
                                                     List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(plugin, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
         {
-          MessageBuilder buffer = new MessageBuilder();
+          LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -396,7 +396,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_PLUGIN_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_PLUGIN_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -406,7 +406,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_PLUGIN_CANNOT_INITIALIZE.
+      LocalizableMessage message = ERR_CONFIG_PLUGIN_CANNOT_INITIALIZE.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
@@ -960,7 +960,7 @@
           // determination.
           if (pluginArray.length == 0)
           {
-            Message message = WARN_CONFIG_PLUGIN_EMPTY_ELEMENT_IN_ORDER.get(
+            LocalizableMessage message = WARN_CONFIG_PLUGIN_EMPTY_ELEMENT_IN_ORDER.get(
                 pluginType.getName());
             logError(message);
           }
@@ -974,7 +974,7 @@
             // determination.
             if (pluginArray.length == 0)
             {
-              Message message = WARN_CONFIG_PLUGIN_MULTIPLE_WILDCARDS_IN_ORDER.
+              LocalizableMessage message = WARN_CONFIG_PLUGIN_MULTIPLE_WILDCARDS_IN_ORDER.
                   get(pluginType.getName());
               logError(message);
             }
@@ -997,7 +997,7 @@
               // make the determination.
               if (pluginArray.length == 0)
               {
-                Message message = WARN_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES.get(
+                LocalizableMessage message = WARN_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES.get(
                     pluginType.getName(), token);
                 logError(message);
               }
@@ -1014,7 +1014,7 @@
               // make the determination.
               if (pluginArray.length == 0)
               {
-                Message message = WARN_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES.get(
+                LocalizableMessage message = WARN_CONFIG_PLUGIN_LISTED_MULTIPLE_TIMES.get(
                     pluginType.getName(), token);
                 logError(message);
               }
@@ -1032,7 +1032,7 @@
         // determination.
         if (pluginArray.length == 0)
         {
-          Message message =
+          LocalizableMessage message =
               WARN_CONFIG_PLUGIN_ORDER_NO_WILDCARD.get(pluginType.getName());
           logError(message);
         }
@@ -1467,7 +1467,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_STARTUP_PLUGIN_EXCEPTION.get(
+        LocalizableMessage message = ERR_PLUGIN_STARTUP_PLUGIN_EXCEPTION.get(
                 String.valueOf(p.getPluginEntryDN()),
                 stackTraceToSingleLineString(e));
 
@@ -1476,17 +1476,17 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_STARTUP_PLUGIN_RETURNED_NULL.get(
+        LocalizableMessage message = ERR_PLUGIN_STARTUP_PLUGIN_RETURNED_NULL.get(
             String.valueOf(p.getPluginEntryDN()));
         logError(message);
         return PluginResult.Startup.stopStartup(message);
       }
       else if (! result.continueProcessing())
       {
-        Message message = ERR_PLUGIN_STARTUP_PLUGIN_FAIL_ABORT.
+        LocalizableMessage message = ERR_PLUGIN_STARTUP_PLUGIN_FAIL_ABORT.
             get(String.valueOf(p.getPluginEntryDN()),
                 result.getErrorMessage(),
-                result.getErrorMessage().getDescriptor().getId());
+                result.getErrorMessage().ordinal());
         logError(message);
         return result;
       }
@@ -1510,7 +1510,7 @@
    *
    * @param  reason  The human-readable reason for the shutdown.
    */
-  public void invokeShutdownPlugins(Message reason)
+  public void invokeShutdownPlugins(LocalizableMessage reason)
   {
     for (DirectoryServerPlugin p : shutdownPlugins)
     {
@@ -1525,7 +1525,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_SHUTDOWN_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_SHUTDOWN_PLUGIN_EXCEPTION.
             get(String.valueOf(p.getPluginEntryDN()),
                 stackTraceToSingleLineString(e));
         logError(message);
@@ -1561,7 +1561,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_CONNECT_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_CONNECT_PLUGIN_EXCEPTION.
             get(String.valueOf(p.getPluginEntryDN()),
                 clientConnection.getConnectionID(),
                 clientConnection.getClientAddress(),
@@ -1575,7 +1575,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_CONNECT_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_CONNECT_PLUGIN_RETURNED_NULL.
             get(String.valueOf(p.getPluginEntryDN()),
                 clientConnection.getConnectionID(),
                 clientConnection.getClientAddress());
@@ -1617,7 +1617,7 @@
   public PluginResult.PostDisconnect invokePostDisconnectPlugins(
                                         ClientConnection clientConnection,
                                         DisconnectReason disconnectReason,
-                                        Message message)
+                                        LocalizableMessage message)
   {
     PluginResult.PostDisconnect result = null;
 
@@ -1635,7 +1635,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message msg = ERR_PLUGIN_POST_DISCONNECT_PLUGIN_EXCEPTION.
+        LocalizableMessage msg = ERR_PLUGIN_POST_DISCONNECT_PLUGIN_EXCEPTION.
             get(String.valueOf(p.getPluginEntryDN()),
                 clientConnection.getConnectionID(),
                 clientConnection.getClientAddress(),
@@ -1646,7 +1646,7 @@
 
       if (result == null)
       {
-        Message msg = ERR_PLUGIN_POST_DISCONNECT_PLUGIN_RETURNED_NULL.
+        LocalizableMessage msg = ERR_PLUGIN_POST_DISCONNECT_PLUGIN_RETURNED_NULL.
             get(String.valueOf(p.getPluginEntryDN()),
                 clientConnection.getConnectionID(),
                 clientConnection.getClientAddress());
@@ -1698,7 +1698,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_LDIF_IMPORT_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_LDIF_IMPORT_PLUGIN_EXCEPTION.
             get(String.valueOf(p.getPluginEntryDN()),
                 String.valueOf(entry.getName()),
                 stackTraceToSingleLineString(e));
@@ -1709,7 +1709,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_LDIF_IMPORT_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_LDIF_IMPORT_PLUGIN_RETURNED_NULL.
             get(String.valueOf(p.getPluginEntryDN()),
                 String.valueOf(entry.getName()));
         logError(message);
@@ -1798,7 +1798,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_LDIF_EXPORT_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_LDIF_EXPORT_PLUGIN_EXCEPTION.
             get(String.valueOf(p.getPluginEntryDN()),
                 String.valueOf(entry.getName()),
                 stackTraceToSingleLineString(e));
@@ -1809,7 +1809,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_LDIF_EXPORT_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_LDIF_EXPORT_PLUGIN_RETURNED_NULL.
             get(String.valueOf(p.getPluginEntryDN()),
                 String.valueOf(entry.getName()));
         logError(message);
@@ -1894,7 +1894,7 @@
       TRACER.debugCaught(DebugLogLevel.ERROR, e);
     }
 
-    Message message =
+    LocalizableMessage message =
         ERR_PLUGIN_PRE_PARSE_PLUGIN_EXCEPTION.get(operation.getOperationType()
             .getOperationName(), String.valueOf(plugin.getPluginEntryDN()),
             operation.getConnectionID(), operation.getOperationID(),
@@ -1908,7 +1908,7 @@
   private PluginResult.PreParse handlePreParseResult(
       PreParseOperation operation, DirectoryServerPlugin plugin)
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PLUGIN_PRE_PARSE_PLUGIN_RETURNED_NULL.get(operation
             .getOperationType().getOperationName(), String.valueOf(plugin
             .getPluginEntryDN()), operation.getConnectionID(), String
@@ -2696,7 +2696,7 @@
       TRACER.debugCaught(DebugLogLevel.ERROR, e);
     }
 
-    Message message =
+    LocalizableMessage message =
         ERR_PLUGIN_PRE_OPERATION_PLUGIN_EXCEPTION.get(operation
             .getOperationType().getOperationName(), String.valueOf(plugin
             .getPluginEntryDN()), operation.getConnectionID(), operation
@@ -2713,7 +2713,7 @@
       PreOperationOperation operation, int i, DirectoryServerPlugin[] plugins,
       DirectoryServerPlugin plugin)
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PLUGIN_PRE_OPERATION_PLUGIN_RETURNED_NULL.get(operation
             .getOperationType().getOperationName(), String.valueOf(plugin
             .getPluginEntryDN()), operation.getConnectionID(), operation
@@ -3023,7 +3023,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
             get(abandonOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 abandonOperation.getConnectionID(),
@@ -3034,7 +3034,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
             get(abandonOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 abandonOperation.getConnectionID(),
@@ -3111,7 +3111,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
             get(addOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 addOperation.getConnectionID(), addOperation.getOperationID(),
@@ -3121,7 +3121,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
             get(addOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 addOperation.getConnectionID(), addOperation.getOperationID());
@@ -3197,7 +3197,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
             get(bindOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 bindOperation.getConnectionID(), bindOperation.getOperationID(),
@@ -3207,7 +3207,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
             get(bindOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 bindOperation.getConnectionID(),
@@ -3284,7 +3284,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
             get(compareOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 compareOperation.getConnectionID(),
@@ -3295,7 +3295,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
             get(compareOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 compareOperation.getConnectionID(),
@@ -3372,7 +3372,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
             get(deleteOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 deleteOperation.getConnectionID(),
@@ -3383,7 +3383,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
             get(deleteOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 deleteOperation.getConnectionID(),
@@ -3460,7 +3460,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
             get(extendedOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 extendedOperation.getConnectionID(),
@@ -3471,7 +3471,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
             get(extendedOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 extendedOperation.getConnectionID(),
@@ -3548,7 +3548,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
             get(modifyOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 modifyOperation.getConnectionID(),
@@ -3559,7 +3559,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
             get(modifyOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 modifyOperation.getConnectionID(),
@@ -3635,7 +3635,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
             get(modifyDNOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 modifyDNOperation.getConnectionID(),
@@ -3646,7 +3646,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
             get(modifyDNOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 modifyDNOperation.getConnectionID(),
@@ -3723,7 +3723,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
             get(searchOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 searchOperation.getConnectionID(),
@@ -3734,7 +3734,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
             get(searchOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 searchOperation.getConnectionID(),
@@ -3811,7 +3811,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_EXCEPTION.
             get(unbindOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 unbindOperation.getConnectionID(),
@@ -3822,7 +3822,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_OPERATION_PLUGIN_RETURNED_NULL.
             get(unbindOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 unbindOperation.getConnectionID(),
@@ -3890,7 +3890,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
             get(addOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 addOperation.getConnectionID(), addOperation.getOperationID(),
@@ -3900,7 +3900,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
             get(addOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 addOperation.getConnectionID(), addOperation.getOperationID());
@@ -3957,7 +3957,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
             get(bindOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 bindOperation.getConnectionID(), bindOperation.getOperationID(),
@@ -3967,7 +3967,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
             get(bindOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 bindOperation.getConnectionID(),
@@ -4025,7 +4025,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
             get(compareOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 compareOperation.getConnectionID(),
@@ -4036,7 +4036,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
             get(compareOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 compareOperation.getConnectionID(),
@@ -4094,7 +4094,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
             get(deleteOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 deleteOperation.getConnectionID(),
@@ -4105,7 +4105,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
             get(deleteOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 deleteOperation.getConnectionID(),
@@ -4162,7 +4162,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
             get(extendedOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 extendedOperation.getConnectionID(),
@@ -4173,7 +4173,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
             get(extendedOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 extendedOperation.getConnectionID(),
@@ -4231,7 +4231,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
             get(modifyOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 modifyOperation.getConnectionID(),
@@ -4242,7 +4242,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
             get(modifyOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 modifyOperation.getConnectionID(),
@@ -4300,7 +4300,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
             get(modifyDNOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 modifyDNOperation.getConnectionID(),
@@ -4311,7 +4311,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
             get(modifyDNOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 modifyDNOperation.getConnectionID(),
@@ -4369,7 +4369,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_EXCEPTION.
             get(searchOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 searchOperation.getConnectionID(),
@@ -4380,7 +4380,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_POST_RESPONSE_PLUGIN_RETURNED_NULL.
             get(searchOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 searchOperation.getConnectionID(),
@@ -4428,7 +4428,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
             get(addOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 addOperation.getConnectionID(), addOperation.getOperationID(),
@@ -4463,7 +4463,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
             get(deleteOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 deleteOperation.getConnectionID(),
@@ -4499,7 +4499,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
             get(modifyOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 modifyOperation.getConnectionID(),
@@ -4535,7 +4535,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_POST_SYNCHRONIZATION_PLUGIN_EXCEPTION.
             get(modifyDNOperation.getOperationType().getOperationName(),
                 String.valueOf(p.getPluginEntryDN()),
                 modifyDNOperation.getConnectionID(),
@@ -4583,7 +4583,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_SEARCH_ENTRY_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_SEARCH_ENTRY_PLUGIN_EXCEPTION.
             get(String.valueOf(p.getPluginEntryDN()),
                 searchOperation.getConnectionID(),
                 searchOperation.getOperationID(),
@@ -4597,7 +4597,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_SEARCH_ENTRY_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_SEARCH_ENTRY_PLUGIN_RETURNED_NULL.
             get(String.valueOf(p.getPluginEntryDN()),
                 searchOperation.getConnectionID(),
                 searchOperation.getOperationID(),
@@ -4661,7 +4661,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_SEARCH_REFERENCE_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_SEARCH_REFERENCE_PLUGIN_EXCEPTION.
             get(String.valueOf(p.getPluginEntryDN()),
                 searchOperation.getConnectionID(),
                 searchOperation.getOperationID(),
@@ -4675,7 +4675,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_SEARCH_REFERENCE_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_SEARCH_REFERENCE_PLUGIN_RETURNED_NULL.
             get(String.valueOf(p.getPluginEntryDN()),
                 searchOperation.getConnectionID(),
                 searchOperation.getOperationID(),
@@ -4745,7 +4745,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_EXCEPTION.get(
                 String.valueOf(p.getPluginEntryDN()),
                 modifyDNOperation.getConnectionID(),
@@ -4759,7 +4759,7 @@
 
       if (result == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_PLUGIN_SUBORDINATE_MODIFY_DN_PLUGIN_RETURNED_NULL.get(
                         String.valueOf(p.getPluginEntryDN()),
                         modifyDNOperation.getConnectionID(),
@@ -4821,7 +4821,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_PLUGIN_SUBORDINATE_DELETE_PLUGIN_EXCEPTION.get(
                 String.valueOf(p.getPluginEntryDN()),
                 deleteOperation.getConnectionID(),
@@ -4835,7 +4835,7 @@
 
       if (result == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_PLUGIN_SUBORDINATE_DELETE_PLUGIN_RETURNED_NULL.get(
                         String.valueOf(p.getPluginEntryDN()),
                         deleteOperation.getConnectionID(),
@@ -4892,7 +4892,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_EXCEPTION.
+        LocalizableMessage message = ERR_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_EXCEPTION.
             get(String.valueOf(p.getPluginEntryDN()),
                 operation.getConnectionID(), operation.getOperationID(),
                 stackTraceToSingleLineString(e));
@@ -4904,7 +4904,7 @@
 
       if (result == null)
       {
-        Message message = ERR_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_RETURNED_NULL.
+        LocalizableMessage message = ERR_PLUGIN_INTERMEDIATE_RESPONSE_PLUGIN_RETURNED_NULL.
             get(String.valueOf(p.getPluginEntryDN()),
                 operation.getConnectionID(), operation.getOperationID());
         logError(message);
@@ -4936,7 +4936,7 @@
    */
   @Override
   public boolean isConfigurationAddAcceptable(PluginCfg configuration,
-                                              List<Message> unacceptableReasons)
+                                              List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -4977,7 +4977,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -5028,7 +5028,7 @@
   @Override
   public boolean isConfigurationDeleteAcceptable(
                       PluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // We will always allow plugins to be removed.
     return true;
@@ -5045,7 +5045,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     deregisterPlugin(configuration.dn());
 
@@ -5060,7 +5060,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       PluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -5101,7 +5101,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing plugin if it's already enabled.
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/RootDNConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/RootDNConfigManager.java
index 00787cd..96a92cb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/RootDNConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/RootDNConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -167,7 +168,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(RootDNUserCfg configuration,
-                                              List<Message> unacceptableReasons)
+                                              List<LocalizableMessage> unacceptableReasons)
   {
     // The new root user must not have an alternate bind DN that is already
     // in use.
@@ -178,7 +179,7 @@
       if (existingRootDN != null)
       {
 
-        Message message = ERR_CONFIG_ROOTDN_CONFLICTING_MAPPING.get(
+        LocalizableMessage message = ERR_CONFIG_ROOTDN_CONFLICTING_MAPPING.get(
                 String.valueOf(altBindDN),
                 String.valueOf(configuration.dn()),
                 String.valueOf(existingRootDN));
@@ -202,7 +203,7 @@
 
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     HashSet<DN> altBindDNs = new HashSet<DN>();
     for (DN altBindDN : configuration.getAlternateBindDN())
@@ -242,7 +243,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(RootDNUserCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -260,7 +261,7 @@
 
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     HashSet<DN> altBindDNs = alternateBindDNs.remove(configuration.dn());
     if (altBindDNs != null)
@@ -280,7 +281,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(RootDNUserCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -292,7 +293,7 @@
       if ((existingRootDN != null) &&
           (! existingRootDN.equals(configuration.dn())))
       {
-        Message message = ERR_CONFIG_ROOTDN_CONFLICTING_MAPPING.get(
+        LocalizableMessage message = ERR_CONFIG_ROOTDN_CONFLICTING_MAPPING.get(
                 String.valueOf(altBindDN),
                 String.valueOf(configuration.dn()),
                 String.valueOf(existingRootDN));
@@ -315,7 +316,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     HashSet<DN> setDNs = new HashSet<DN>();
     HashSet<DN> addDNs = new HashSet<DN>();
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/RootDseWorkflowTopology.java b/opendj3-server-dev/src/server/org/opends/server/core/RootDseWorkflowTopology.java
index d00786c..330da71 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/RootDseWorkflowTopology.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/RootDseWorkflowTopology.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
 
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.core.networkgroups.NetworkGroupNamingContexts;
 import org.opends.server.types.*;
 
@@ -157,7 +158,7 @@
     // If the result code is still uninitialized (ie no naming context),
     // we should return NO_SUCH_OBJECT
     workflowResultCode.elaborateGlobalResultCode(
-      ResultCode.NO_SUCH_OBJECT, new MessageBuilder(Message.EMPTY));
+      ResultCode.NO_SUCH_OBJECT, new LocalizableMessageBuilder(LocalizableMessage.EMPTY));
 
     // Set the operation result code and error message
     searchOp.setResultCode(workflowResultCode.resultCode());
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/RootPrivilegeChangeListener.java b/opendj3-server-dev/src/server/org/opends/server/core/RootPrivilegeChangeListener.java
index 986036d..0291d0b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/RootPrivilegeChangeListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/RootPrivilegeChangeListener.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -67,7 +68,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(RootDNCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // No special validation is required.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/SASLConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/SASLConfigManager.java
index ef635a5..c125aac 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/SASLConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/SASLConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -149,7 +150,7 @@
    */
   public boolean isConfigurationAddAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -181,7 +182,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -224,7 +225,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // SASL mechanism handler is in use.
@@ -241,7 +242,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     SASLMechanismHandler handler = handlers.remove(configuration.dn());
     if (handler != null)
@@ -259,7 +260,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -291,7 +292,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing handler if it's already enabled.
@@ -402,7 +403,7 @@
                                           SASLMechanismHandlerCfg.class,
                                           List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(handler, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -410,7 +411,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -419,7 +420,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_SASL_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_SASL_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -429,7 +430,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_SASL_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_SASL_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/SchemaConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/SchemaConfigManager.java
index b008dad..59dcdf1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/SchemaConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/SchemaConfigManager.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;
 
@@ -33,7 +33,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.config.ConfigException;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.schema.*;
@@ -217,13 +217,13 @@
     {
       if (schemaInstanceDir == null || ! schemaInstanceDir.exists())
       {
-        Message message =
+        LocalizableMessage message =
           ERR_CONFIG_SCHEMA_NO_SCHEMA_DIR.get(schemaInstanceDirPath);
         throw new InitializationException(message);
       }
       if (! schemaInstanceDir.isDirectory())
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_SCHEMA_DIR_NOT_DIRECTORY.get(schemaInstanceDirPath);
         throw new InitializationException(message);
       }
@@ -276,7 +276,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES.get(
+      LocalizableMessage message = ERR_CONFIG_SCHEMA_CANNOT_LIST_FILES.get(
           schemaInstanceDirPath, getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -381,7 +381,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = WARN_CONFIG_SCHEMA_CANNOT_OPEN_FILE.get(
+      LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_OPEN_FILE.get(
               schemaFile, schemaDirPath, getExceptionMessage(e));
 
       if (failOnError)
@@ -416,7 +416,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = WARN_CONFIG_SCHEMA_CANNOT_READ_LDIF_ENTRY.get(
+      LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_READ_LDIF_ENTRY.get(
               schemaFile, schemaDirPath, getExceptionMessage(e));
 
       if (failOnError)
@@ -437,7 +437,7 @@
       Entry e = reader.readEntry(false);
       if (e != null)
       {
-        Message message = WARN_CONFIG_SCHEMA_MULTIPLE_ENTRIES_IN_FILE.get(
+        LocalizableMessage message = WARN_CONFIG_SCHEMA_MULTIPLE_ENTRIES_IN_FILE.get(
             schemaFile, schemaDirPath);
         logError(message);
       }
@@ -449,7 +449,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = WARN_CONFIG_SCHEMA_UNPARSEABLE_EXTRA_DATA_IN_FILE.get(
+      LocalizableMessage message = WARN_CONFIG_SCHEMA_UNPARSEABLE_EXTRA_DATA_IN_FILE.get(
           schemaFile, schemaDirPath, getExceptionMessage(e));
       logError(message);
     }
@@ -803,7 +803,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_LDAP_SYNTAX.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_LDAP_SYNTAX.get(
                     schemaFile,
                     de.getMessageObject());
 
@@ -824,7 +824,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_LDAP_SYNTAX.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_LDAP_SYNTAX.get(
                     schemaFile,
                     v.getValue().toString() + ":  " + getExceptionMessage(e));
 
@@ -854,7 +854,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_LDAP_SYNTAX.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CONFLICTING_LDAP_SYNTAX.get(
                 schemaFile, de.getMessageObject());
             logError(message);
 
@@ -903,7 +903,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE.get(
                     schemaFile, de.getMessageObject());
 
             if (failOnError)
@@ -923,7 +923,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_ATTR_TYPE.get(
                     schemaFile, v.getValue().toString() + ":  " +
                     getExceptionMessage(e));
             if (failOnError)
@@ -951,7 +951,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_ATTR_TYPE.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CONFLICTING_ATTR_TYPE.get(
                 schemaFile, de.getMessageObject());
             logError(message);
 
@@ -1000,7 +1000,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_OC.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_OC.get(
                     schemaFile,
                     de.getMessageObject());
 
@@ -1021,7 +1021,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_OC.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_OC.get(
                     schemaFile,
                     v.getValue().toString() + ":  " + getExceptionMessage(e));
 
@@ -1050,7 +1050,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_OC.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CONFLICTING_OC.get(
                 schemaFile, de.getMessageObject());
             logError(message);
 
@@ -1098,7 +1098,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM.get(
                     schemaFile, de.getMessageObject());
             if (failOnError)
             {
@@ -1117,7 +1117,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_NAME_FORM.get(
                     schemaFile,  v.getValue().toString() + ":  " +
                     getExceptionMessage(e));
 
@@ -1146,7 +1146,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_NAME_FORM.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CONFLICTING_NAME_FORM.get(
                 schemaFile, de.getMessageObject());
             logError(message);
 
@@ -1195,7 +1195,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DCR.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DCR.get(
                     schemaFile, de.getMessageObject());
 
             if (failOnError)
@@ -1215,7 +1215,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DCR.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DCR.get(
                     schemaFile,v.getValue().toString() + ":  " +
                     getExceptionMessage(e));
 
@@ -1244,7 +1244,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_DCR.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CONFLICTING_DCR.get(
                 schemaFile, de.getMessageObject());
             logError(message);
 
@@ -1293,7 +1293,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DSR.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DSR.get(
                     schemaFile, de.getMessageObject());
 
             if (failOnError)
@@ -1313,7 +1313,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DSR.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_DSR.get(
                     schemaFile, v.getValue().toString() + ":  " +
                                         getExceptionMessage(e));
 
@@ -1342,7 +1342,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_DSR.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CONFLICTING_DSR.get(
                 schemaFile, de.getMessageObject());
             logError(message);
 
@@ -1391,7 +1391,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_MRU.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_MRU.get(
                     schemaFile, de.getMessageObject());
 
             if (failOnError)
@@ -1411,7 +1411,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_MRU.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CANNOT_PARSE_MRU.get(
                     schemaFile,
                     v.getValue().toString() + ":  " +
                     getExceptionMessage(e));
@@ -1441,7 +1441,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = WARN_CONFIG_SCHEMA_CONFLICTING_MRU.get(
+            LocalizableMessage message = WARN_CONFIG_SCHEMA_CONFLICTING_MRU.get(
                 schemaFile, de.getMessageObject());
             logError(message);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/SearchOperationBasis.java b/opendj3-server-dev/src/server/org/opends/server/core/SearchOperationBasis.java
index b4fba3c..def3439 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/SearchOperationBasis.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/SearchOperationBasis.java
@@ -29,7 +29,7 @@
 import java.util.*;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AuthenticationPolicyState;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.plugin.PluginResult;
@@ -1374,7 +1374,7 @@
   private void updateOperationErrMsgAndResCode()
   {
     setResultCode(ResultCode.NO_SUCH_OBJECT);
-    Message message =
+    LocalizableMessage message =
             ERR_SEARCH_BASE_DOESNT_EXIST.get(String.valueOf(getBaseDN()));
     appendErrorMessage(message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/ServerContext.java b/opendj3-server-dev/src/server/org/opends/server/core/ServerContext.java
new file mode 100644
index 0000000..e2bd1d6
--- /dev/null
+++ b/opendj3-server-dev/src/server/org/opends/server/core/ServerContext.java
@@ -0,0 +1,48 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *      Copyright 2014 ForgeRock AS.
+ */
+package org.opends.server.core;
+
+/**
+ * Context for the server, giving access to global properties of the server.
+ */
+public interface ServerContext
+{
+
+  /**
+   * Returns the directory of server instance.
+   *
+   * @return the instance root directory
+   */
+  public String getInstanceRoot();
+
+  /**
+   * Returns the root directory of server.
+   *
+   * @return the server root directory
+   */
+  public String getServerRoot();
+
+}
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/SubentryPasswordPolicy.java b/opendj3-server-dev/src/server/org/opends/server/core/SubentryPasswordPolicy.java
index 4d3973c..cc2d2d8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/SubentryPasswordPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/SubentryPasswordPolicy.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 
 package org.opends.server.core;
@@ -36,7 +36,7 @@
 
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.PasswordPolicyCfgDefn.*;
 import org.opends.server.api.AccountStatusNotificationHandler;
 import org.opends.server.api.PasswordGenerator;
@@ -155,13 +155,13 @@
           break;
         }
       }
-      Message message = ERR_PWPOLICY_NO_PWDPOLICY_OC.get(subentry.getDN()
+      LocalizableMessage message = ERR_PWPOLICY_NO_PWDPOLICY_OC.get(subentry.getDN()
           .toString());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
     else if (!objectClasses.containsKey(pwdPolicyOC))
     {
-      Message message = ERR_PWPOLICY_NO_PWDPOLICY_OC.get(subentry.getDN()
+      LocalizableMessage message = ERR_PWPOLICY_NO_PWDPOLICY_OC.get(subentry.getDN()
           .toString());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -203,7 +203,7 @@
           syntax = syntaxOID;
         }
 
-        Message message = ERR_PWPOLICY_INVALID_PASSWORD_ATTRIBUTE_SYNTAX.get(
+        LocalizableMessage message = ERR_PWPOLICY_INVALID_PASSWORD_ATTRIBUTE_SYNTAX.get(
             String.valueOf(passwordPolicySubentryDN),
             pPasswordAttribute.getNameOrOID(), String.valueOf(syntax));
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/SynchronizationProviderConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/SynchronizationProviderConfigManager.java
index 38b685e..241983b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/SynchronizationProviderConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/SynchronizationProviderConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -165,7 +166,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // Attempt to get the existing synchronization provider. This will only
     // succeed if it is currently enabled.
@@ -254,7 +255,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       SynchronizationProviderCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -278,7 +279,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // Register as a change listener for this synchronization provider entry
     // so that we will be notified if when it is disabled or enabled.
@@ -336,7 +337,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       SynchronizationProviderCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -379,7 +380,7 @@
     } catch (Exception e)
     {
        // Handle the exception: put a message in the unacceptable reasons.
-       Message message = ERR_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS.
+       LocalizableMessage message = ERR_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS.
            get(String.valueOf(className), String.valueOf(configuration.dn()),
                stackTraceToSingleLineString(e));
        throw new ConfigException(message, e);
@@ -391,7 +392,7 @@
     } catch (Exception e)
     {
       // Handle the exception: put a message in the unacceptable reasons.
-      Message message = ERR_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER.
+      LocalizableMessage message = ERR_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER.
           get(String.valueOf(className), String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new ConfigException(message, e);
@@ -410,7 +411,7 @@
       {}
 
       // Handle the exception: put a message in the unacceptable reasons.
-      Message message = ERR_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER.get(
+      LocalizableMessage message = ERR_CONFIG_SYNCH_ERROR_INITIALIZING_PROVIDER.get(
               String.valueOf(className), String.valueOf(configuration.dn()));
       throw new ConfigException(message, e);
     }
@@ -430,7 +431,7 @@
    */
   private boolean isJavaClassAcceptable(
       SynchronizationProviderCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     String className = configuration.getJavaClass();
     SynchronizationProviderCfgDefn d =
@@ -448,7 +449,7 @@
     } catch (Exception e)
     {
        // Handle the exception: put a message in the unacceptable reasons.
-       Message message = ERR_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS.get(
+       LocalizableMessage message = ERR_CONFIG_SYNCH_UNABLE_TO_LOAD_PROVIDER_CLASS.get(
                String.valueOf(className),
                String.valueOf(configuration.dn()),
                stackTraceToSingleLineString(e));
@@ -474,7 +475,7 @@
     } catch (Exception e)
     {
       // Handle the exception: put a message in the unacceptable reasons.
-      Message message = ERR_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER.get(
+      LocalizableMessage message = ERR_CONFIG_SYNCH_UNABLE_TO_INSTANTIATE_PROVIDER.get(
               String.valueOf(className),
               String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
@@ -515,7 +516,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       SynchronizationProviderCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // A delete should always be acceptable, so just return true.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/TrustManagerProviderConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/TrustManagerProviderConfigManager.java
index ae7a15f..048e541 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/TrustManagerProviderConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/TrustManagerProviderConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -149,7 +150,7 @@
    */
   public boolean isConfigurationAddAcceptable(
           TrustManagerProviderCfg configuration,
-          List<Message> unacceptableReasons)
+          List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -181,7 +182,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -226,7 +227,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
                       TrustManagerProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // provider is in use.
@@ -243,7 +244,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     DirectoryServer.deregisterTrustManagerProvider(configuration.dn());
 
@@ -263,7 +264,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       TrustManagerProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -295,7 +296,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing provider if it's already enabled.
@@ -410,7 +411,7 @@
                                            TrustManagerProviderCfg.class,
                                            List.class);
 
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         Boolean acceptable = (Boolean) method.invoke(provider, configuration,
                                                      unacceptableReasons);
         if (! acceptable)
@@ -418,7 +419,7 @@
           StringBuilder buffer = new StringBuilder();
           if (! unacceptableReasons.isEmpty())
           {
-            Iterator<Message> iterator = unacceptableReasons.iterator();
+            Iterator<LocalizableMessage> iterator = unacceptableReasons.iterator();
             buffer.append(iterator.next());
             while (iterator.hasNext())
             {
@@ -427,7 +428,7 @@
             }
           }
 
-          Message message = ERR_CONFIG_TRUSTMANAGER_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_TRUSTMANAGER_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
         }
@@ -437,7 +438,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_TRUSTMANAGER_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_TRUSTMANAGER_INITIALIZATION_FAILED.
           get(className, String.valueOf(configuration.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, 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 532e21e..9905654 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
@@ -31,7 +31,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.ClassPropertyDefinition;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -126,12 +126,12 @@
           VirtualAttributeProvider<? extends VirtualAttributeCfg> provider =
                loadProvider(className, cfg, true);
 
-          Map<Message, DirectoryException> reasons =
-              new LinkedHashMap<Message, DirectoryException>();
+          Map<LocalizableMessage, DirectoryException> reasons =
+              new LinkedHashMap<LocalizableMessage, DirectoryException>();
           Set<SearchFilter> filters = buildFilters(cfg, reasons);
           if (!reasons.isEmpty())
           {
-            Entry<Message, DirectoryException> entry =
+            Entry<LocalizableMessage, DirectoryException> entry =
                 reasons.entrySet().iterator().next();
             throw new ConfigException(entry.getKey(), entry.getValue());
           }
@@ -140,7 +140,7 @@
           {
             if (provider.isMultiValued())
             {
-              Message message = ERR_CONFIG_VATTR_SV_TYPE_WITH_MV_PROVIDER.
+              LocalizableMessage message = ERR_CONFIG_VATTR_SV_TYPE_WITH_MV_PROVIDER.
                   get(String.valueOf(cfg.dn()),
                       cfg.getAttributeType().getNameOrOID(), className);
               throw new ConfigException(message);
@@ -149,7 +149,7 @@
                      VirtualAttributeCfgDefn.ConflictBehavior.
                           MERGE_REAL_AND_VIRTUAL)
             {
-              Message message = ERR_CONFIG_VATTR_SV_TYPE_WITH_MERGE_VALUES.
+              LocalizableMessage message = ERR_CONFIG_VATTR_SV_TYPE_WITH_MERGE_VALUES.
                   get(String.valueOf(cfg.dn()),
                       cfg.getAttributeType().getNameOrOID());
               throw new ConfigException(message);
@@ -184,7 +184,7 @@
   @Override
   public boolean isConfigurationAddAcceptable(
                       VirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -208,7 +208,7 @@
   }
 
   private Set<SearchFilter> buildFilters(VirtualAttributeCfg cfg,
-      Map<Message, DirectoryException> unacceptableReasons)
+      Map<LocalizableMessage, DirectoryException> unacceptableReasons)
   {
     Set<SearchFilter> filters = new LinkedHashSet<SearchFilter>();
     for (String filterString : cfg.getFilter())
@@ -224,7 +224,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        Message message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
+        LocalizableMessage message = ERR_CONFIG_VATTR_INVALID_SEARCH_FILTER.get(
                 filterString,
                 String.valueOf(cfg.dn()),
                 de.getMessageObject());
@@ -241,7 +241,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    List<Message>     messages            = new ArrayList<Message>();
+    List<LocalizableMessage>     messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -251,8 +251,8 @@
     }
 
     // Make sure that we can parse all of the search filters.
-    Map<Message, DirectoryException> reasons =
-        new LinkedHashMap<Message, DirectoryException>();
+    Map<LocalizableMessage, DirectoryException> reasons =
+        new LinkedHashMap<LocalizableMessage, DirectoryException>();
     Set<SearchFilter> filters = buildFilters(configuration, reasons);
     if (!reasons.isEmpty())
     {
@@ -293,7 +293,7 @@
   @Override
   public boolean isConfigurationDeleteAcceptable(
                       VirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // We will always allow getting rid of a virtual attribute rule.
     return true;
@@ -306,7 +306,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    List<Message>     messages            = new ArrayList<Message>();
+    List<LocalizableMessage>     messages            = new ArrayList<LocalizableMessage>();
 
     VirtualAttributeRule rule = rules.remove(configuration.dn());
     if (rule != null)
@@ -321,7 +321,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       VirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     if (configuration.isEnabled())
     {
@@ -345,10 +345,10 @@
   }
 
   private boolean areFiltersAcceptable(VirtualAttributeCfg cfg,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
-    Map<Message, DirectoryException> reasons =
-        new LinkedHashMap<Message, DirectoryException>();
+    Map<LocalizableMessage, DirectoryException> reasons =
+        new LinkedHashMap<LocalizableMessage, DirectoryException>();
     buildFilters(cfg, reasons);
     if (!reasons.isEmpty())
     {
@@ -365,7 +365,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    List<Message>     messages            = new ArrayList<Message>();
+    List<LocalizableMessage>     messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the existing rule if it's already enabled.
@@ -387,8 +387,8 @@
 
 
     // Make sure that we can parse all of the search filters.
-    Map<Message, DirectoryException> reasons =
-        new LinkedHashMap<Message, DirectoryException>();
+    Map<LocalizableMessage, DirectoryException> reasons =
+        new LinkedHashMap<LocalizableMessage, DirectoryException>();
     Set<SearchFilter> filters = buildFilters(configuration, reasons);
     if (!reasons.isEmpty())
     {
@@ -471,11 +471,11 @@
       }
       else
       {
-        List<Message> unacceptableReasons = new ArrayList<Message>();
+        List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
         if (!provider.isConfigurationAcceptable(cfg, unacceptableReasons))
         {
           String reasons = collectionToString(unacceptableReasons, ".  ");
-          Message message = ERR_CONFIG_VATTR_CONFIG_NOT_ACCEPTABLE.get(
+          LocalizableMessage message = ERR_CONFIG_VATTR_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(cfg.dn()), reasons);
           throw new InitializationException(message);
         }
@@ -485,7 +485,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_VATTR_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_VATTR_INITIALIZATION_FAILED.
           get(className, String.valueOf(cfg.dn()),
               stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/WorkQueueConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/WorkQueueConfigManager.java
index 108bb66..3488633 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/WorkQueueConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/WorkQueueConfigManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -118,7 +119,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_WORK_QUEUE_INITIALIZATION_FAILED.
+      LocalizableMessage message = ERR_CONFIG_WORK_QUEUE_INITIALIZATION_FAILED.
           get(workQueueConfig.getJavaClass(),
               String.valueOf(workQueueConfig.dn()),
               stackTraceToSingleLineString(e));
@@ -132,7 +133,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(WorkQueueCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // Changes to the work queue configuration will always be acceptable to this
     // generic implementation.
@@ -148,7 +149,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // If the work queue class has been changed, then we should warn the user
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 cd9b1a6..9434efb 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
@@ -34,7 +34,7 @@
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
@@ -131,7 +131,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       WorkflowCfg   configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // Nothing to check.
     return true;
@@ -147,7 +147,7 @@
   {
     ResultCode    resultCode          = ResultCode.SUCCESS;
     boolean       adminActionRequired = false;
-    List<Message> messages            = new ArrayList<Message>();
+    List<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     configuration.addChangeListener(this);
 
@@ -179,7 +179,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       WorkflowCfg   configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     boolean acceptable = true;
     WorkflowImpl existingWorkflow = workflows.get(configuration.dn());
@@ -203,7 +203,7 @@
   {
     ResultCode    resultCode          = ResultCode.SUCCESS;
     boolean       adminActionRequired = false;
-    List<Message> messages            = new ArrayList<Message>();
+    List<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     // check first whether we can remove the workflow
     WorkflowImpl workflow = workflows.remove(configuration.dn());
@@ -240,7 +240,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       WorkflowCfg   configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // Get the existing workflow if it's already enabled.
     WorkflowImpl existingWorkflow = workflows.get(configuration.dn());
@@ -267,7 +267,7 @@
   {
     ResultCode    resultCode          = ResultCode.SUCCESS;
     boolean       adminActionRequired = false;
-    List<Message> messages            = new ArrayList<Message>();
+    List<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     // Get the existing workflow if it's already enabled.
     WorkflowImpl existingWorkflow = workflows.get(configuration.dn());
@@ -385,7 +385,7 @@
    */
   private boolean checkReferenceCounter(
       WorkflowImpl  workflow,
-      List<Message> messages
+      List<LocalizableMessage> messages
       )
   {
     boolean acceptable = true;
@@ -393,7 +393,7 @@
     int refCounter = workflow.getReferenceCounter();
     if (refCounter != 0)
     {
-      Message message = INFO_ERR_WORKFLOW_IN_USE.get(
+      LocalizableMessage message = INFO_ERR_WORKFLOW_IN_USE.get(
         workflow.getWorkflowId(), workflow.getReferenceCounter());
       messages.add(message);
       acceptable = false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/WorkflowImpl.java b/opendj3-server-dev/src/server/org/opends/server/core/WorkflowImpl.java
index ffd86bd..1b737a7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/WorkflowImpl.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/WorkflowImpl.java
@@ -34,7 +34,7 @@
 import java.util.Observer;
 import java.util.TreeMap;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.server.WorkflowCfg;
 import org.opends.server.types.*;
 import org.opends.server.workflowelement.WorkflowElement;
@@ -200,7 +200,7 @@
     {
       // No root workflow element? It's a configuration error.
       operation.setResultCode(ResultCode.OPERATIONS_ERROR);
-      MessageBuilder message = new MessageBuilder(
+      LocalizableMessageBuilder message = new LocalizableMessageBuilder(
         ERR_ROOT_WORKFLOW_ELEMENT_NOT_DEFINED.get(workflowID));
       operation.setErrorMessage(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/WorkflowResultCode.java b/opendj3-server-dev/src/server/org/opends/server/core/WorkflowResultCode.java
index 4271b2e..65785a2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/WorkflowResultCode.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/WorkflowResultCode.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 import org.opends.server.types.ResultCode;
@@ -41,7 +42,7 @@
   private ResultCode resultCode = ResultCode.UNDEFINED;
 
   // The global error message.
-  private MessageBuilder errorMessage = new MessageBuilder(Message.EMPTY);
+  private LocalizableMessageBuilder errorMessage = new LocalizableMessageBuilder(LocalizableMessage.EMPTY);
 
 
   /**
@@ -63,7 +64,7 @@
    */
   public WorkflowResultCode(
       ResultCode     resultCode,
-      MessageBuilder errorMessage
+      LocalizableMessageBuilder errorMessage
       )
   {
     this.resultCode   = resultCode;
@@ -116,7 +117,7 @@
    */
   public boolean elaborateGlobalResultCode(
       ResultCode     newResultCode,
-      MessageBuilder newErrorMessage
+      LocalizableMessageBuilder newErrorMessage
       )
   {
     // Returned value
@@ -127,7 +128,7 @@
     if (resultCode == ResultCode.UNDEFINED)
     {
       resultCode   = newResultCode;
-      errorMessage = new MessageBuilder (newErrorMessage);
+      errorMessage = new LocalizableMessageBuilder (newErrorMessage);
     }
     else
     {
@@ -144,11 +145,11 @@
         {
           case NO_SUCH_OBJECT:
             resultCode = ResultCode.SUCCESS;
-            errorMessage = new MessageBuilder(Message.EMPTY);
+            errorMessage = new LocalizableMessageBuilder(LocalizableMessage.EMPTY);
             break;
           case REFERRAL:
             resultCode = ResultCode.SUCCESS;
-            errorMessage = new MessageBuilder(Message.EMPTY);
+            errorMessage = new LocalizableMessageBuilder(LocalizableMessage.EMPTY);
             sendReferenceEntry = true;
             break;
           default:
@@ -172,12 +173,12 @@
         {
           case REFERRAL:
             resultCode = ResultCode.SUCCESS;
-            errorMessage = new MessageBuilder(Message.EMPTY);
+            errorMessage = new LocalizableMessageBuilder(LocalizableMessage.EMPTY);
             sendReferenceEntry = true;
             break;
           case NO_SUCH_OBJECT:
             resultCode = ResultCode.REFERRAL;
-            errorMessage = new MessageBuilder (Message.EMPTY);
+            errorMessage = new LocalizableMessageBuilder (LocalizableMessage.EMPTY);
             break;
           default:
             // global resultCode remains the same
@@ -194,16 +195,16 @@
         {
           case REFERRAL:
             resultCode = newResultCode;
-            errorMessage = new MessageBuilder (newErrorMessage);
+            errorMessage = new LocalizableMessageBuilder (newErrorMessage);
             sendReferenceEntry = true;
             break;
           case SUCCESS:
             resultCode = newResultCode;
-            errorMessage = new MessageBuilder (newErrorMessage);
+            errorMessage = new LocalizableMessageBuilder (newErrorMessage);
             break;
           case NO_SUCH_OBJECT:
             resultCode = newResultCode;
-            errorMessage = new MessageBuilder (newErrorMessage);
+            errorMessage = new LocalizableMessageBuilder (newErrorMessage);
             break;
           default:
             // Do nothing (we don't want to override the first error)
@@ -233,7 +234,7 @@
    *
    * @return the global error message.
    */
-  public MessageBuilder errorMessage()
+  public LocalizableMessageBuilder errorMessage()
   {
     return errorMessage;
   }
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 0ce30b4..1857f04 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
@@ -48,7 +48,7 @@
 import java.util.TreeMap;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.ClassPropertyDefinition;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -106,7 +106,7 @@
     {
       ResultCode resultCode = ResultCode.SUCCESS;
       boolean adminActionRequired = false;
-      List<Message> messages = new ArrayList<Message>();
+      List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
       // Update the priority.
       setNetworkGroupPriority(configuration.getPriority());
@@ -167,7 +167,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationChangeAcceptable(
-        NetworkGroupCfg configuration, List<Message> unacceptableReasons)
+        NetworkGroupCfg configuration, List<LocalizableMessage> unacceptableReasons)
     {
       return isConfigurationAcceptable(configuration,
           unacceptableReasons);
@@ -191,7 +191,7 @@
     {
       ResultCode resultCode = ResultCode.SUCCESS;
       boolean adminActionRequired = false;
-      List<Message> messages = new ArrayList<Message>();
+      List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
       try
       {
@@ -245,7 +245,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationAddAcceptable(
-        QOSPolicyCfg configuration, List<Message> unacceptableReasons)
+        QOSPolicyCfg configuration, List<LocalizableMessage> unacceptableReasons)
     {
       return isNetworkGroupQOSPolicyConfigurationAcceptable(
           configuration, unacceptableReasons);
@@ -257,7 +257,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationDeleteAcceptable(
-        QOSPolicyCfg configuration, List<Message> unacceptableReasons)
+        QOSPolicyCfg configuration, List<LocalizableMessage> unacceptableReasons)
     {
       // Always ok.
       return true;
@@ -521,7 +521,7 @@
         {
           // The workflow does not exist, log an error message
           // and skip the workflow.
-          Message message =
+          LocalizableMessage message =
               INFO_ERR_WORKFLOW_DOES_NOT_EXIST.get(workflowID,
                   networkGroup.getID());
           logError(message);
@@ -577,7 +577,7 @@
    *         not.
    */
   static boolean isConfigurationAcceptable(
-      NetworkGroupCfg configuration, List<Message> unacceptableReasons)
+      NetworkGroupCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     // The configuration is always acceptable if disabled.
     if (!configuration.isEnabled())
@@ -598,7 +598,7 @@
       if (allBaseDNs.contains(baseDN))
       {
         // This baseDN is duplicated
-        Message message =
+        LocalizableMessage message =
             ERR_WORKFLOW_BASE_DN_DUPLICATED_IN_NG.get(baseDN,
                 getNameFromConfiguration(configuration));
         unacceptableReasons.add(message);
@@ -728,7 +728,7 @@
   // implementation class is acceptable.
   private static boolean isNetworkGroupQOSPolicyConfigurationAcceptable(
       QOSPolicyCfg policyConfiguration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     String className = policyConfiguration.getJavaClass();
     QOSPolicyCfgDefn d = QOSPolicyCfgDefn.getInstance();
@@ -903,7 +903,7 @@
    *         network group request filtering policy
    */
   boolean checkRequestFilteringPolicy(
-      PreParseOperation operation, List<Message> messages)
+      PreParseOperation operation, List<LocalizableMessage> messages)
   {
     if (requestFilteringPolicy != null)
     {
@@ -932,7 +932,7 @@
    */
   boolean checkResourceLimitsPolicy(ClientConnection connection,
       PreParseOperation operation, boolean fullCheck,
-      List<Message> messages)
+      List<LocalizableMessage> messages)
   {
     if (resourceLimitsPolicy != null)
     {
@@ -1421,7 +1421,7 @@
       // The network group must not be already registered
       if (registeredNetworkGroups.containsKey(networkGroupID))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_REGISTER_NETWORK_GROUP_ALREADY_EXISTS
                 .get(networkGroupID);
         throw new InitializationException(message);
@@ -1591,7 +1591,7 @@
       {
         // The base DN is already registered in the network group,
         // we must reject the registration request
-        Message message =
+        LocalizableMessage message =
             ERR_REGISTER_WORKFLOW_BASE_DN_ALREADY_EXISTS.get(
                 workflowID, networkGroupID, node.getWorkflowImpl()
                     .getWorkflowId(), workflowNode.getWorkflowImpl()
@@ -1630,7 +1630,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_NETWORK_GROUP_POLICY_CANNOT_INITIALIZE.get(String
               .valueOf(className), String.valueOf(policyConfiguration
               .dn()), stackTraceToSingleLineString(e));
@@ -1673,7 +1673,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_NETWORK_GROUP_POLICY_CANNOT_INITIALIZE.get(String
               .valueOf(className), String.valueOf(policyConfiguration
               .dn()), stackTraceToSingleLineString(e));
@@ -1974,7 +1974,7 @@
       // The workflow must not be already registered
       if (registeredWorkflowNodes.containsKey(workflowID))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS.get(workflowID,
                 networkGroupID);
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupConfigManager.java b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupConfigManager.java
index 0cc08a4..ab52457 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupConfigManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupConfigManager.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -34,7 +35,7 @@
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
@@ -95,7 +96,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // Register to be notified of changes to the new network group.
     configuration.addChangeListener(this);
@@ -146,7 +147,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // Enable / disable the network group as required.
     NetworkGroup networkGroup = networkGroups.get(configuration.dn());
@@ -202,7 +203,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     NetworkGroup networkGroup =
         networkGroups.remove(configuration.dn());
@@ -281,11 +282,11 @@
           rootConfiguration.getNetworkGroup(networkGroupName);
       configuration.addChangeListener(this);
 
-      List<Message> unacceptableReasons = new ArrayList<Message>();
+      List<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
       if (!NetworkGroup.isConfigurationAcceptable(configuration,
           unacceptableReasons))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_NETWORK_GROUP_CONFIG_NOT_ACCEPTABLE.get(String
                 .valueOf(configuration.dn()), StaticUtils.listToString(
                 unacceptableReasons, ". "));
@@ -307,7 +308,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(
-      NetworkGroupCfg configuration, List<Message> unacceptableReasons)
+      NetworkGroupCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     return NetworkGroup.isConfigurationAcceptable(configuration,
         unacceptableReasons);
@@ -319,7 +320,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      NetworkGroupCfg configuration, List<Message> unacceptableReasons)
+      NetworkGroupCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     return NetworkGroup.isConfigurationAcceptable(configuration,
         unacceptableReasons);
@@ -331,7 +332,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(
-      NetworkGroupCfg configuration, List<Message> unacceptableReasons)
+      NetworkGroupCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     // Always ok.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupPlugin.java b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupPlugin.java
index 4dd7956..253cbb4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupPlugin.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -31,7 +32,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.PluginCfgDefn;
 import org.opends.server.admin.std.server.NetworkGroupPluginCfg;
@@ -111,7 +112,7 @@
           // These are acceptable
           break;
         default:
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_NETWORKGROUP_INVALID_PLUGIN_TYPE.get(t.toString());
           throw new ConfigException(message);
       }
@@ -139,7 +140,7 @@
           ClientConnection connection,
           PreParseOperation operation,
           boolean fullCheck,
-          ArrayList<Message> messages)
+          ArrayList<LocalizableMessage> messages)
   {
     if (!connection.getNetworkGroup().checkResourceLimitsPolicy(
             connection, operation, fullCheck, messages)) {
@@ -164,7 +165,7 @@
   private boolean setAndCheckNetworkGroup(
           ClientConnection connection,
           PreParseOperation operation,
-          ArrayList<Message> messages)
+          ArrayList<LocalizableMessage> messages)
   {
     boolean fullCheck = false;
     if (connection.mustEvaluateNetworkGroup(operation)) {
@@ -186,7 +187,7 @@
   public final PluginResult.PostConnect
                doPostConnect(ClientConnection clientConnection)
   {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     if (setAndCheckNetworkGroup(clientConnection, null, messages)) {
       return PluginResult.PostConnect.continueConnectProcessing();
     } else {
@@ -201,7 +202,7 @@
   @Override
   public PluginResult.PreParse
        doPreParse(PreParseAddOperation addOperation) {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     ClientConnection connection = addOperation.getClientConnection();
     if (setAndCheckNetworkGroup(connection, addOperation, messages)) {
       return PluginResult.PreParse.continueOperationProcessing();
@@ -217,7 +218,7 @@
   @Override
   public PluginResult.PreParse
        doPreParse(PreParseBindOperation bindOperation) {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     ClientConnection connection = bindOperation.getClientConnection();
     boolean fullCheck = false;
 
@@ -254,7 +255,7 @@
   @Override
   public PluginResult.PreParse
        doPreParse(PreParseCompareOperation compareOperation) {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     ClientConnection connection = compareOperation.getClientConnection();
     if (setAndCheckNetworkGroup(connection, compareOperation, messages)) {
       return PluginResult.PreParse.continueOperationProcessing();
@@ -270,7 +271,7 @@
   @Override
   public PluginResult.PreParse
        doPreParse(PreParseDeleteOperation deleteOperation) {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     ClientConnection connection = deleteOperation.getClientConnection();
     if (setAndCheckNetworkGroup(connection, deleteOperation, messages)) {
       return PluginResult.PreParse.continueOperationProcessing();
@@ -286,7 +287,7 @@
   @Override
   public PluginResult.PreParse
        doPreParse(PreParseExtendedOperation extendedOperation) {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     ClientConnection connection = extendedOperation.getClientConnection();
     if (setAndCheckNetworkGroup(connection, extendedOperation, messages)) {
       return PluginResult.PreParse.continueOperationProcessing();
@@ -302,7 +303,7 @@
   @Override
   public PluginResult.PreParse
        doPreParse(PreParseModifyOperation modifyOperation) {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     ClientConnection connection = modifyOperation.getClientConnection();
     if (setAndCheckNetworkGroup(connection, modifyOperation, messages)) {
       return PluginResult.PreParse.continueOperationProcessing();
@@ -318,7 +319,7 @@
   @Override
   public PluginResult.PreParse
        doPreParse(PreParseModifyDNOperation modifyDNOperation) {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     ClientConnection connection = modifyDNOperation.getClientConnection();
     if (setAndCheckNetworkGroup(connection, modifyDNOperation, messages)) {
       return PluginResult.PreParse.continueOperationProcessing();
@@ -334,7 +335,7 @@
   @Override
   public PluginResult.PreParse
        doPreParse(PreParseSearchOperation searchOperation) {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     ClientConnection connection = searchOperation.getClientConnection();
     if (setAndCheckNetworkGroup(connection, searchOperation, messages)) {
       return PluginResult.PreParse.continueOperationProcessing();
@@ -385,7 +386,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     NetworkGroupPluginCfg cfg = (NetworkGroupPluginCfg) configuration;
     return isConfigurationChangeAcceptable(cfg, unacceptableReasons);
@@ -396,7 +397,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       NetworkGroupPluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -423,7 +424,7 @@
 
 
         default:
-          Message message = ERR_PLUGIN_NETWORKGROUP_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_NETWORKGROUP_INVALID_PLUGIN_TYPE.get(
                   pluginType.toString());
           unacceptableReasons.add(message);
           configAcceptable = false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.java b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.java
index 9e346ce..85e3559 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/NetworkGroupStatistics.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.core.networkgroups;
@@ -30,7 +30,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.MonitorProvider;
 import org.opends.server.config.ConfigException;
@@ -87,7 +87,7 @@
 
   /**
    * Increments the number of operations managed by this network group.
-   * @param message The LDAP Message containing the operation to be
+   * @param message The LDAP LocalizableMessage containing the operation to be
    * managed by the network group.
    */
   public void updateMessageRead(LDAPMessage message) {
@@ -142,7 +142,7 @@
     // dynamically loaded from the configuration.  Rather, it should be
     // explicitly created and registered by the LDAP connection handler or an
     // LDAP client connection.
-    Message message = ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION.get(
+    LocalizableMessage message = ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION.get(
         String.valueOf(configuration.dn()));
     throw new ConfigException(message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicy.java b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicy.java
index aceffe0..eca9302 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicy.java
@@ -22,6 +22,7 @@
  *
  *
  *    Copyright 2009 Sun Microsystems, Inc.
+ *    Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -29,7 +30,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.QOSPolicy;
 import org.opends.server.types.operation.PreParseOperation;
 
@@ -75,5 +76,5 @@
    * @return {@code true} if the operation is allowed.
    */
   abstract boolean isAllowed(PreParseOperation operation,
-      List<Message> messages);
+      List<LocalizableMessage> messages);
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyFactory.java b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyFactory.java
index cfd1243..79ebd65 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/RequestFilteringPolicyFactory.java
@@ -22,6 +22,7 @@
  *
  *
  *    Copyright 2009 Sun Microsystems, Inc.
+ *    Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -34,7 +35,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.
   RequestFilteringQOSPolicyCfgDefn.AllowedOperations;
@@ -118,7 +119,7 @@
     {
       ResultCode resultCode = ResultCode.SUCCESS;
       boolean adminActionRequired = false;
-      ArrayList<Message> messages = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
       // Save the configuration.
       updateConfiguration(configuration);
@@ -134,7 +135,7 @@
      */
     public boolean isConfigurationChangeAcceptable(
         RequestFilteringQOSPolicyCfg configuration,
-        List<Message> unacceptableReasons)
+        List<LocalizableMessage> unacceptableReasons)
     {
       return RequestFilteringPolicyFactory.validateConfiguration(
           configuration, unacceptableReasons);
@@ -158,7 +159,7 @@
      */
     @Override
     boolean isAllowed(PreParseOperation operation,
-        List<Message> messages)
+        List<LocalizableMessage> messages)
     {
       boolean allowRequest = true;
 
@@ -594,7 +595,7 @@
   // Validates a configuration.
   private static boolean validateConfiguration(
       RequestFilteringQOSPolicyCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // Check that allowed-attributes does not contain any attribute
     // also configured in prohibited-attributes
@@ -664,7 +665,7 @@
    */
   public boolean isConfigurationAcceptable(
       RequestFilteringQOSPolicyCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return validateConfiguration(configuration, unacceptableReasons);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicy.java b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicy.java
index d801efc..1d08f08 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicy.java
@@ -22,6 +22,7 @@
  *
  *
  *    Copyright 2009-2010 Sun Microsystems, Inc.
+ *    Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.core.networkgroups;
 
@@ -29,7 +30,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.QOSPolicy;
 import org.opends.server.types.operation.PreParseOperation;
@@ -120,7 +121,7 @@
    */
   abstract boolean isAllowed(ClientConnection connection,
       PreParseOperation operation, boolean fullCheck,
-      List<Message> messages);
+      List<LocalizableMessage> messages);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyFactory.java b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyFactory.java
index de48420..010eb9d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/core/networkgroups/ResourceLimitsPolicyFactory.java
@@ -34,7 +34,7 @@
 import java.util.HashMap;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.ResourceLimitsQOSPolicyCfg;
 import org.opends.server.api.ClientConnection;
@@ -74,7 +74,7 @@
     {
       ResultCode resultCode = ResultCode.SUCCESS;
       boolean adminActionRequired = false;
-      ArrayList<Message> messages = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
       // Save the configuration.
       updateConfiguration(configuration);
@@ -90,7 +90,7 @@
      */
     public boolean isConfigurationChangeAcceptable(
         ResourceLimitsQOSPolicyCfg configuration,
-        List<Message> unacceptableReasons)
+        List<LocalizableMessage> unacceptableReasons)
     {
       return ResourceLimitsPolicyFactory.validateConfiguration(
           configuration, unacceptableReasons);
@@ -227,7 +227,7 @@
     @Override
     boolean isAllowed(ClientConnection connection,
         PreParseOperation operation, boolean fullCheck,
-        List<Message> messages)
+        List<LocalizableMessage> messages)
     {
       boolean result = true;
 
@@ -488,7 +488,7 @@
   // Validates a configuration.
   private static boolean validateConfiguration(
       ResourceLimitsQOSPolicyCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // maxOpsPerInterval must be positive
     long tmpMaxOps = configuration.getMaxOpsInterval();
@@ -537,7 +537,7 @@
    */
   public boolean isConfigurationAcceptable(
       ResourceLimitsQOSPolicyCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return validateConfiguration(configuration, unacceptableReasons);
   }
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 e4b7fa3..d516bad 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
@@ -27,7 +27,7 @@
  */
 package org.opends.server.crypto;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.CoreMessages.*;
 
 import java.io.InputStream;
@@ -279,7 +279,7 @@
     }
 
     // CryptoMangager crypto config parameters.
-    List<Message> why = new LinkedList<Message>();
+    List<LocalizableMessage> why = new LinkedList<LocalizableMessage>();
     if (! isConfigurationChangeAcceptable(cfg, why)) {
       throw new InitializationException(why.get(0));
     }
@@ -301,7 +301,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
        CryptoManagerCfg cfg,
-       List<Message> unacceptableReasons)
+       List<LocalizableMessage> unacceptableReasons)
   {
     // Acceptable until we find an error.
     boolean isAcceptable = true;
@@ -443,7 +443,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     preferredDigestAlgorithm = cfg.getDigestAlgorithm();
     preferredMACAlgorithm = cfg.getMacAlgorithm();
@@ -468,14 +468,14 @@
          ConfigConstants.ID_ADS_TRUST_STORE_BACKEND);
     if (b == null)
     {
-      Message msg =
+      LocalizableMessage msg =
            ERR_CRYPTOMGR_ADS_TRUST_STORE_BACKEND_NOT_ENABLED.get(
                 ConfigConstants.ID_ADS_TRUST_STORE_BACKEND);
       throw new ConfigException(msg);
     }
     if (!(b instanceof TrustStoreBackend))
     {
-      Message msg =
+      LocalizableMessage msg =
            ERR_CRYPTOMGR_ADS_TRUST_STORE_BACKEND_WRONG_CLASS.get(
                 ConfigConstants.ID_ADS_TRUST_STORE_BACKEND);
       throw new ConfigException(msg);
@@ -575,10 +575,10 @@
             ERR_CRYPTOMGR_FAILED_TO_RETRIEVE_INSTANCE_CERTIFICATE.get(
                     entryDN.toString(), getExceptionMessage(ex)), ex);
     }
-    //The certificate can never be null. The Message digest code that will
+    //The certificate can never be null. The LocalizableMessage digest code that will
     //use it later throws a NPE if the certificate is null.
     if(certificate == null) {
-      Message msg =
+      LocalizableMessage msg =
         ERR_CRYPTOMGR_FAILED_INSTANCE_CERTIFICATE_NULL.get(entryDN.toString());
         throw new CryptoManagerException(msg);
     }
@@ -3067,7 +3067,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
            ERR_CRYPTOMGR_SSL_CONTEXT_CANNOT_INITIALIZE.get(
                 getExceptionMessage(e));
       throw new ConfigException(message, e);
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 b11ff90..2d5d3e8 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
@@ -56,7 +56,7 @@
 import org.opends.server.core.DeleteOperation;
 import org.opends.server.core.AddOperation;
 import static org.opends.messages.CoreMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.admin.ads.ADSContext;
 
 import java.util.LinkedHashSet;
@@ -214,7 +214,7 @@
     ResultCode resultCode = searchOperation.getResultCode();
     if (resultCode != ResultCode.SUCCESS)
     {
-      Message message =
+      LocalizableMessage message =
            INFO_TRUSTSTORESYNC_ADMIN_SUFFIX_SEARCH_FAILED.get(
                 String.valueOf(adminSuffixDN),
                 searchOperation.getErrorMessage().toString());
@@ -234,7 +234,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_TRUSTSTORESYNC_EXCEPTION.get(
+        LocalizableMessage message = ERR_TRUSTSTORESYNC_EXCEPTION.get(
              stackTraceToSingleLineString(e));
         ErrorLogger.logError(message);
       }
@@ -436,7 +436,7 @@
 
     if (delOperation.getResultCode() != ResultCode.SUCCESS)
     {
-      Message message = INFO_TRUSTSTORESYNC_DELETE_FAILED.get(
+      LocalizableMessage message = INFO_TRUSTSTORESYNC_DELETE_FAILED.get(
            String.valueOf(dstDN),
            String.valueOf(delOperation.getErrorMessage()));
       ErrorLogger.logError(message);
@@ -479,7 +479,7 @@
     AddOperation addOperation = conn.processAdd(addEntry);
     if (addOperation.getResultCode() != ResultCode.SUCCESS)
     {
-      Message message = INFO_TRUSTSTORESYNC_ADD_FAILED.get(
+      LocalizableMessage message = INFO_TRUSTSTORESYNC_ADD_FAILED.get(
            String.valueOf(dstDN),
            String.valueOf(addOperation.getErrorMessage()));
       ErrorLogger.logError(message);
@@ -512,7 +512,7 @@
       }
       catch (CryptoManagerException e)
       {
-        Message message = Message.raw("Failed to import key entry: %s",
+        LocalizableMessage message = LocalizableMessage.raw("Failed to import key entry: %s",
                                       e.getMessage());
         ErrorLogger.logError(message);
       }
@@ -588,7 +588,7 @@
       }
       catch (CryptoManagerException e)
       {
-        Message message = Message.raw("Failed to import modified key entry: %s",
+        LocalizableMessage message = LocalizableMessage.raw("Failed to import modified key entry: %s",
                                       e.getMessage());
         ErrorLogger.logError(message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/crypto/GetSymmetricKeyExtendedOperation.java b/opendj3-server-dev/src/server/org/opends/server/crypto/GetSymmetricKeyExtendedOperation.java
index 269dba4..aa7b614 100644
--- a/opendj3-server-dev/src/server/org/opends/server/crypto/GetSymmetricKeyExtendedOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/crypto/GetSymmetricKeyExtendedOperation.java
@@ -28,7 +28,7 @@
 
 import java.io.IOException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.
 GetSymmetricKeyExtendedOperationHandlerCfg;
 import org.opends.server.api.ExtendedOperationHandler;
@@ -112,7 +112,7 @@
     if (requestValue == null)
     {
       // The request must always have a value.
-      Message message = ERR_GET_SYMMETRIC_KEY_NO_VALUE.get();
+      LocalizableMessage message = ERR_GET_SYMMETRIC_KEY_NO_VALUE.get();
       operation.appendErrorMessage(message);
       return;
     }
@@ -140,7 +140,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ae);
       }
 
-      Message message = ERR_GET_SYMMETRIC_KEY_ASN1_DECODE_EXCEPTION.get(
+      LocalizableMessage message = ERR_GET_SYMMETRIC_KEY_ASN1_DECODE_EXCEPTION.get(
            ae.getMessage());
       operation.appendErrorMessage(message);
       return;
@@ -154,7 +154,7 @@
 
       operation.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-      Message message = ERR_GET_SYMMETRIC_KEY_DECODE_EXCEPTION.get(
+      LocalizableMessage message = ERR_GET_SYMMETRIC_KEY_DECODE_EXCEPTION.get(
            StaticUtils.getExceptionMessage(e));
       operation.appendErrorMessage(message);
       return;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/AESPasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/AESPasswordStorageScheme.java
index 3049460..ac55f30 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/AESPasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/AESPasswordStorageScheme.java
@@ -28,7 +28,7 @@
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.AESPasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -130,7 +130,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_AES,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_AES,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -172,7 +172,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_AES,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_AES,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -246,7 +246,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_DECRYPT.get(STORAGE_SCHEME_NAME_AES,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_DECRYPT.get(STORAGE_SCHEME_NAME_AES,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -274,7 +274,7 @@
   public ByteString encodeAuthPassword(ByteSequence plaintext)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -302,7 +302,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/AttributeValuePasswordValidator.java b/opendj3-server-dev/src/server/org/opends/server/extensions/AttributeValuePasswordValidator.java
index c8f7851..dfc438b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/AttributeValuePasswordValidator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/AttributeValuePasswordValidator.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -40,7 +40,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -135,7 +135,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      MessageBuilder invalidReason)
+                                      LocalizableMessageBuilder invalidReason)
   {
     // Get a handle to the current configuration.
     AttributeValuePasswordValidatorCfg config = currentConfig;
@@ -203,7 +203,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PasswordValidatorCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     AttributeValuePasswordValidatorCfg config =
          (AttributeValuePasswordValidatorCfg) configuration;
@@ -217,7 +217,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       AttributeValuePasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // If we've gotten this far, then we'll accept the change.
     return true;
@@ -233,7 +233,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     currentConfig = configuration;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/Base64PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/Base64PasswordStorageScheme.java
index 663094d..4e47782 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/Base64PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/Base64PasswordStorageScheme.java
@@ -28,7 +28,7 @@
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.Base64PasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -169,7 +169,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
           storedPassword.toString(), String.valueOf(e));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
                                    e);
@@ -197,7 +197,7 @@
   public ByteString encodeAuthPassword(ByteSequence plaintext)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -225,7 +225,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/BlowfishPasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/BlowfishPasswordStorageScheme.java
index 1472aaa..fbcb811 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/BlowfishPasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/BlowfishPasswordStorageScheme.java
@@ -28,7 +28,7 @@
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.BlowfishPasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -130,7 +130,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_BLOWFISH,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_BLOWFISH,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -173,7 +173,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_BLOWFISH,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_BLOWFISH,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -247,7 +247,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_DECRYPT.get(STORAGE_SCHEME_NAME_BLOWFISH,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_DECRYPT.get(STORAGE_SCHEME_NAME_BLOWFISH,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -275,7 +275,7 @@
   public ByteString encodeAuthPassword(ByteSequence plaintext)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -303,7 +303,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
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 30cdd83..528cf4b 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
@@ -36,7 +36,7 @@
 import java.util.List;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.CramMD5SASLMechanismHandlerCfg;
 import org.opends.server.admin.std.server.SASLMechanismHandlerCfg;
@@ -139,7 +139,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_SASLCRAMMD5_CANNOT_GET_MESSAGE_DIGEST.get(getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -219,7 +219,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLCRAMMD5_NO_STORED_CHALLENGE.get();
+      LocalizableMessage message = ERR_SASLCRAMMD5_NO_STORED_CHALLENGE.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -228,7 +228,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLCRAMMD5_INVALID_STORED_CHALLENGE.get();
+      LocalizableMessage message = ERR_SASLCRAMMD5_INVALID_STORED_CHALLENGE.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -249,7 +249,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLCRAMMD5_NO_SPACE_IN_CREDENTIALS.get();
+      LocalizableMessage message = ERR_SASLCRAMMD5_NO_SPACE_IN_CREDENTIALS.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -264,7 +264,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLCRAMMD5_INVALID_DIGEST_LENGTH.get(
+      LocalizableMessage message = ERR_SASLCRAMMD5_INVALID_DIGEST_LENGTH.get(
               digest.length(),
               (2*MD5_DIGEST_LENGTH));
       bindOperation.setAuthFailureReason(message);
@@ -285,7 +285,7 @@
 
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLCRAMMD5_INVALID_DIGEST_CONTENT.get(
+      LocalizableMessage message = ERR_SASLCRAMMD5_INVALID_DIGEST_CONTENT.get(
               pe.getMessage());
       bindOperation.setAuthFailureReason(message);
       return;
@@ -314,7 +314,7 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        Message message = ERR_SASLCRAMMD5_CANNOT_DECODE_USERNAME_AS_DN.get(
+        LocalizableMessage message = ERR_SASLCRAMMD5_CANNOT_DECODE_USERNAME_AS_DN.get(
                 userName, de.getMessageObject());
         bindOperation.setAuthFailureReason(message);
         return;
@@ -324,7 +324,7 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        Message message = ERR_SASLCRAMMD5_USERNAME_IS_NULL_DN.get();
+        LocalizableMessage message = ERR_SASLCRAMMD5_USERNAME_IS_NULL_DN.get();
         bindOperation.setAuthFailureReason(message);
         return;
       }
@@ -359,7 +359,7 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        Message message = ERR_SASLCRAMMD5_CANNOT_GET_ENTRY_BY_DN.get(
+        LocalizableMessage message = ERR_SASLCRAMMD5_CANNOT_GET_ENTRY_BY_DN.get(
                 String.valueOf(userDN), de.getMessageObject());
         bindOperation.setAuthFailureReason(message);
         return;
@@ -390,7 +390,7 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        Message message = ERR_SASLCRAMMD5_CANNOT_MAP_USERNAME.get(
+        LocalizableMessage message = ERR_SASLCRAMMD5_CANNOT_MAP_USERNAME.get(
                 String.valueOf(userName), de.getMessageObject());
         bindOperation.setAuthFailureReason(message);
         return;
@@ -403,7 +403,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLCRAMMD5_NO_MATCHING_ENTRIES.get(userName);
+      LocalizableMessage message = ERR_SASLCRAMMD5_NO_MATCHING_ENTRIES.get(userName);
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -423,7 +423,7 @@
       if (!authState.isPasswordPolicy())
       {
         bindOperation.setResultCode(ResultCode.INAPPROPRIATE_AUTHENTICATION);
-        Message message = ERR_SASL_ACCOUNT_NOT_LOCAL
+        LocalizableMessage message = ERR_SASL_ACCOUNT_NOT_LOCAL
             .get(SASL_MECHANISM_CRAM_MD5, String.valueOf(userEntry.getName()));
         bindOperation.setAuthFailureReason(message);
         return;
@@ -435,7 +435,7 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        Message message = ERR_SASLCRAMMD5_NO_REVERSIBLE_PASSWORDS.get(
+        LocalizableMessage message = ERR_SASLCRAMMD5_NO_REVERSIBLE_PASSWORDS.get(
                 String.valueOf(userEntry.getName()));
         bindOperation.setAuthFailureReason(message);
         return;
@@ -445,7 +445,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLCRAMMD5_CANNOT_GET_REVERSIBLE_PASSWORDS.get(
+      LocalizableMessage message = ERR_SASLCRAMMD5_CANNOT_GET_REVERSIBLE_PASSWORDS.get(
               String.valueOf(userEntry.getName()),
               String.valueOf(e));
       bindOperation.setAuthFailureReason(message);
@@ -470,7 +470,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLCRAMMD5_INVALID_PASSWORD.get();
+      LocalizableMessage message = ERR_SASLCRAMMD5_INVALID_PASSWORD.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -576,7 +576,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     CramMD5SASLMechanismHandlerCfg config =
          (CramMD5SASLMechanismHandlerCfg) configuration;
@@ -591,7 +591,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       CramMD5SASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -607,7 +607,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     DN identityMapperDN = configuration.getIdentityMapperDN();
     identityMapper = DirectoryServer.getIdentityMapper(identityMapperDN);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/CancelExtendedOperation.java b/opendj3-server-dev/src/server/org/opends/server/extensions/CancelExtendedOperation.java
index f58054b..9557108 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/CancelExtendedOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/CancelExtendedOperation.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.extensions;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.CancelExtendedOperationHandlerCfg;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.ExtendedOperationHandler;
@@ -112,7 +112,7 @@
 
       operation.setResultCode(ResultCode.PROTOCOL_ERROR);
 
-      Message message = ERR_EXTOP_CANCEL_CANNOT_DECODE_REQUEST_VALUE.get(
+      LocalizableMessage message = ERR_EXTOP_CANCEL_CANNOT_DECODE_REQUEST_VALUE.get(
               getExceptionMessage(e));
       operation.appendErrorMessage(message);
       return;
@@ -120,7 +120,7 @@
 
 
     // Create the cancel request for the target operation.
-    Message cancelReason =
+    LocalizableMessage cancelReason =
         INFO_EXTOP_CANCEL_REASON.get(operation.getMessageID());
     CancelRequest cancelRequest = new CancelRequest(true, cancelReason);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/CharacterSetPasswordValidator.java b/opendj3-server-dev/src/server/org/opends/server/extensions/CharacterSetPasswordValidator.java
index 1538d50..b54b86c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/CharacterSetPasswordValidator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/CharacterSetPasswordValidator.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -43,7 +43,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -119,7 +119,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      MessageBuilder invalidReason)
+                                      LocalizableMessageBuilder invalidReason)
   {
     // Get a handle to the current configuration.
     CharacterSetPasswordValidatorCfg config = currentConfig;
@@ -328,12 +328,12 @@
       int colonPos = definition.indexOf(':');
       if (colonPos <= 0)
       {
-        Message message = ERR_CHARSET_VALIDATOR_NO_SET_COLON.get(definition);
+        LocalizableMessage message = ERR_CHARSET_VALIDATOR_NO_SET_COLON.get(definition);
         throw new ConfigException(message);
       }
       else if (colonPos == (definition.length() - 1))
       {
-        Message message = ERR_CHARSET_VALIDATOR_NO_SET_CHARS.get(definition);
+        LocalizableMessage message = ERR_CHARSET_VALIDATOR_NO_SET_CHARS.get(definition);
         throw new ConfigException(message);
       }
 
@@ -344,14 +344,14 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_CHARSET_VALIDATOR_INVALID_SET_COUNT
+        LocalizableMessage message = ERR_CHARSET_VALIDATOR_INVALID_SET_COUNT
             .get(definition);
         throw new ConfigException(message);
       }
 
       if (minCount < 0)
       {
-        Message message = ERR_CHARSET_VALIDATOR_INVALID_SET_COUNT
+        LocalizableMessage message = ERR_CHARSET_VALIDATOR_INVALID_SET_COUNT
             .get(definition);
         throw new ConfigException(message);
       }
@@ -362,7 +362,7 @@
         char c = characterSet.charAt(i);
         if (usedCharacters.contains(c))
         {
-          Message message = ERR_CHARSET_VALIDATOR_DUPLICATE_CHAR.get(
+          LocalizableMessage message = ERR_CHARSET_VALIDATOR_DUPLICATE_CHAR.get(
               definition, String.valueOf(c));
           throw new ConfigException(message);
         }
@@ -384,12 +384,12 @@
       int colonPos = definition.indexOf(':');
       if (colonPos <= 0)
       {
-        Message message = ERR_CHARSET_VALIDATOR_NO_RANGE_COLON.get(definition);
+        LocalizableMessage message = ERR_CHARSET_VALIDATOR_NO_RANGE_COLON.get(definition);
         throw new ConfigException(message);
       }
       else if (colonPos == (definition.length() - 1))
       {
-        Message message = ERR_CHARSET_VALIDATOR_NO_RANGE_CHARS.get(definition);
+        LocalizableMessage message = ERR_CHARSET_VALIDATOR_NO_RANGE_CHARS.get(definition);
         throw new ConfigException(message);
       }
 
@@ -400,14 +400,14 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_CHARSET_VALIDATOR_INVALID_RANGE_COUNT
+        LocalizableMessage message = ERR_CHARSET_VALIDATOR_INVALID_RANGE_COUNT
             .get(definition);
         throw new ConfigException(message);
       }
 
       if (minCount < 0)
       {
-        Message message = ERR_CHARSET_VALIDATOR_INVALID_RANGE_COUNT
+        LocalizableMessage message = ERR_CHARSET_VALIDATOR_INVALID_RANGE_COUNT
             .get(definition);
         throw new ConfigException(message);
       }
@@ -423,14 +423,14 @@
       {
         if (rangeOffset > characterRange.length() - 3)
         {
-          Message message = ERR_CHARSET_VALIDATOR_SHORT_RANGE
+          LocalizableMessage message = ERR_CHARSET_VALIDATOR_SHORT_RANGE
               .get(definition, characterRange.substring(rangeOffset));
           throw new ConfigException(message);
         }
 
         if (characterRange.charAt(rangeOffset+1) != '-')
         {
-          Message message = ERR_CHARSET_VALIDATOR_MALFORMED_RANGE
+          LocalizableMessage message = ERR_CHARSET_VALIDATOR_MALFORMED_RANGE
               .get(definition, characterRange
                   .substring(rangeOffset,rangeOffset+3));
           throw new ConfigException(message);
@@ -439,7 +439,7 @@
         if (characterRange.charAt(rangeOffset) >=
             characterRange.charAt(rangeOffset+2))
         {
-          Message message = ERR_CHARSET_VALIDATOR_UNSORTED_RANGE
+          LocalizableMessage message = ERR_CHARSET_VALIDATOR_UNSORTED_RANGE
               .get(definition, characterRange
                   .substring(rangeOffset, rangeOffset+3));
           throw new ConfigException(message);
@@ -466,14 +466,14 @@
 
       if (minCharacterSets <= mandatoryCharacterSets)
       {
-        Message message = ERR_CHARSET_VALIDATOR_MIN_CHAR_SETS_TOO_SMALL
+        LocalizableMessage message = ERR_CHARSET_VALIDATOR_MIN_CHAR_SETS_TOO_SMALL
             .get(minCharacterSets);
         throw new ConfigException(message);
       }
 
       if (minCharacterSets > (characterSets.size() + characterRanges.size()))
       {
-        Message message = ERR_CHARSET_VALIDATOR_MIN_CHAR_SETS_TOO_BIG
+        LocalizableMessage message = ERR_CHARSET_VALIDATOR_MIN_CHAR_SETS_TOO_BIG
             .get(minCharacterSets);
         throw new ConfigException(message);
       }
@@ -493,7 +493,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PasswordValidatorCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     CharacterSetPasswordValidatorCfg config =
          (CharacterSetPasswordValidatorCfg) configuration;
@@ -507,7 +507,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       CharacterSetPasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // Make sure that we can process the defined character sets.  If so, then
     // we'll accept the new configuration.
@@ -534,7 +534,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Make sure that we can process the defined character sets.  If so, then
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/ClearPasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/ClearPasswordStorageScheme.java
index f7c6b50..8d10d6d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/ClearPasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/ClearPasswordStorageScheme.java
@@ -28,7 +28,7 @@
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.ClearPasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -169,7 +169,7 @@
   public ByteString encodeAuthPassword(ByteSequence plaintext)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -197,7 +197,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/CollectiveAttributeSubentriesVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/CollectiveAttributeSubentriesVirtualAttributeProvider.java
index da8eed1..ed1dc08 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/CollectiveAttributeSubentriesVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/CollectiveAttributeSubentriesVirtualAttributeProvider.java
@@ -31,7 +31,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.
         CollectiveAttributeSubentriesVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -133,7 +133,7 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    Message message =
+    LocalizableMessage message =
             ERR_COLLECTIVEATTRIBUTESUBENTRIES_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
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 7663bf4..4793b98 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
@@ -45,8 +45,8 @@
 import java.util.concurrent.ConcurrentMap;
 import javax.crypto.Mac;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.Configuration;
 import org.opends.server.api.AlertGenerator;
 import org.opends.server.api.ClientConnection;
@@ -230,7 +230,7 @@
     {
       if (! f.exists())
       {
-        Message message = ERR_CONFIG_FILE_DOES_NOT_EXIST.get(
+        LocalizableMessage message = ERR_CONFIG_FILE_DOES_NOT_EXIST.get(
                                f.getAbsolutePath());
         throw new InitializationException(message);
       }
@@ -251,7 +251,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_FILE_CANNOT_VERIFY_EXISTENCE.get(
+      LocalizableMessage message = ERR_CONFIG_FILE_CANNOT_VERIFY_EXISTENCE.get(
                              f.getAbsolutePath(), String.valueOf(e));
       throw new InitializationException(message);
     }
@@ -318,7 +318,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_UNABLE_TO_APPLY_STARTUP_CHANGES.get(
+      LocalizableMessage message = ERR_CONFIG_UNABLE_TO_APPLY_STARTUP_CHANGES.get(
           changesFile.getAbsolutePath(), String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -342,7 +342,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_FILE_CANNOT_OPEN_FOR_READ.get(
+      LocalizableMessage message = ERR_CONFIG_FILE_CANNOT_OPEN_FOR_READ.get(
                              f.getAbsolutePath(), String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -363,7 +363,7 @@
 
       close(reader);
 
-      Message message = ERR_CONFIG_FILE_INVALID_LDIF_ENTRY.get(
+      LocalizableMessage message = ERR_CONFIG_FILE_INVALID_LDIF_ENTRY.get(
           le.getLineNumber(), f.getAbsolutePath(), String.valueOf(le));
       throw new InitializationException(message, le);
     }
@@ -376,7 +376,7 @@
 
       close(reader);
 
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_FILE_READ_ERROR.get(f.getAbsolutePath(),
                                        String.valueOf(e));
       throw new InitializationException(message, e);
@@ -388,7 +388,7 @@
     {
       close(reader);
 
-      Message message = ERR_CONFIG_FILE_EMPTY.get(f.getAbsolutePath());
+      LocalizableMessage message = ERR_CONFIG_FILE_EMPTY.get(f.getAbsolutePath());
       throw new InitializationException(message);
     }
 
@@ -399,7 +399,7 @@
       DN configRootDN = DN.valueOf(DN_CONFIG_ROOT);
       if (! entry.getName().equals(configRootDN))
       {
-        Message message = ERR_CONFIG_FILE_INVALID_BASE_DN.get(
+        LocalizableMessage message = ERR_CONFIG_FILE_INVALID_BASE_DN.get(
                                f.getAbsolutePath(), entry.getName().toString(),
                                DN_CONFIG_ROOT);
         throw new InitializationException(message);
@@ -425,7 +425,7 @@
       close(reader);
 
       // This should not happen, so we can use a generic error here.
-      Message message = ERR_CONFIG_FILE_GENERIC_ERROR.get(f.getAbsolutePath(),
+      LocalizableMessage message = ERR_CONFIG_FILE_GENERIC_ERROR.get(f.getAbsolutePath(),
                                                           String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -456,7 +456,7 @@
 
         close(reader);
 
-        Message message = ERR_CONFIG_FILE_INVALID_LDIF_ENTRY.get(
+        LocalizableMessage message = ERR_CONFIG_FILE_INVALID_LDIF_ENTRY.get(
                                le.getLineNumber(), f.getAbsolutePath(),
                                String.valueOf(le));
         throw new InitializationException(message, le);
@@ -470,7 +470,7 @@
 
         close(reader);
 
-        Message message = ERR_CONFIG_FILE_READ_ERROR.get(f.getAbsolutePath(),
+        LocalizableMessage message = ERR_CONFIG_FILE_READ_ERROR.get(f.getAbsolutePath(),
                                                          String.valueOf(e));
         throw new InitializationException(message, e);
       }
@@ -491,7 +491,7 @@
       {
         close(reader);
 
-        Message message = ERR_CONFIG_FILE_DUPLICATE_ENTRY.get(
+        LocalizableMessage message = ERR_CONFIG_FILE_DUPLICATE_ENTRY.get(
                                entryDN.toString(),
                                String.valueOf(reader.getLastEntryLineNumber()),
                                f.getAbsolutePath());
@@ -505,7 +505,7 @@
       {
         close(reader);
 
-        Message message = ERR_CONFIG_FILE_UNKNOWN_PARENT.get(
+        LocalizableMessage message = ERR_CONFIG_FILE_UNKNOWN_PARENT.get(
                                entryDN.toString(),
                                reader.getLastEntryLineNumber(),
                                f.getAbsolutePath());
@@ -517,7 +517,7 @@
       {
         close(reader);
 
-        Message message = ERR_CONFIG_FILE_NO_PARENT.get(entryDN.toString(),
+        LocalizableMessage message = ERR_CONFIG_FILE_NO_PARENT.get(entryDN.toString(),
                                reader.getLastEntryLineNumber(),
                                f.getAbsolutePath(), parentDN.toString());
         throw new InitializationException(message);
@@ -542,7 +542,7 @@
 
         close(reader);
 
-        Message message = ERR_CONFIG_FILE_GENERIC_ERROR.get(f.getAbsolutePath(),
+        LocalizableMessage message = ERR_CONFIG_FILE_GENERIC_ERROR.get(f.getAbsolutePath(),
                                                             String.valueOf(e));
         throw new InitializationException(message, e);
       }
@@ -578,7 +578,7 @@
 
         if (serverRoot == null)
         {
-          Message message = ERR_CONFIG_CANNOT_DETERMINE_SERVER_ROOT.get(
+          LocalizableMessage message = ERR_CONFIG_CANNOT_DETERMINE_SERVER_ROOT.get(
               ENV_VAR_INSTALL_ROOT);
           throw new InitializationException(message);
         }
@@ -599,7 +599,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_CANNOT_DETERMINE_SERVER_ROOT.get(ENV_VAR_INSTALL_ROOT);
         throw new InitializationException(message);
       }
@@ -629,7 +629,7 @@
           serverRoot));
     if (instanceFile == null)
     {
-      Message message =
+      LocalizableMessage message =
         ERR_CONFIG_CANNOT_DETERMINE_SERVER_ROOT.get(ENV_VAR_INSTALL_ROOT);
         throw new InitializationException(message);
     }
@@ -675,7 +675,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_CANNOT_REGISTER_AS_PRIVATE_SUFFIX.get(
+      LocalizableMessage message = ERR_CONFIG_CANNOT_REGISTER_AS_PRIVATE_SUFFIX.get(
           String.valueOf(configRootEntry.getDN()), getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -715,7 +715,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_CANNOT_CALCULATE_DIGEST.get(
+      LocalizableMessage message = ERR_CONFIG_CANNOT_CALCULATE_DIGEST.get(
           configFile, stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -835,7 +835,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_CANNOT_CALCULATE_DIGEST.get(
+      LocalizableMessage message = ERR_CONFIG_CANNOT_CALCULATE_DIGEST.get(
           latestFile.getAbsolutePath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -882,7 +882,7 @@
 
 
     // Apply the changes and make sure there were no errors.
-    List<Message> errorList = new LinkedList<Message>();
+    List<LocalizableMessage> errorList = new LinkedList<LocalizableMessage>();
     boolean successful = LDIFModify.modifyLDIF(sourceReader, changesReader,
                                                targetWriter, errorList);
 
@@ -891,13 +891,13 @@
     if (! successful)
     {
       // FIXME -- Log each error message and throw an exception.
-      for (Message s : errorList)
+      for (LocalizableMessage s : errorList)
       {
-        Message message = ERR_CONFIG_ERROR_APPLYING_STARTUP_CHANGE.get(s);
+        LocalizableMessage message = ERR_CONFIG_ERROR_APPLYING_STARTUP_CHANGE.get(s);
         logError(message);
       }
 
-      Message message = ERR_CONFIG_UNABLE_TO_APPLY_CHANGES_FILE.get();
+      LocalizableMessage message = ERR_CONFIG_UNABLE_TO_APPLY_CHANGES_FILE.get();
       throw new LDIFException(message);
     }
 
@@ -1172,7 +1172,7 @@
       if (!clientConnection.hasAllPrivileges(CONFIG_READ_AND_WRITE,
                                              addOperation))
       {
-        Message message = ERR_CONFIG_FILE_ADD_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_CONFIG_FILE_ADD_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                      message);
       }
@@ -1188,7 +1188,7 @@
       DN entryDN = e.getName();
       if (configEntries.containsKey(entryDN))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_FILE_ADD_ALREADY_EXISTS.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.ENTRY_ALREADY_EXISTS, message);
       }
@@ -1199,7 +1199,7 @@
       if (parentDN == null)
       {
         // The entry DN doesn't have a parent.  This is not allowed.
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_FILE_ADD_NO_PARENT_DN.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
@@ -1208,7 +1208,7 @@
       if (parentEntry == null)
       {
         // The parent entry does not exist.  This is not allowed.
-        Message message = ERR_CONFIG_FILE_ADD_NO_PARENT.get(
+        LocalizableMessage message = ERR_CONFIG_FILE_ADD_NO_PARENT.get(
                 String.valueOf(entryDN),
                 String.valueOf(parentDN));
 
@@ -1238,12 +1238,12 @@
       // See if the parent entry has any add listeners.  If so, then iterate
       // through them and make sure the new entry is acceptable.
       List<ConfigAddListener> addListeners = parentEntry.getAddListeners();
-      MessageBuilder unacceptableReason = new MessageBuilder();
+      LocalizableMessageBuilder unacceptableReason = new LocalizableMessageBuilder();
       for (ConfigAddListener l : addListeners)
       {
         if (! l.configAddIsAcceptable(newEntry, unacceptableReason))
         {
-          Message message = ERR_CONFIG_FILE_ADD_REJECTED_BY_LISTENER.
+          LocalizableMessage message = ERR_CONFIG_FILE_ADD_REJECTED_BY_LISTENER.
               get(String.valueOf(entryDN), String.valueOf(parentDN),
                   String.valueOf(unacceptableReason));
           throw new DirectoryException(
@@ -1268,7 +1268,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ce);
         }
 
-        Message message = ERR_CONFIG_FILE_ADD_FAILED.
+        LocalizableMessage message = ERR_CONFIG_FILE_ADD_FAILED.
             get(String.valueOf(entryDN), String.valueOf(parentDN),
                 getExceptionMessage(ce));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
@@ -1278,7 +1278,7 @@
 
       // Notify all the add listeners that the entry has been added.
       ResultCode    resultCode = ResultCode.SUCCESS;
-      List<Message> messages   = new LinkedList<Message>();
+      List<LocalizableMessage> messages   = new LinkedList<LocalizableMessage>();
       for (ConfigAddListener l : addListeners)
       {
         ConfigChangeResult result = l.applyConfigurationAdd(newEntry);
@@ -1299,10 +1299,10 @@
 
       if (resultCode != ResultCode.SUCCESS)
       {
-        MessageBuilder buffer = new MessageBuilder();
+        LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
         if (! messages.isEmpty())
         {
-          Iterator<Message> iterator = messages.iterator();
+          Iterator<LocalizableMessage> iterator = messages.iterator();
           buffer.append(iterator.next());
           while (iterator.hasNext())
           {
@@ -1311,7 +1311,7 @@
           }
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_FILE_ADD_APPLY_FAILED.get(String.valueOf(buffer));
         throw new DirectoryException(resultCode, message);
       }
@@ -1335,7 +1335,7 @@
       if (!clientConnection.hasAllPrivileges(CONFIG_READ_AND_WRITE,
                                              deleteOperation))
       {
-        Message message = ERR_CONFIG_FILE_DELETE_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_CONFIG_FILE_DELETE_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                      message);
       }
@@ -1367,7 +1367,7 @@
           }
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_FILE_DELETE_NO_SUCH_ENTRY.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
                 matchedDN, null);
@@ -1377,7 +1377,7 @@
       // If the entry has children, then fail.
       if (entry.hasChildren())
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_FILE_DELETE_HAS_CHILDREN.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.NOT_ALLOWED_ON_NONLEAF,
                 message);
@@ -1389,7 +1389,7 @@
       ConfigEntry parentEntry = entry.getParent();
       if (parentEntry == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_FILE_DELETE_NO_PARENT.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -1399,12 +1399,12 @@
       // all OK with the delete.
       List<ConfigDeleteListener> deleteListeners =
            parentEntry.getDeleteListeners();
-      MessageBuilder unacceptableReason = new MessageBuilder();
+      LocalizableMessageBuilder unacceptableReason = new LocalizableMessageBuilder();
       for (ConfigDeleteListener l : deleteListeners)
       {
         if (! l.configDeleteIsAcceptable(entry, unacceptableReason))
         {
-          Message message = ERR_CONFIG_FILE_DELETE_REJECTED.
+          LocalizableMessage message = ERR_CONFIG_FILE_DELETE_REJECTED.
               get(String.valueOf(entryDN), String.valueOf(parentEntry.getDN()),
                   String.valueOf(unacceptableReason));
           throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -1428,7 +1428,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ce);
         }
 
-        Message message = ERR_CONFIG_FILE_DELETE_FAILED.
+        LocalizableMessage message = ERR_CONFIG_FILE_DELETE_FAILED.
             get(String.valueOf(entryDN), String.valueOf(parentEntry.getDN()),
                 getExceptionMessage(ce));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
@@ -1438,7 +1438,7 @@
 
       // Notify all the delete listeners that the entry has been removed.
       ResultCode    resultCode = ResultCode.SUCCESS;
-      List<Message> messages   = new LinkedList<Message>();
+      List<LocalizableMessage> messages   = new LinkedList<LocalizableMessage>();
       for (ConfigDeleteListener l : deleteListeners)
       {
         ConfigChangeResult result = l.applyConfigurationDelete(entry);
@@ -1462,7 +1462,7 @@
         StringBuilder buffer = new StringBuilder();
         if (! messages.isEmpty())
         {
-          Iterator<Message> iterator = messages.iterator();
+          Iterator<LocalizableMessage> iterator = messages.iterator();
           buffer.append(iterator.next());
           while (iterator.hasNext())
           {
@@ -1471,7 +1471,7 @@
           }
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_FILE_DELETE_APPLY_FAILED.get(String.valueOf(buffer));
         throw new DirectoryException(resultCode, message);
       }
@@ -1499,7 +1499,7 @@
       if (!clientConnection.hasAllPrivileges(CONFIG_READ_AND_WRITE,
                                              modifyOperation))
       {
-        Message message = ERR_CONFIG_FILE_MODIFY_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_CONFIG_FILE_MODIFY_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                      message);
       }
@@ -1514,7 +1514,7 @@
           if (! clientConnection.hasPrivilege(Privilege.PRIVILEGE_CHANGE,
                                               modifyOperation))
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_CONFIG_FILE_MODIFY_PRIVS_INSUFFICIENT_PRIVILEGES.get();
             throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                          message);
@@ -1555,7 +1555,7 @@
           }
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_FILE_MODIFY_NO_SUCH_ENTRY.get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message,
                 matchedDN, null);
@@ -1567,7 +1567,7 @@
       if (! currentEntry.getEntry().getStructuralObjectClass().equals(
                  newEntry.getStructuralObjectClass()))
       {
-        Message message = ERR_CONFIG_FILE_MODIFY_STRUCTURAL_CHANGE_NOT_ALLOWED.
+        LocalizableMessage message = ERR_CONFIG_FILE_MODIFY_STRUCTURAL_CHANGE_NOT_ALLOWED.
             get(String.valueOf(entryDN));
         throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, message);
       }
@@ -1581,12 +1581,12 @@
       // If there are, then make sure they are all OK with the change.
       List<ConfigChangeListener> changeListeners =
            currentEntry.getChangeListeners();
-      MessageBuilder unacceptableReason = new MessageBuilder();
+      LocalizableMessageBuilder unacceptableReason = new LocalizableMessageBuilder();
       for (ConfigChangeListener l : changeListeners)
       {
         if (! l.configChangeIsAcceptable(newConfigEntry, unacceptableReason))
         {
-          Message message = ERR_CONFIG_FILE_MODIFY_REJECTED_BY_CHANGE_LISTENER.
+          LocalizableMessage message = ERR_CONFIG_FILE_MODIFY_REJECTED_BY_CHANGE_LISTENER.
               get(String.valueOf(entryDN), String.valueOf(unacceptableReason));
           throw new DirectoryException(
                   ResultCode.UNWILLING_TO_PERFORM, message);
@@ -1604,7 +1604,7 @@
 
       // Notify all the change listeners of the update.
       ResultCode   resultCode  = ResultCode.SUCCESS;
-      List<Message> messages   = new LinkedList<Message>();
+      List<LocalizableMessage> messages   = new LinkedList<LocalizableMessage>();
       for (ConfigChangeListener l : changeListeners)
       {
         ConfigChangeResult result = l.applyConfigurationChange(currentEntry);
@@ -1625,10 +1625,10 @@
 
       if (resultCode != ResultCode.SUCCESS)
       {
-        MessageBuilder buffer = new MessageBuilder();
+        LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
         if (! messages.isEmpty())
         {
-          Iterator<Message> iterator = messages.iterator();
+          Iterator<LocalizableMessage> iterator = messages.iterator();
           buffer.append(iterator.next());
           while (iterator.hasNext())
           {
@@ -1637,7 +1637,7 @@
           }
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_FILE_MODIFY_APPLY_FAILED.get(String.valueOf(buffer));
         throw new DirectoryException(resultCode, message);
       }
@@ -1663,7 +1663,7 @@
       if (!clientConnection.hasAllPrivileges(CONFIG_READ_AND_WRITE,
                                              modifyDNOperation))
       {
-        Message message = ERR_CONFIG_FILE_MODDN_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_CONFIG_FILE_MODDN_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                      message);
       }
@@ -1672,7 +1672,7 @@
 
     // Modify DN operations will not be allowed in the configuration, so this
     // will always throw an exception.
-    Message message = ERR_CONFIG_FILE_MODDN_NOT_ALLOWED.get();
+    LocalizableMessage message = ERR_CONFIG_FILE_MODDN_NOT_ALLOWED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1689,7 +1689,7 @@
     ClientConnection clientConnection = searchOperation.getClientConnection();
     if (! clientConnection.hasPrivilege(Privilege.CONFIG_READ, searchOperation))
     {
-      Message message = ERR_CONFIG_FILE_SEARCH_INSUFFICIENT_PRIVILEGES.get();
+      LocalizableMessage message = ERR_CONFIG_FILE_SEARCH_INSUFFICIENT_PRIVILEGES.get();
       throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                    message);
     }
@@ -1700,7 +1700,7 @@
     ConfigEntry baseEntry = configEntries.get(baseDN);
     if (baseEntry == null)
     {
-      Message message = ERR_CONFIG_FILE_SEARCH_NO_SUCH_BASE.get(
+      LocalizableMessage message = ERR_CONFIG_FILE_SEARCH_NO_SUCH_BASE.get(
               String.valueOf(baseDN));
       DN matchedDN = null;
       if (baseDN.isDescendantOf(configRootEntry.getDN()))
@@ -1776,7 +1776,7 @@
 
       default:
         // The user provided an invalid scope.
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_FILE_SEARCH_INVALID_SCOPE.get(String.valueOf(scope));
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
     }
@@ -1872,7 +1872,7 @@
 
           StaticUtils.close(inputStream, outputStream);
 
-          Message message = WARN_CONFIG_MANUAL_CHANGES_DETECTED.get(
+          LocalizableMessage message = WARN_CONFIG_MANUAL_CHANGES_DETECTED.get(
               configFile, newConfigFile.getAbsolutePath());
           logError(message);
 
@@ -1887,7 +1887,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_MANUAL_CHANGES_LOST.get(
+        LocalizableMessage message = ERR_CONFIG_MANUAL_CHANGES_LOST.get(
             configFile, stackTraceToSingleLineString(e));
         logError(message);
 
@@ -1914,7 +1914,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_FILE_WRITE_CANNOT_EXPORT_NEW_CONFIG.get(
+      LocalizableMessage message = ERR_CONFIG_FILE_WRITE_CANNOT_EXPORT_NEW_CONFIG.get(
           String.valueOf(tempConfig), stackTraceToSingleLineString(e));
       logError(message);
 
@@ -1938,7 +1938,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_FILE_WRITE_CANNOT_RENAME_NEW_CONFIG.
+      LocalizableMessage message = ERR_CONFIG_FILE_WRITE_CANNOT_RENAME_NEW_CONFIG.
           get(String.valueOf(tempConfig), String.valueOf(configFile),
               stackTraceToSingleLineString(e));
       logError(message);
@@ -1984,7 +1984,7 @@
       {
         if (! archiveDirectory.mkdirs())
         {
-          Message message = ERR_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR_NO_REASON.
+          LocalizableMessage message = ERR_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR_NO_REASON.
               get(archiveDirectory.getAbsolutePath());
           logError(message);
 
@@ -2000,7 +2000,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR.
+        LocalizableMessage message = ERR_CONFIG_FILE_CANNOT_CREATE_ARCHIVE_DIR.
             get(archiveDirectory.getAbsolutePath(),
                 stackTraceToSingleLineString(e));
         logError(message);
@@ -2039,7 +2039,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE.get(
+      LocalizableMessage message = ERR_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE.get(
           stackTraceToSingleLineString(e));
       logError(message);
 
@@ -2072,7 +2072,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE.get(
+      LocalizableMessage message = ERR_CONFIG_FILE_CANNOT_WRITE_CONFIG_ARCHIVE.get(
           stackTraceToSingleLineString(e));
       logError(message);
 
@@ -2355,7 +2355,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_LDIF_WRITE_ERROR.get(String.valueOf(e));
+      LocalizableMessage message = ERR_CONFIG_LDIF_WRITE_ERROR.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
     }
@@ -2371,7 +2371,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_FILE_CLOSE_ERROR.get(String.valueOf(e));
+      LocalizableMessage message = ERR_CONFIG_FILE_CLOSE_ERROR.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
     }
@@ -2406,7 +2406,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_FILE_WRITE_ERROR.get(
+      LocalizableMessage message = ERR_CONFIG_FILE_WRITE_ERROR.get(
           configEntry.getDN().toString(), String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -2444,7 +2444,7 @@
   public LDIFImportResult importLDIF(LDIFImportConfig importConfig)
          throws DirectoryException
   {
-    Message message = ERR_CONFIG_FILE_UNWILLING_TO_IMPORT.get();
+    LocalizableMessage message = ERR_CONFIG_FILE_UNWILLING_TO_IMPORT.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -2525,7 +2525,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_CONFIG_BACKUP_CANNOT_GET_MAC.get(
+          LocalizableMessage message = ERR_CONFIG_BACKUP_CANNOT_GET_MAC.get(
               macKeyID, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
@@ -2549,7 +2549,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_CONFIG_BACKUP_CANNOT_GET_DIGEST.get(
+          LocalizableMessage message = ERR_CONFIG_BACKUP_CANNOT_GET_DIGEST.get(
               digestAlgorithm, stackTraceToSingleLineString(e));
           throw new DirectoryException(
                          DirectoryServer.getServerErrorResultCode(), message,
@@ -2601,7 +2601,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
+      LocalizableMessage message = ERR_CONFIG_BACKUP_CANNOT_CREATE_ARCHIVE_FILE.
           get(String.valueOf(filename), backupDirectory.getPath(),
               stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
@@ -2625,7 +2625,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_BACKUP_CANNOT_GET_CIPHER.get(
+        LocalizableMessage message = ERR_CONFIG_BACKUP_CANNOT_GET_CIPHER.get(
             stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -2636,7 +2636,7 @@
     // Wrap the file output stream in a zip output stream.
     ZipOutputStream zipStream = new ZipOutputStream(outputStream);
 
-    Message message = ERR_CONFIG_BACKUP_ZIP_COMMENT.get(
+    LocalizableMessage message = ERR_CONFIG_BACKUP_ZIP_COMMENT.get(
             DynamicConstants.PRODUCT_NAME,
             backupID);
     zipStream.setComment(message.toString());
@@ -2898,7 +2898,7 @@
     BackupInfo      backupInfo      = backupDirectory.getBackupInfo(backupID);
     if (backupInfo == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_RESTORE_NO_SUCH_BACKUP.get(backupID, backupPath);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -2911,7 +2911,7 @@
          backupInfo.getBackupProperty(BACKUP_PROPERTY_ARCHIVE_FILENAME);
     if (backupFilename == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CONFIG_RESTORE_NO_BACKUP_FILE.get(backupID, backupPath);
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
@@ -2922,7 +2922,7 @@
     {
       if (! backupFile.exists())
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_RESTORE_NO_SUCH_FILE.get(backupID, backupFile.getPath());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
@@ -2934,7 +2934,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_RESTORE_CANNOT_CHECK_FOR_ARCHIVE.get(
+      LocalizableMessage message = ERR_CONFIG_RESTORE_CANNOT_CHECK_FOR_ARCHIVE.get(
           backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -2951,7 +2951,7 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_DIGEST_ALGORITHM);
       if (digestAlgorithm == null)
       {
-        Message message = ERR_CONFIG_RESTORE_UNKNOWN_DIGEST.get(backupID);
+        LocalizableMessage message = ERR_CONFIG_RESTORE_UNKNOWN_DIGEST.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
       }
@@ -2963,7 +2963,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_RESTORE_CANNOT_GET_DIGEST.get(backupID, digestAlgorithm);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -2980,7 +2980,7 @@
            backupInfo.getBackupProperty(BACKUP_PROPERTY_MAC_KEY_ID);
       if (macKeyID == null)
       {
-        Message message = ERR_CONFIG_RESTORE_UNKNOWN_MAC.get(backupID);
+        LocalizableMessage message = ERR_CONFIG_RESTORE_UNKNOWN_MAC.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
       }
@@ -2991,7 +2991,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_CONFIG_RESTORE_CANNOT_GET_MAC.get(
+        LocalizableMessage message = ERR_CONFIG_RESTORE_CANNOT_GET_MAC.get(
             backupID, macKeyID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -3008,7 +3008,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_RESTORE_CANNOT_OPEN_BACKUP_FILE.get(
+      LocalizableMessage message = ERR_CONFIG_RESTORE_CANNOT_OPEN_BACKUP_FILE.get(
           backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -3025,7 +3025,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_CONFIG_RESTORE_CANNOT_GET_CIPHER.get(
+        LocalizableMessage message = ERR_CONFIG_RESTORE_CANNOT_GET_CIPHER.get(
                 backupFile.getPath(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -3092,7 +3092,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_CONFIG_RESTORE_CANNOT_BACKUP_EXISTING_CONFIG.
+        LocalizableMessage message = ERR_CONFIG_RESTORE_CANNOT_BACKUP_EXISTING_CONFIG.
             get(backupID, configDirPath, String.valueOf(backupDirPath),
                 getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
@@ -3114,20 +3114,20 @@
           try
           {
             configBackupDir.renameTo(configDir);
-            Message message =
+            LocalizableMessage message =
                 NOTE_CONFIG_RESTORE_RESTORED_OLD_CONFIG.get(configDirPath);
             logError(message);
           }
           catch (Exception e2)
           {
-            Message message = ERR_CONFIG_RESTORE_CANNOT_RESTORE_OLD_CONFIG.get(
+            LocalizableMessage message = ERR_CONFIG_RESTORE_CANNOT_RESTORE_OLD_CONFIG.get(
                 configBackupDir.getPath());
             logError(message);
           }
         }
 
 
-        Message message = ERR_CONFIG_RESTORE_CANNOT_CREATE_CONFIG_DIRECTORY.get(
+        LocalizableMessage message = ERR_CONFIG_RESTORE_CANNOT_CREATE_CONFIG_DIRECTORY.get(
             backupID, configDirPath, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -3151,12 +3151,12 @@
         // Tell the user where the previous config was archived.
         if (configBackupDir != null)
         {
-          Message message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
+          LocalizableMessage message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
               configBackupDir.getPath());
           logError(message);
         }
 
-        Message message = ERR_CONFIG_RESTORE_CANNOT_GET_ZIP_ENTRY.get(
+        LocalizableMessage message = ERR_CONFIG_RESTORE_CANNOT_GET_ZIP_ENTRY.get(
             backupID, backupFile.getPath(), stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -3203,12 +3203,12 @@
           // Tell the user where the previous config was archived.
           if (configBackupDir != null)
           {
-            Message message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
+            LocalizableMessage message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
                 configBackupDir.getPath());
             logError(message);
           }
 
-          Message message = ERR_CONFIG_RESTORE_CANNOT_CREATE_FILE.
+          LocalizableMessage message = ERR_CONFIG_RESTORE_CANNOT_CREATE_FILE.
               get(backupID, restoreFile.getAbsolutePath(),
                   stackTraceToSingleLineString(e));
           throw new DirectoryException(
@@ -3265,12 +3265,12 @@
         // Tell the user where the previous config was archived.
         if (configBackupDir != null)
         {
-          Message message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
+          LocalizableMessage message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
               configBackupDir.getPath());
           logError(message);
         }
 
-        Message message = ERR_CONFIG_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE.get(
+        LocalizableMessage message = ERR_CONFIG_RESTORE_CANNOT_PROCESS_ARCHIVE_FILE.get(
             backupID, fileName, stackTraceToSingleLineString(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -3285,7 +3285,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE.get(
+      LocalizableMessage message = ERR_CONFIG_RESTORE_ERROR_ON_ZIP_STREAM_CLOSE.get(
           backupID, backupFile.getPath(), getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -3300,7 +3300,7 @@
       byte[] calculatedHash = digest.digest();
       if (Arrays.equals(calculatedHash, unsignedHash))
       {
-        Message message = NOTE_CONFIG_RESTORE_UNSIGNED_HASH_VALID.get();
+        LocalizableMessage message = NOTE_CONFIG_RESTORE_UNSIGNED_HASH_VALID.get();
         logError(message);
       }
       else
@@ -3308,12 +3308,12 @@
         // Tell the user where the previous config was archived.
         if (configBackupDir != null)
         {
-          Message message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
+          LocalizableMessage message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
               configBackupDir.getPath());
           logError(message);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_RESTORE_UNSIGNED_HASH_INVALID.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
@@ -3325,7 +3325,7 @@
       byte[] calculatedSignature = mac.doFinal();
       if (Arrays.equals(calculatedSignature, signedHash))
       {
-        Message message = NOTE_CONFIG_RESTORE_SIGNED_HASH_VALID.get();
+        LocalizableMessage message = NOTE_CONFIG_RESTORE_SIGNED_HASH_VALID.get();
         logError(message);
       }
       else
@@ -3333,12 +3333,12 @@
         // Tell the user where the previous config was archived.
         if (configBackupDir != null)
         {
-          Message message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
+          LocalizableMessage message = ERR_CONFIG_RESTORE_OLD_CONFIG_SAVED.get(
               configBackupDir.getPath());
           logError(message);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_CONFIG_RESTORE_SIGNED_HASH_INVALID.get(backupID);
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message);
@@ -3349,7 +3349,7 @@
     // If we are just verifying the archive, then we're done.
     if (verifyOnly)
     {
-      Message message =
+      LocalizableMessage message =
           NOTE_CONFIG_RESTORE_VERIFY_SUCCESSFUL.get(backupID, backupPath);
       logError(message);
       return;
@@ -3364,7 +3364,7 @@
       recursiveDelete(configBackupDir);
     }
 
-    Message message = NOTE_CONFIG_RESTORE_SUCCESSFUL.get(backupID, backupPath);
+    LocalizableMessage message = NOTE_CONFIG_RESTORE_SUCCESSFUL.get(backupID, backupPath);
     logError(message);
   }
 
@@ -3432,7 +3432,7 @@
   {
     if (result == null)
     {
-      Message message = ERR_CONFIG_CHANGE_NO_RESULT.
+      LocalizableMessage message = ERR_CONFIG_CHANGE_NO_RESULT.
           get(String.valueOf(className), String.valueOf(methodName),
               String.valueOf(entryDN));
       logError(message);
@@ -3441,12 +3441,12 @@
 
     ResultCode    resultCode          = result.getResultCode();
     boolean       adminActionRequired = result.adminActionRequired();
-    List<Message> messages            = result.getMessages();
+    List<LocalizableMessage> messages            = result.getMessages();
 
-    MessageBuilder messageBuffer = new MessageBuilder();
+    LocalizableMessageBuilder messageBuffer = new LocalizableMessageBuilder();
     if (messages != null)
     {
-      for (Message s : messages)
+      for (LocalizableMessage s : messages)
       {
         if (messageBuffer.length() > 0)
         {
@@ -3459,7 +3459,7 @@
 
     if (resultCode != ResultCode.SUCCESS)
     {
-      Message message = ERR_CONFIG_CHANGE_RESULT_ERROR.
+      LocalizableMessage message = ERR_CONFIG_CHANGE_RESULT_ERROR.
           get(String.valueOf(className), String.valueOf(methodName),
               String.valueOf(entryDN), String.valueOf(resultCode),
               adminActionRequired, messageBuffer.toString());
@@ -3467,14 +3467,14 @@
     }
     else if (adminActionRequired)
     {
-      Message message = WARN_CONFIG_CHANGE_RESULT_ACTION_REQUIRED.
+      LocalizableMessage message = WARN_CONFIG_CHANGE_RESULT_ACTION_REQUIRED.
           get(String.valueOf(className), String.valueOf(methodName),
               String.valueOf(entryDN), messageBuffer.toString());
       logError(message);
     }
     else if (messageBuffer.length() > 0)
     {
-      Message message = INFO_CONFIG_CHANGE_RESULT_MESSAGES.
+      LocalizableMessage message = INFO_CONFIG_CHANGE_RESULT_MESSAGES.
           get(String.valueOf(className), String.valueOf(methodName),
               String.valueOf(entryDN), messageBuffer.toString());
       logError(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/CryptPasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/CryptPasswordStorageScheme.java
index 4a0d552..a70fb1c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/CryptPasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/CryptPasswordStorageScheme.java
@@ -32,7 +32,7 @@
 import java.util.List;
 import java.util.Random;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.CryptPasswordStorageSchemeCfg;
 import org.opends.server.admin.std.server.PasswordStorageSchemeCfg;
@@ -137,7 +137,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
           CLASS_NAME, stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -179,7 +179,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
           CLASS_NAME, stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -199,7 +199,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
           CLASS_NAME, stackTraceToSingleLineString(e));
       throw new DirectoryException(
           DirectoryServer.getServerErrorResultCode(), message, e);
@@ -224,7 +224,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
           CLASS_NAME, stackTraceToSingleLineString(e));
       throw new DirectoryException(
           DirectoryServer.getServerErrorResultCode(), message, e);
@@ -420,7 +420,7 @@
   public ByteString encodeAuthPassword(ByteSequence plaintext)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -458,7 +458,7 @@
   public ByteString getPlaintextValue(ByteSequence storedPassword)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_CRYPT);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -473,7 +473,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
       ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -508,7 +508,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
           PasswordStorageSchemeCfg configuration,
-          List<Message> unacceptableReasons)
+          List<LocalizableMessage> unacceptableReasons)
   {
     CryptPasswordStorageSchemeCfg config =
             (CryptPasswordStorageSchemeCfg) configuration;
@@ -523,7 +523,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       CryptPasswordStorageSchemeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // If we've gotten this far, then we'll accept the change.
     return true;
@@ -540,7 +540,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    List<Message>     messages            = new ArrayList<Message>();
+    List<LocalizableMessage>     messages            = new ArrayList<LocalizableMessage>();
 
 
     currentConfig = configuration;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/DefaultEntryCache.java b/opendj3-server-dev/src/server/org/opends/server/extensions/DefaultEntryCache.java
index 0cf9af0..ec282cf 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/DefaultEntryCache.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/DefaultEntryCache.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -335,7 +335,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       EntryCacheCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // No implementation required.
@@ -354,7 +354,7 @@
   {
     // No implementation required.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     return changeResult;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/DictionaryPasswordValidator.java b/opendj3-server-dev/src/server/org/opends/server/extensions/DictionaryPasswordValidator.java
index 899ddad..f8f64bd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/DictionaryPasswordValidator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/DictionaryPasswordValidator.java
@@ -26,7 +26,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -48,7 +48,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -121,7 +121,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      MessageBuilder invalidReason)
+                                      LocalizableMessageBuilder invalidReason)
   {
     // Get a handle to the current configuration.
     DictionaryPasswordValidatorCfg config = currentConfig;
@@ -197,7 +197,7 @@
     File dictionaryFile = getFileForPath(configuration.getDictionaryFile());
     if (! dictionaryFile.exists())
     {
-      Message message = ERR_DICTIONARY_VALIDATOR_NO_SUCH_FILE.get(
+      LocalizableMessage message = ERR_DICTIONARY_VALIDATOR_NO_SUCH_FILE.get(
           configuration.getDictionaryFile());
       throw new ConfigException(message);
     }
@@ -228,7 +228,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_DICTIONARY_VALIDATOR_CANNOT_READ_FILE.get(
+      LocalizableMessage message = ERR_DICTIONARY_VALIDATOR_CANNOT_READ_FILE.get(
           configuration.getDictionaryFile(), String.valueOf(e));
       throw new InitializationException(message);
     }
@@ -253,7 +253,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PasswordValidatorCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     DictionaryPasswordValidatorCfg config =
          (DictionaryPasswordValidatorCfg) configuration;
@@ -267,7 +267,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       DictionaryPasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // Make sure that we can load the dictionary.  If so, then we'll accept the
     // new configuration.
@@ -304,7 +304,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Make sure we can load the dictionary.  If we can, then activate the new
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandler.java b/opendj3-server-dev/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandler.java
index 6ec2f21..861f09f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/DigestMD5SASLMechanismHandler.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.extensions;
 
@@ -32,7 +32,7 @@
 import java.util.HashMap;
 import java.util.List;
 import javax.security.sasl.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.DigestMD5SASLMechanismHandlerCfgDefn.*;
 import org.opends.server.admin.std.server.DigestMD5SASLMechanismHandlerCfg;
@@ -111,7 +111,7 @@
          DN identityMapperDN = configuration.getIdentityMapperDN();
          identityMapper = DirectoryServer.getIdentityMapper(identityMapperDN);
          serverFQDN = getFQDN(configuration);
-         Message msg= NOTE_DIGEST_MD5_SERVER_FQDN.get(serverFQDN);
+         LocalizableMessage msg= NOTE_DIGEST_MD5_SERVER_FQDN.get(serverFQDN);
          logError(msg);
          String QOP = getQOP(configuration);
          saslProps = new HashMap<String,String>();
@@ -129,7 +129,7 @@
           if (debugEnabled()) {
               TRACER.debugCaught(DebugLogLevel.ERROR, unhe);
           }
-          Message message = ERR_SASL_CANNOT_GET_SERVER_FQDN.get(
+          LocalizableMessage message = ERR_SASL_CANNOT_GET_SERVER_FQDN.get(
                   String.valueOf(configEntryDN), getExceptionMessage(unhe));
           throw new InitializationException(message, unhe);
       }
@@ -153,7 +153,7 @@
   public void processSASLBind(BindOperation bindOp) {
       ClientConnection clientConnection = bindOp.getClientConnection();
       if (clientConnection == null) {
-          Message message = ERR_SASLGSSAPI_NO_CLIENT_CONNECTION.get();
+          LocalizableMessage message = ERR_SASLGSSAPI_NO_CLIENT_CONNECTION.get();
           bindOp.setAuthFailureReason(message);
           bindOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
           return;
@@ -169,7 +169,7 @@
               if (debugEnabled()) {
                   TRACER.debugCaught(DebugLogLevel.ERROR, ex);
               }
-              Message msg =
+              LocalizableMessage msg =
                   ERR_SASL_CONTEXT_CREATE_ERROR.get(SASL_MECHANISM_DIGEST_MD5,
                                                     getExceptionMessage(ex));
               clientConn.setSASLAuthStateInfo(null);
@@ -213,7 +213,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     DigestMD5SASLMechanismHandlerCfg config =
          (DigestMD5SASLMechanismHandlerCfg) configuration;
@@ -226,7 +226,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       DigestMD5SASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -241,12 +241,12 @@
       ResultCode        resultCode          = ResultCode.SUCCESS;
       boolean           adminActionRequired = false;
 
-      ArrayList<Message> messages            = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
       try {
           DN identityMapperDN = configuration.getIdentityMapperDN();
           identityMapper = DirectoryServer.getIdentityMapper(identityMapperDN);
           serverFQDN = getFQDN(configuration);
-          Message msg = NOTE_DIGEST_MD5_SERVER_FQDN.get(serverFQDN);
+          LocalizableMessage msg = NOTE_DIGEST_MD5_SERVER_FQDN.get(serverFQDN);
           logError(msg);
           String QOP = getQOP(configuration);
           saslProps = new HashMap<String,String>();
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/DynamicGroup.java b/opendj3-server-dev/src/server/org/opends/server/extensions/DynamicGroup.java
index 5aa60b7..5fa234e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/DynamicGroup.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/DynamicGroup.java
@@ -34,7 +34,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.DynamicGroupImplementationCfg;
 import org.opends.server.api.Group;
 import org.opends.server.config.ConfigException;
@@ -167,7 +167,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = ERR_DYNAMICGROUP_CANNOT_DECODE_MEMBERURL.
+            LocalizableMessage message = ERR_DYNAMICGROUP_CANNOT_DECODE_MEMBERURL.
                 get(v.getValue().toString(),
                     String.valueOf(groupEntry.getName()),
                     de.getMessageObject());
@@ -281,7 +281,7 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Dynamic groups don't support nesting.
-    Message message = ERR_DYNAMICGROUP_NESTING_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_DYNAMICGROUP_NESTING_NOT_SUPPORTED.get();
     throw new UnsupportedOperationException(message.toString());
   }
 
@@ -295,7 +295,7 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Dynamic groups don't support nesting.
-    Message message = ERR_DYNAMICGROUP_NESTING_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_DYNAMICGROUP_NESTING_NOT_SUPPORTED.get();
     throw new UnsupportedOperationException(message.toString());
   }
 
@@ -403,7 +403,7 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Dynamic groups don't support altering the member list.
-    Message message = ERR_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED.get();
     throw new UnsupportedOperationException(message.toString());
   }
 
@@ -417,7 +417,7 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Dynamic groups don't support altering the member list.
-    Message message = ERR_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_DYNAMICGROUP_ALTERING_MEMBERS_NOT_SUPPORTED.get();
     throw new UnsupportedOperationException(message.toString());
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/DynamicGroupSearchThread.java b/opendj3-server-dev/src/server/org/opends/server/extensions/DynamicGroupSearchThread.java
index 2bfd8a0..0fc3b2a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/DynamicGroupSearchThread.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/DynamicGroupSearchThread.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -132,7 +132,7 @@
       {
         if (resultCode == ResultCode.NO_SUCH_OBJECT)
         {
-          Message message = WARN_DYNAMICGROUP_NONEXISTENT_BASE_DN.
+          LocalizableMessage message = WARN_DYNAMICGROUP_NONEXISTENT_BASE_DN.
               get(String.valueOf(baseDNs[searchCounter]),
                   String.valueOf(memberList.getDynamicGroupDN()));
           ErrorLogger.logError(message);
@@ -140,7 +140,7 @@
         }
         else
         {
-          Message message =
+          LocalizableMessage message =
                ERR_DYNAMICGROUP_INTERNAL_SEARCH_FAILED.get(
                        String.valueOf(baseDNs[searchCounter]),
                        String.valueOf(searchFilters[searchCounter]),
@@ -175,7 +175,7 @@
       {
         if (! memberList.addResult(searchEntry))
         {
-          Message message = ERR_DYNAMICGROUP_CANNOT_RETURN_ENTRY.
+          LocalizableMessage message = ERR_DYNAMICGROUP_CANNOT_RETURN_ENTRY.
               get(String.valueOf(searchEntry.getName()),
                   String.valueOf(memberList.getDynamicGroupDN()));
           throw new DirectoryException(
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/EntityTagVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/EntityTagVirtualAttributeProvider.java
index c301758..f380561 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/EntityTagVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/EntityTagVirtualAttributeProvider.java
@@ -34,7 +34,7 @@
 import java.util.zip.CRC32;
 import java.util.zip.Checksum;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.EntityTagVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -195,7 +195,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       final EntityTagVirtualAttributeCfg configuration,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     // The new configuration should always be acceptable.
     return true;
@@ -264,7 +264,7 @@
   public void processSearch(final VirtualAttributeRule rule,
       final SearchOperation searchOperation)
   {
-    final Message message = ERR_ETAG_VATTR_NOT_SEARCHABLE.get(rule
+    final LocalizableMessage message = ERR_ETAG_VATTR_NOT_SEARCHABLE.get(rule
         .getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/EntryCacheCommon.java b/opendj3-server-dev/src/server/org/opends/server/extensions/EntryCacheCommon.java
index 2e07b1a..83ab340 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/EntryCacheCommon.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/EntryCacheCommon.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -34,8 +35,8 @@
 import java.util.List;
 import java.util.SortedSet;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageDescriptor;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageDescriptor;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.Attributes;
 import org.opends.server.types.DN;
@@ -85,10 +86,10 @@
     private EntryCacheCommon.ConfigPhase _configPhase;
 
     // Unacceptable reasons. Used when _configPhase is PHASE_ACCEPTABLE.
-    private List<Message> _unacceptableReasons;
+    private List<LocalizableMessage> _unacceptableReasons;
 
     // Error messages. Used when _configPhase is PHASE_APPLY.
-    private ArrayList<Message> _errorMessages;
+    private ArrayList<LocalizableMessage> _errorMessages;
 
     // Result code. Used when _configPhase is PHASE_APPLY.
     private ResultCode _resultCode;
@@ -113,8 +114,8 @@
      */
     public ConfigErrorHandler (
         EntryCacheCommon.ConfigPhase configPhase,
-        List<Message> unacceptableReasons,
-        ArrayList<Message>            errorMessages
+        List<LocalizableMessage> unacceptableReasons,
+        ArrayList<LocalizableMessage>            errorMessages
         )
     {
       _configPhase           = configPhase;
@@ -133,7 +134,7 @@
      * @param resultCode   the change result for the current configuration
      */
     public void reportError(
-            Message error,
+            LocalizableMessage error,
             boolean isAcceptable,
             ResultCode resultCode
     )
@@ -175,7 +176,7 @@
      *                              is required or <code>false</code> otherwise
      */
     public void reportError(
-            Message error,
+            LocalizableMessage error,
             boolean isAcceptable,
             ResultCode resultCode,
             boolean isAdminActionRequired
@@ -236,7 +237,7 @@
      *
      * @return the list of unacceptable reasons
      */
-    public List<Message> getUnacceptableReasons()
+    public List<LocalizableMessage> getUnacceptableReasons()
     {
       return _unacceptableReasons;
     }
@@ -247,7 +248,7 @@
      *
      * @return the list of error messages
      */
-    public ArrayList<Message> getErrorMessages()
+    public ArrayList<LocalizableMessage> getErrorMessages()
     {
       return _errorMessages;
     }
@@ -290,7 +291,7 @@
    */
   public static HashSet<SearchFilter> getFilters (
       SortedSet<String>       filters,
-      MessageDescriptor.Arg3<CharSequence, CharSequence, CharSequence>
+      LocalizableMessageDescriptor.Arg3<CharSequence, CharSequence, CharSequence>
                               decodeErrorMsg,
       ConfigErrorHandler      errorHandler,
       DN                      configEntryDN
@@ -311,7 +312,7 @@
         catch (DirectoryException de)
         {
           // We couldn't decode this filter. Report an error and continue.
-          Message message = decodeErrorMsg.get(String.valueOf(configEntryDN),
+          LocalizableMessage message = decodeErrorMsg.get(String.valueOf(configEntryDN),
             curFilter, (de.getMessage() != null ? de.getMessage() :
               stackTraceToSingleLineString(de)));
           errorHandler.reportError(message, false,
@@ -339,8 +340,8 @@
    */
   public static ConfigErrorHandler getConfigErrorHandler (
       EntryCacheCommon.ConfigPhase  configPhase,
-      List<Message> unacceptableReasons,
-      ArrayList<Message>             errorMessages
+      List<LocalizableMessage> unacceptableReasons,
+      ArrayList<LocalizableMessage>             errorMessages
       )
   {
     ConfigErrorHandler errorHandler = null;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProvider.java
index fbeeadf..93b55a1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/EntryUUIDVirtualAttributeProvider.java
@@ -31,7 +31,7 @@
 import java.util.Set;
 import java.util.UUID;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.EntryUUIDVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
 import org.opends.server.core.SearchOperation;
@@ -181,7 +181,7 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    Message message = ERR_ENTRYUUID_VATTR_NOT_SEARCHABLE.get(
+    LocalizableMessage message = ERR_ENTRYUUID_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandler.java b/opendj3-server-dev/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandler.java
index b9ace21..6a432ea 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/ErrorLogAccountStatusNotificationHandler.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -118,7 +119,7 @@
     logError(NOTE_ERRORLOG_ACCTNOTHANDLER_NOTIFICATION.get(
                   notification.getNotificationType().getName(),
                   String.valueOf(notification.getUserDN()),
-                  notification.getMessage().getDescriptor().getId(),
+                  notification.getMessage().ordinal(),
                   notification.getMessage()));
   }
 
@@ -130,7 +131,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       AccountStatusNotificationHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     ErrorLogAccountStatusNotificationHandlerCfg config =
          (ErrorLogAccountStatusNotificationHandlerCfg) configuration;
@@ -144,7 +145,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       ErrorLogAccountStatusNotificationHandlerCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     // Make sure that we can process the defined notification handler.
@@ -195,7 +196,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     ConfigChangeResult changeResult = new ConfigChangeResult(
         resultCode, adminActionRequired, messages
         );
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/ExactMatchIdentityMapper.java b/opendj3-server-dev/src/server/org/opends/server/extensions/ExactMatchIdentityMapper.java
index 6596237..63f94b9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/ExactMatchIdentityMapper.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/ExactMatchIdentityMapper.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -227,7 +227,7 @@
 
         case SIZE_LIMIT_EXCEEDED:
           // Multiple entries matched the filter.  This is not acceptable.
-          Message message =
+          LocalizableMessage message =
               ERR_EXACTMAP_MULTIPLE_MATCHING_ENTRIES.get(String.valueOf(id));
           throw new DirectoryException(
                   ResultCode.CONSTRAINT_VIOLATION, message);
@@ -258,7 +258,7 @@
           matchingEntry = iterator.next();
           if (iterator.hasNext())
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_EXACTMAP_MULTIPLE_MATCHING_ENTRIES.get(String.valueOf(id));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                          message);
@@ -266,7 +266,7 @@
         }
         else
         {
-          Message message =
+          LocalizableMessage message =
               ERR_EXACTMAP_MULTIPLE_MATCHING_ENTRIES.get(String.valueOf(id));
           throw new DirectoryException(
                   ResultCode.CONSTRAINT_VIOLATION, message);
@@ -292,7 +292,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(IdentityMapperCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     ExactMatchIdentityMapperCfg config =
          (ExactMatchIdentityMapperCfg) configuration;
@@ -306,7 +306,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       ExactMatchIdentityMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -347,7 +347,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     attributeTypes =
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/ExternalSASLMechanismHandler.java b/opendj3-server-dev/src/server/org/opends/server/extensions/ExternalSASLMechanismHandler.java
index 5e8b2c2..7299f47 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/ExternalSASLMechanismHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/ExternalSASLMechanismHandler.java
@@ -30,7 +30,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.ExternalSASLMechanismHandlerCfg;
 import org.opends.server.admin.std.server.SASLMechanismHandlerCfg;
@@ -165,14 +165,14 @@
     ClientConnection clientConnection = bindOperation.getClientConnection();
     if (clientConnection == null) {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
-      Message message = ERR_SASLEXTERNAL_NO_CLIENT_CONNECTION.get();
+      LocalizableMessage message = ERR_SASLEXTERNAL_NO_CLIENT_CONNECTION.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
 
     if(!(clientConnection instanceof LDAPClientConnection)) {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
-        Message message = ERR_SASLEXTERNAL_NOT_LDAP_CLIENT_INSTANCE.get();
+        LocalizableMessage message = ERR_SASLEXTERNAL_NOT_LDAP_CLIENT_INSTANCE.get();
         bindOperation.setAuthFailureReason(message);
         return;
     }
@@ -180,7 +180,7 @@
     Certificate[] clientCertChain = lc.getClientCertificateChain();
     if ((clientCertChain == null) || (clientCertChain.length == 0)) {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
-      Message message = ERR_SASLEXTERNAL_NO_CLIENT_CERT.get();
+      LocalizableMessage message = ERR_SASLEXTERNAL_NO_CLIENT_CERT.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -217,7 +217,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLEXTERNAL_NO_MAPPING.get();
+      LocalizableMessage message = ERR_SASLEXTERNAL_NO_MAPPING.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -240,7 +240,7 @@
           {
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            Message message = ERR_SASLEXTERNAL_NO_CERT_IN_ENTRY.get(
+            LocalizableMessage message = ERR_SASLEXTERNAL_NO_CERT_IN_ENTRY.get(
                     String.valueOf(userEntry.getName()));
             bindOperation.setAuthFailureReason(message);
             return;
@@ -269,7 +269,7 @@
             {
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              Message message = ERR_SASLEXTERNAL_PEER_CERT_NOT_FOUND.get(
+              LocalizableMessage message = ERR_SASLEXTERNAL_PEER_CERT_NOT_FOUND.get(
                       String.valueOf(userEntry.getName()));
               bindOperation.setAuthFailureReason(message);
               return;
@@ -284,7 +284,7 @@
 
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            Message message = ERR_SASLEXTERNAL_CANNOT_VALIDATE_CERT.get(
+            LocalizableMessage message = ERR_SASLEXTERNAL_CANNOT_VALIDATE_CERT.get(
                     String.valueOf(userEntry.getName()),
                     getExceptionMessage(e));
             bindOperation.setAuthFailureReason(message);
@@ -317,7 +317,7 @@
             {
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              Message message = ERR_SASLEXTERNAL_PEER_CERT_NOT_FOUND.get(
+              LocalizableMessage message = ERR_SASLEXTERNAL_PEER_CERT_NOT_FOUND.get(
                       String.valueOf(userEntry.getName()));
               bindOperation.setAuthFailureReason(message);
               return;
@@ -332,7 +332,7 @@
 
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            Message message = ERR_SASLEXTERNAL_CANNOT_VALIDATE_CERT.get(
+            LocalizableMessage message = ERR_SASLEXTERNAL_CANNOT_VALIDATE_CERT.get(
                     String.valueOf(userEntry.getName()),
                     getExceptionMessage(e));
             bindOperation.setAuthFailureReason(message);
@@ -380,7 +380,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     ExternalSASLMechanismHandlerCfg config =
          (ExternalSASLMechanismHandlerCfg) configuration;
@@ -394,7 +394,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       ExternalSASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -409,7 +409,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // See if we should attempt to validate client certificates against those in
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/FIFOEntryCache.java b/opendj3-server-dev/src/server/org/opends/server/extensions/FIFOEntryCache.java
index 7a4a1cc..7bf252c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/FIFOEntryCache.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/FIFOEntryCache.java
@@ -56,8 +56,8 @@
 import org.opends.server.types.SearchFilter;
 import org.opends.server.types.Attribute;
 import org.opends.server.util.ServerConstants;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import static org.opends.messages.ExtensionMessages.*;
@@ -168,22 +168,22 @@
 
     // Read configuration and apply changes.
     boolean applyChanges = true;
-    ArrayList<Message> errorMessages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>();
     EntryCacheCommon.ConfigErrorHandler errorHandler =
       EntryCacheCommon.getConfigErrorHandler (
           EntryCacheCommon.ConfigPhase.PHASE_INIT, null, errorMessages
           );
     if (!processEntryCacheConfig(configuration, applyChanges, errorHandler)) {
-      MessageBuilder buffer = new MessageBuilder();
+      LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
       if (!errorMessages.isEmpty()) {
-        Iterator<Message> iterator = errorMessages.iterator();
+        Iterator<LocalizableMessage> iterator = errorMessages.iterator();
         buffer.append(iterator.next());
         while (iterator.hasNext()) {
           buffer.append(".  ");
           buffer.append(iterator.next());
         }
       }
-      Message message = ERR_FIFOCACHE_CANNOT_INITIALIZE.get(buffer.toString());
+      LocalizableMessage message = ERR_FIFOCACHE_CANNOT_INITIALIZE.get(buffer.toString());
       throw new ConfigException(message);
     }
   }
@@ -907,7 +907,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(EntryCacheCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     FIFOEntryCacheCfg config = (FIFOEntryCacheCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -921,7 +921,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       FIFOEntryCacheCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     boolean applyChanges = false;
@@ -947,7 +947,7 @@
       )
   {
     boolean applyChanges = true;
-    ArrayList<Message> errorMessages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>();
     EntryCacheCommon.ConfigErrorHandler errorHandler =
       EntryCacheCommon.getConfigErrorHandler (
           EntryCacheCommon.ConfigPhase.PHASE_APPLY, null, errorMessages
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java
index 730fe12..3d251a3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/FileBasedKeyManagerProvider.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -124,7 +124,7 @@
     try {
       File f = getFileForPath(keyStoreFile);
       if (!(f.exists() && f.isFile())) {
-        Message message = ERR_FILE_KEYMANAGER_NO_SUCH_FILE.get(
+        LocalizableMessage message = ERR_FILE_KEYMANAGER_NO_SUCH_FILE.get(
             String.valueOf(keyStoreFile), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -134,7 +134,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE.get(
+      LocalizableMessage message = ERR_FILE_KEYMANAGER_CANNOT_DETERMINE_FILE.get(
           String.valueOf(configEntryDN), getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -151,7 +151,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, kse);
         }
 
-        Message message = ERR_FILE_KEYMANAGER_INVALID_TYPE.
+        LocalizableMessage message = ERR_FILE_KEYMANAGER_INVALID_TYPE.
             get(String.valueOf(configuration.getKeyStoreType()),
                 String.valueOf(configEntryDN), getExceptionMessage(kse));
         throw new InitializationException(message);
@@ -178,7 +178,7 @@
       String pinStr = System.getProperty(propertyName);
 
       if (pinStr == null) {
-        Message message = ERR_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
+        LocalizableMessage message = ERR_FILE_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
             String.valueOf(propertyName), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -190,7 +190,7 @@
       String pinStr = System.getenv(enVarName);
 
       if (pinStr == null) {
-        Message message = ERR_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
+        LocalizableMessage message = ERR_FILE_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
             String.valueOf(enVarName), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -201,7 +201,7 @@
       File pinFile = getFileForPath(fileName);
 
       if (!pinFile.exists()) {
-        Message message = ERR_FILE_KEYMANAGER_PIN_NO_SUCH_FILE.get(
+        LocalizableMessage message = ERR_FILE_KEYMANAGER_PIN_NO_SUCH_FILE.get(
             String.valueOf(fileName), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -213,14 +213,14 @@
         pinStr = br.readLine();
         br.close();
       } catch (IOException ioe) {
-        Message message = ERR_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ.
+        LocalizableMessage message = ERR_FILE_KEYMANAGER_PIN_FILE_CANNOT_READ.
             get(String.valueOf(fileName), String.valueOf(configEntryDN),
                 getExceptionMessage(ioe));
         throw new InitializationException(message, ioe);
       }
 
       if (pinStr == null) {
-        Message message = ERR_FILE_KEYMANAGER_PIN_FILE_EMPTY.get(
+        LocalizableMessage message = ERR_FILE_KEYMANAGER_PIN_FILE_EMPTY.get(
             String.valueOf(fileName), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -274,7 +274,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_FILE_KEYMANAGER_CANNOT_LOAD.get(
+      LocalizableMessage message = ERR_FILE_KEYMANAGER_CANNOT_LOAD.get(
           keyStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -296,7 +296,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_FILE_KEYMANAGER_CANNOT_CREATE_FACTORY.get(
+      LocalizableMessage message = ERR_FILE_KEYMANAGER_CANNOT_CREATE_FACTORY.get(
           keyStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -311,7 +311,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                         FileBasedKeyManagerProviderCfg configuration,
-                        List<Message> unacceptableReasons)
+                        List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(configuration, unacceptableReasons);
   }
@@ -323,7 +323,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       FileBasedKeyManagerProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -485,7 +485,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the path to the key store file.
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/FileBasedTrustManagerProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/FileBasedTrustManagerProvider.java
index 66b3cdd..6fa9eb8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/FileBasedTrustManagerProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/FileBasedTrustManagerProvider.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -127,7 +128,7 @@
     File f = getFileForPath(trustStoreFile);
     if (! (f.exists() && f.isFile()))
     {
-      Message message = ERR_FILE_TRUSTMANAGER_NO_SUCH_FILE.get(
+      LocalizableMessage message = ERR_FILE_TRUSTMANAGER_NO_SUCH_FILE.get(
           String.valueOf(trustStoreFile), String.valueOf(configEntryDN));
       throw new InitializationException(message);
     }
@@ -152,7 +153,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, kse);
       }
 
-      Message message = ERR_FILE_TRUSTMANAGER_INVALID_TYPE.
+      LocalizableMessage message = ERR_FILE_TRUSTMANAGER_INVALID_TYPE.
           get(String.valueOf(trustStoreType), String.valueOf(configEntryDN),
               getExceptionMessage(kse));
       throw new InitializationException(message);
@@ -193,7 +194,7 @@
           File pinFile = getFileForPath(pinFilePath);
           if (! pinFile.exists())
           {
-            Message message = ERR_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE.get(
+            LocalizableMessage message = ERR_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE.get(
                 String.valueOf(pinFilePath), String.valueOf(configEntryDN));
             throw new InitializationException(message);
           }
@@ -209,7 +210,7 @@
             }
             catch (IOException ioe)
             {
-              Message message = ERR_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ.
+              LocalizableMessage message = ERR_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ.
                   get(String.valueOf(pinFilePath),
                       String.valueOf(configEntryDN), getExceptionMessage(ioe));
               throw new InitializationException(message, ioe);
@@ -224,7 +225,7 @@
 
             if (pinStr == null)
             {
-              Message message = ERR_FILE_TRUSTMANAGER_PIN_FILE_EMPTY.get(
+              LocalizableMessage message = ERR_FILE_TRUSTMANAGER_PIN_FILE_EMPTY.get(
                   String.valueOf(pinFilePath), String.valueOf(configEntryDN));
               throw new InitializationException(message);
             }
@@ -240,7 +241,7 @@
         String pinStr = System.getenv(pinEnVar);
         if (pinStr == null)
         {
-          Message message = ERR_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET.get(
+          LocalizableMessage message = ERR_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET.get(
               String.valueOf(pinProperty), String.valueOf(configEntryDN));
           throw new InitializationException(message);
         }
@@ -255,7 +256,7 @@
       String pinStr = System.getProperty(pinProperty);
       if (pinStr == null)
       {
-        Message message = ERR_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET.get(
+        LocalizableMessage message = ERR_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET.get(
             String.valueOf(pinProperty), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -303,7 +304,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_FILE_TRUSTMANAGER_CANNOT_LOAD.get(
+      LocalizableMessage message = ERR_FILE_TRUSTMANAGER_CANNOT_LOAD.get(
           trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -332,7 +333,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_FILE_TRUSTMANAGER_CANNOT_CREATE_FACTORY.get(
+      LocalizableMessage message = ERR_FILE_TRUSTMANAGER_CANNOT_CREATE_FACTORY.get(
           trustStoreFile, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -347,7 +348,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                          TrustManagerProviderCfg configuration,
-                         List<Message> unacceptableReasons)
+                         List<LocalizableMessage> unacceptableReasons)
   {
     FileBasedTrustManagerProviderCfg config =
             (FileBasedTrustManagerProviderCfg) configuration;
@@ -361,7 +362,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       FileBasedTrustManagerProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -409,7 +410,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, kse);
         }
 
-        Message message = ERR_FILE_TRUSTMANAGER_INVALID_TYPE.get(
+        LocalizableMessage message = ERR_FILE_TRUSTMANAGER_INVALID_TYPE.get(
                 String.valueOf(storeType),
                 String.valueOf(cfgEntryDN),
                 getExceptionMessage(kse));
@@ -426,7 +427,7 @@
     {
       if (System.getProperty(pinProp) == null)
       {
-        Message message = ERR_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET.get(
+        LocalizableMessage message = ERR_FILE_TRUSTMANAGER_PIN_PROPERTY_NOT_SET.get(
                 String.valueOf(pinProp),
                 String.valueOf(cfgEntryDN));
         unacceptableReasons.add(message);
@@ -442,7 +443,7 @@
     {
       if (System.getenv(pinEnVar) == null)
       {
-        Message message = ERR_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET.get(
+        LocalizableMessage message = ERR_FILE_TRUSTMANAGER_PIN_ENVAR_NOT_SET.get(
                 String.valueOf(pinEnVar),
                 String.valueOf(cfgEntryDN));
         unacceptableReasons.add(message);
@@ -468,7 +469,7 @@
         }
         catch (IOException ioe)
         {
-          Message message = ERR_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ.get(
+          LocalizableMessage message = ERR_FILE_TRUSTMANAGER_PIN_FILE_CANNOT_READ.get(
                   String.valueOf(pinFile),
                   String.valueOf(cfgEntryDN),
                   getExceptionMessage(ioe));
@@ -485,7 +486,7 @@
 
         if (pinStr == null)
         {
-          Message message =  ERR_FILE_TRUSTMANAGER_PIN_FILE_EMPTY.get(
+          LocalizableMessage message =  ERR_FILE_TRUSTMANAGER_PIN_FILE_EMPTY.get(
                   String.valueOf(pinFile),
                   String.valueOf(cfgEntryDN));
           unacceptableReasons.add(message);
@@ -494,7 +495,7 @@
       }
       else
       {
-        Message message = ERR_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE.get(
+        LocalizableMessage message = ERR_FILE_TRUSTMANAGER_PIN_NO_SUCH_FILE.get(
                 String.valueOf(pinFile),
                 String.valueOf(cfgEntryDN));
         unacceptableReasons.add(message);
@@ -514,7 +515,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the path to the trust store file.
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 f79625e..d94456d 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
@@ -56,8 +56,8 @@
 import com.sleepycat.je.StatsConfig;
 import com.sleepycat.je.config.ConfigParam;
 import com.sleepycat.je.config.EnvironmentParams;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.Backend;
 import org.opends.server.api.EntryCache;
 import org.opends.server.admin.std.server.EntryCacheCfg;
@@ -220,22 +220,22 @@
 
     // Read and apply configuration.
     boolean applyChanges = true;
-    ArrayList<Message> errorMessages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>();
     EntryCacheCommon.ConfigErrorHandler errorHandler =
       EntryCacheCommon.getConfigErrorHandler (
           EntryCacheCommon.ConfigPhase.PHASE_INIT, null, errorMessages
           );
     if (!processEntryCacheConfig(configuration, applyChanges, errorHandler)) {
-      MessageBuilder buffer = new MessageBuilder();
+      LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
       if (!errorMessages.isEmpty()) {
-        Iterator<Message> iterator = errorMessages.iterator();
+        Iterator<LocalizableMessage> iterator = errorMessages.iterator();
         buffer.append(iterator.next());
         while (iterator.hasNext()) {
           buffer.append(".  ");
           buffer.append(iterator.next());
         }
       }
-      Message message = ERR_FSCACHE_CANNOT_INITIALIZE.get(buffer.toString());
+      LocalizableMessage message = ERR_FSCACHE_CANNOT_INITIALIZE.get(buffer.toString());
       throw new ConfigException(message);
     }
 
@@ -273,7 +273,7 @@
 
       // Not having any home directory for the cache db environment is a
       // fatal error as we are unable to continue any further without it.
-      Message message =
+      LocalizableMessage message =
           ERR_FSCACHE_HOMELESS.get();
       throw new InitializationException(message, e);
     }
@@ -334,7 +334,7 @@
               INDEXKEY.getBytes("UTF-8"));
 
           // Persistent state report.
-          Message message = NOTE_FSCACHE_RESTORE.get();
+          LocalizableMessage message = NOTE_FSCACHE_RESTORE.get();
           logError(message);
 
           if (OperationStatus.SUCCESS ==
@@ -422,7 +422,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_FSCACHE_CANNOT_INITIALIZE.get(
           (e.getCause() != null ? e.getCause().getMessage() :
             stackTraceToSingleLineString(e)));
@@ -457,7 +457,7 @@
           DatabaseEntry indexData = new DatabaseEntry();
 
           // Persistent state save report.
-          Message message = NOTE_FSCACHE_SAVE.get();
+          LocalizableMessage message = NOTE_FSCACHE_SAVE.get();
           logError(message);
           //This line causes an unchecked call error if the SuppressWarnings
           //annotation is removed at the beginning of this method.
@@ -478,7 +478,7 @@
         }
 
         // Persistent state save report.
-        Message message = NOTE_FSCACHE_SAVE_REPORT.get(
+        LocalizableMessage message = NOTE_FSCACHE_SAVE_REPORT.get(
           entryCacheIndex.dnMap.size());
         logError(message);
       }
@@ -943,7 +943,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(EntryCacheCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     FileSystemEntryCacheCfg config = (FileSystemEntryCacheCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -955,7 +955,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       FileSystemEntryCacheCfg configuration,
-      List<Message> unacceptableReasons
+      List<LocalizableMessage> unacceptableReasons
       )
   {
     boolean applyChanges = false;
@@ -979,7 +979,7 @@
       )
   {
     boolean applyChanges = true;
-    ArrayList<Message> errorMessages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>();
     EntryCacheCommon.ConfigErrorHandler errorHandler =
       EntryCacheCommon.getConfigErrorHandler (
           EntryCacheCommon.ConfigPhase.PHASE_APPLY, null, errorMessages
@@ -1161,7 +1161,7 @@
                 String oldValue = oldEnvConfig.getConfigParam(param.getName());
                 String newValue = jePropertyValue;
                 if (!oldValue.equalsIgnoreCase(newValue)) {
-                  Message message =
+                  LocalizableMessage message =
                     INFO_CONFIG_JE_PROPERTY_REQUIRES_RESTART.get(
                     jePropertyName);
                   errorHandler.reportError(message, true, ResultCode.SUCCESS,
@@ -1185,7 +1185,7 @@
           false, DirectoryServer.getServerErrorResultCode());
       } catch (Exception e) {
         errorHandler.reportError(
-          Message.raw(stackTraceToSingleLineString(e)),
+          LocalizableMessage.raw(stackTraceToSingleLineString(e)),
           false, DirectoryServer.getServerErrorResultCode());
       }
       break;
@@ -1478,7 +1478,7 @@
           }
         } catch(Exception e) {
           // Log a warning that the permissions were not set.
-          Message message = WARN_FSCACHE_SET_PERMISSIONS_FAILED.get(cacheHome);
+          LocalizableMessage message = WARN_FSCACHE_SET_PERMISSIONS_FAILED.get(cacheHome);
           logError(message);
         }
       }
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 a739404..6e698dd 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
@@ -26,7 +26,7 @@
  */
 package org.opends.server.extensions;
 import org.forgerock.opendj.ldap.ByteString;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -166,7 +166,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        Message message = ERR_STATICMEMBERS_CANNOT_DECODE_DN.
+        LocalizableMessage message = ERR_STATICMEMBERS_CANNOT_DECODE_DN.
             get(String.valueOf(nextDN), String.valueOf(groupDN),
                 String.valueOf(de.getMessageObject()));
         nextMembershipException =
@@ -218,7 +218,7 @@
         Entry memberEntry = DirectoryConfig.getEntry(nextDN);
         if (memberEntry == null)
         {
-          Message message = ERR_STATICMEMBERS_NO_SUCH_ENTRY.get(
+          LocalizableMessage message = ERR_STATICMEMBERS_NO_SUCH_ENTRY.get(
               String.valueOf(nextDN), String.valueOf(groupDN));
           nextMembershipException =
                new MembershipException(message, true);
@@ -250,7 +250,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        Message message = ERR_STATICMEMBERS_CANNOT_GET_ENTRY.
+        LocalizableMessage message = ERR_STATICMEMBERS_CANNOT_GET_ENTRY.
             get(String.valueOf(nextDN), String.valueOf(groupDN),
                 String.valueOf(de.getMessageObject()));
         nextMembershipException =
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/FingerprintCertificateMapper.java b/opendj3-server-dev/src/server/org/opends/server/extensions/FingerprintCertificateMapper.java
index 3a67521..a9dbe66 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/FingerprintCertificateMapper.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/FingerprintCertificateMapper.java
@@ -34,7 +34,7 @@
 import java.util.*;
 import javax.security.auth.x500.X500Principal;
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.CertificateMapperCfg;
 import org.opends.server.admin.std.server.FingerprintCertificateMapperCfg;
@@ -137,7 +137,7 @@
       Backend b = DirectoryServer.getBackend(baseDN);
       if ((b != null) && (! b.isIndexed(t, IndexType.EQUALITY)))
       {
-        Message message = WARN_SATUACM_ATTR_UNINDEXED.get(
+        LocalizableMessage message = WARN_SATUACM_ATTR_UNINDEXED.get(
             configuration.dn().toString(),
             t.getNameOrOID(), b.getBackendID());
         ErrorLogger.logError(message);
@@ -178,7 +178,7 @@
     // Make sure that a peer certificate was provided.
     if ((certificateChain == null) || (certificateChain.length == 0))
     {
-      Message message = ERR_FCM_NO_PEER_CERTIFICATE.get();
+      LocalizableMessage message = ERR_FCM_NO_PEER_CERTIFICATE.get();
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
@@ -196,7 +196,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_FCM_PEER_CERT_NOT_X509.get(
+      LocalizableMessage message = ERR_FCM_PEER_CERT_NOT_X509.get(
           String.valueOf(certificateChain[0].getType()));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
@@ -221,7 +221,7 @@
       String peerSubject = peerCertificate.getSubjectX500Principal().getName(
                                 X500Principal.RFC2253);
 
-      Message message = ERR_FCM_CANNOT_CALCULATE_FINGERPRINT.get(
+      LocalizableMessage message = ERR_FCM_CANNOT_CALCULATE_FINGERPRINT.get(
           peerSubject, getExceptionMessage(e));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
@@ -268,7 +268,7 @@
 
         case SIZE_LIMIT_EXCEEDED:
           // Multiple entries matched the filter.  This is not acceptable.
-          Message message = ERR_FCM_MULTIPLE_SEARCH_MATCHING_ENTRIES.get(
+          LocalizableMessage message = ERR_FCM_MULTIPLE_SEARCH_MATCHING_ENTRIES.get(
                         fingerprintString);
           throw new DirectoryException(
                   ResultCode.INVALID_CREDENTIALS, message);
@@ -300,7 +300,7 @@
         }
         else
         {
-          Message message = ERR_FCM_MULTIPLE_MATCHING_ENTRIES.
+          LocalizableMessage message = ERR_FCM_MULTIPLE_MATCHING_ENTRIES.
               get(fingerprintString, String.valueOf(userEntry.getName()),
                   String.valueOf(entry.getName()));
           throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
@@ -321,7 +321,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(CertificateMapperCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     FingerprintCertificateMapperCfg config =
          (FingerprintCertificateMapperCfg) configuration;
@@ -336,7 +336,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       FingerprintCertificateMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -354,7 +354,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the algorithm that will be used to generate the fingerprint.
@@ -390,7 +390,7 @@
       Backend b = DirectoryServer.getBackend(baseDN);
       if ((b != null) && (! b.isIndexed(t, IndexType.EQUALITY)))
       {
-        Message message = WARN_SATUACM_ATTR_UNINDEXED.get(
+        LocalizableMessage message = WARN_SATUACM_ATTR_UNINDEXED.get(
             configuration.dn().toString(),
             t.getNameOrOID(), b.getBackendID());
         messages.add(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/GSSAPISASLMechanismHandler.java b/opendj3-server-dev/src/server/org/opends/server/extensions/GSSAPISASLMechanismHandler.java
index 598ff5a..a3d4d56 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/GSSAPISASLMechanismHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/GSSAPISASLMechanismHandler.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;
 
@@ -54,8 +54,8 @@
 import javax.security.sasl.SaslException;
 
 import org.ietf.jgss.GSSException;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.
   GSSAPISASLMechanismHandlerCfgDefn.QualityOfProtection;
@@ -135,7 +135,7 @@
       DirectoryServer.registerSASLMechanismHandler(SASL_MECHANISM_GSSAPI, this);
       configuration.addGSSAPIChangeListener(this);
       this.configuration = configuration;
-      Message msg = INFO_GSSAPI_STARTED.get();
+      LocalizableMessage msg = INFO_GSSAPI_STARTED.get();
       logError(msg);
     }
     catch (UnknownHostException unhe)
@@ -144,7 +144,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, unhe);
       }
-      Message message = ERR_SASL_CANNOT_GET_SERVER_FQDN.get(String
+      LocalizableMessage message = ERR_SASL_CANNOT_GET_SERVER_FQDN.get(String
           .valueOf(configEntryDN), getExceptionMessage(unhe));
       throw new InitializationException(message, unhe);
     }
@@ -154,7 +154,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
       }
-      Message message = ERR_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG
+      LocalizableMessage message = ERR_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG
           .get(getExceptionMessage(ioe));
       throw new InitializationException(message, ioe);
     }
@@ -181,7 +181,7 @@
     if ((kdcAddress != null && realm == null)
         || (kdcAddress == null && realm != null))
     {
-      Message message = ERR_SASLGSSAPI_KDC_REALM_NOT_DEFINED.get();
+      LocalizableMessage message = ERR_SASLGSSAPI_KDC_REALM_NOT_DEFINED.get();
       throw new InitializationException(message);
     }
     else if (kdcAddress != null)
@@ -319,7 +319,7 @@
     }
     File keyTabFile = new File(keyTabFilePath);
     if(!keyTabFile.exists()) {
-      Message msg = ERR_SASL_GSSAPI_KEYTAB_INVALID.get(keyTabFilePath);
+      LocalizableMessage msg = ERR_SASL_GSSAPI_KEYTAB_INVALID.get(keyTabFilePath);
       throw new InitializationException(msg);
     }
     w.write("keyTab=\"" + keyTabFile + "\" ");
@@ -339,7 +339,7 @@
       principal.append("@").append(realm);
     }
     w.write(principal.toString());
-    Message msg = INFO_GSSAPI_PRINCIPAL_NAME.get(principal.toString());
+    LocalizableMessage msg = INFO_GSSAPI_PRINCIPAL_NAME.get(principal.toString());
     logError(msg);
     w.write("\" isInitiator=false;");
     w.newLine();
@@ -364,7 +364,7 @@
     }
     DirectoryServer.deregisterSASLMechanismHandler(SASL_MECHANISM_GSSAPI);
     clearProperties();
-    Message msg = INFO_GSSAPI_STOPPED.get();
+    LocalizableMessage msg = INFO_GSSAPI_STOPPED.get();
     logError(msg);
   }
 
@@ -385,7 +385,7 @@
     ClientConnection connection = bindOp.getClientConnection();
     if (connection == null)
     {
-      Message message = ERR_SASLGSSAPI_NO_CLIENT_CONNECTION.get();
+      LocalizableMessage message = ERR_SASLGSSAPI_NO_CLIENT_CONNECTION.get();
       bindOp.setAuthFailureReason(message);
       bindOp.setResultCode(ResultCode.INVALID_CREDENTIALS);
       return;
@@ -398,7 +398,7 @@
       } catch (SaslException ex) {
         if (debugEnabled())
           TRACER.debugCaught(DebugLogLevel.ERROR, ex);
-        Message msg;
+        LocalizableMessage msg;
         GSSException gex = (GSSException) ex.getCause();
         if(gex != null) {
           msg = ERR_SASL_CONTEXT_CREATE_ERROR.get(SASL_MECHANISM_GSSAPI,
@@ -421,7 +421,7 @@
     {
       if (debugEnabled())
         TRACER.debugCaught(DebugLogLevel.ERROR, ex);
-      Message message = ERR_SASLGSSAPI_CANNOT_CREATE_LOGIN_CONTEXT
+      LocalizableMessage message = ERR_SASLGSSAPI_CANNOT_CREATE_LOGIN_CONTEXT
             .get(getExceptionMessage(ex));
       // Log a configuration error.
       logError(message);
@@ -442,8 +442,8 @@
    * @return The message containing the major and (optional) minor codes and
    *         strings.
    */
-  public static Message getGSSExceptionMessage(GSSException gex) {
-    MessageBuilder message = new MessageBuilder();
+  public static LocalizableMessage getGSSExceptionMessage(GSSException gex) {
+    LocalizableMessageBuilder message = new LocalizableMessageBuilder();
     message.append("major code (").append(gex.getMajor()).append(") ")
         .append(gex.getMajorString());
     if(gex.getMinor() != 0)
@@ -481,7 +481,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(
-      SASLMechanismHandlerCfg configuration, List<Message> unacceptableReasons)
+      SASLMechanismHandlerCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     GSSAPISASLMechanismHandlerCfg newConfig =
       (GSSAPISASLMechanismHandlerCfg) configuration;
@@ -495,7 +495,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       GSSAPISASLMechanismHandlerCfg newConfiguration,
-      List<Message> unacceptableReasons) {
+      List<LocalizableMessage> unacceptableReasons) {
     boolean isAcceptable = true;
 
     try
@@ -506,7 +506,7 @@
     {
       if (debugEnabled())
         TRACER.debugCaught(DebugLogLevel.ERROR, ex);
-      Message message = ERR_SASL_CANNOT_GET_SERVER_FQDN.get(String
+      LocalizableMessage message = ERR_SASL_CANNOT_GET_SERVER_FQDN.get(String
           .valueOf(configEntryDN), getExceptionMessage(ex));
       unacceptableReasons.add(message);
       isAcceptable = false;
@@ -520,7 +520,7 @@
     }
     File keyTabFile = new File(keyTabFilePath);
     if(!keyTabFile.exists()) {
-      Message message = ERR_SASL_GSSAPI_KEYTAB_INVALID.get(keyTabFilePath);
+      LocalizableMessage message = ERR_SASL_GSSAPI_KEYTAB_INVALID.get(keyTabFilePath);
       unacceptableReasons.add(message);
       if (debugEnabled())
         TRACER.debugError(message.toString());
@@ -532,7 +532,7 @@
     if ((kdcAddress != null && realm == null)
         || (kdcAddress == null && realm != null))
     {
-      Message message = ERR_SASLGSSAPI_KDC_REALM_NOT_DEFINED.get();
+      LocalizableMessage message = ERR_SASLGSSAPI_KDC_REALM_NOT_DEFINED.get();
       unacceptableReasons.add(message);
       if (debugEnabled())
         TRACER.debugError(message.toString());
@@ -549,7 +549,7 @@
    */
   public ConfigChangeResult applyConfigurationChange(
       GSSAPISASLMechanismHandlerCfg newConfiguration) {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
     try
@@ -562,14 +562,14 @@
     catch (InitializationException ex) {
       if (debugEnabled())
         TRACER.debugCaught(DebugLogLevel.ERROR, ex);
-      Message message = ex.getMessageObject();
+      LocalizableMessage message = ex.getMessageObject();
       messages.add(message);
       clearProperties();
       resultCode = ResultCode.OTHER;
     } catch (UnknownHostException ex) {
       if (debugEnabled())
         TRACER.debugCaught(DebugLogLevel.ERROR, ex);
-        Message message = ERR_SASL_CANNOT_GET_SERVER_FQDN.get(String
+        LocalizableMessage message = ERR_SASL_CANNOT_GET_SERVER_FQDN.get(String
           .valueOf(configEntryDN), getExceptionMessage(ex));
       messages.add(message);
       clearProperties();
@@ -577,7 +577,7 @@
     } catch (IOException ex) {
       if (debugEnabled())
         TRACER.debugCaught(DebugLogLevel.ERROR, ex);
-      Message message = ERR_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG
+      LocalizableMessage message = ERR_SASLGSSAPI_CANNOT_CREATE_JAAS_CONFIG
         .get(getExceptionMessage(ex));
       messages.add(message);
       clearProperties();
@@ -605,7 +605,7 @@
     DN identityMapperDN = config.getIdentityMapperDN();
     identityMapper = DirectoryServer.getIdentityMapper(identityMapperDN);
     serverFQDN = getFQDN(config);
-    Message msg = INFO_GSSAPI_SERVER_FQDN.get(serverFQDN);
+    LocalizableMessage msg = INFO_GSSAPI_SERVER_FQDN.get(serverFQDN);
     logError(msg);
     saslProps = new HashMap<String, String>();
     saslProps.put(Sasl.QOP, getQOP(config));
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 ad9da8a..f4ab6c9 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
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.
         GoverningStructureRuleVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -149,7 +149,7 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    Message message = ERR_VATTR_NOT_SEARCHABLE.get(
+    LocalizableMessage message = ERR_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/HasSubordinatesVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/HasSubordinatesVirtualAttributeProvider.java
index 0009bb3..d447b47 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/HasSubordinatesVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/HasSubordinatesVirtualAttributeProvider.java
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.HasSubordinatesVirtualAttributeCfg;
 import org.opends.server.api.Backend;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -207,7 +207,7 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    Message message = ERR_HASSUBORDINATES_VATTR_NOT_SEARCHABLE.get(
+    LocalizableMessage message = ERR_HASSUBORDINATES_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/JMXAlertHandler.java b/opendj3-server-dev/src/server/org/opends/server/extensions/JMXAlertHandler.java
index 06a8e88..2d7f7a7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/JMXAlertHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/JMXAlertHandler.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -160,7 +161,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_JMX_ALERT_HANDLER_CANNOT_REGISTER.get(String.valueOf(e));
         throw new InitializationException(message, e);
       }
@@ -189,7 +190,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAcceptable(AlertHandlerCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     JMXAlertHandlerCfg cfg = (JMXAlertHandlerCfg) configuration;
     return isConfigurationChangeAcceptable(cfg, unacceptableReasons);
@@ -223,7 +224,7 @@
    * {@inheritDoc}
    */
   public void sendAlertNotification(AlertGenerator generator, String alertType,
-                                    Message alertMessage)
+                                    LocalizableMessage alertMessage)
   {
     sendNotification(new Notification(alertType, generator.getClassName(),
                                       sequenceNumber.getAndIncrement(),
@@ -276,7 +277,7 @@
          throws AttributeNotFoundException
   {
     // There are no attributes for this MBean.
-    Message message = ERR_CONFIG_JMX_ATTR_NO_ATTR.get(
+    LocalizableMessage message = ERR_CONFIG_JMX_ATTR_NO_ATTR.get(
         String.valueOf(configEntryDN), attribute);
     throw new AttributeNotFoundException(message.toString());
   }
@@ -299,7 +300,7 @@
          throws AttributeNotFoundException, InvalidAttributeValueException
   {
     // There are no attributes for this MBean.
-    Message message = ERR_CONFIG_JMX_ATTR_NO_ATTR.get(
+    LocalizableMessage message = ERR_CONFIG_JMX_ATTR_NO_ATTR.get(
         String.valueOf(configEntryDN), String.valueOf(attribute));
     throw new AttributeNotFoundException(message.toString());
   }
@@ -376,7 +377,7 @@
 
     buffer.append(")");
 
-    Message message = ERR_CONFIG_JMX_NO_METHOD.get(
+    LocalizableMessage message = ERR_CONFIG_JMX_NO_METHOD.get(
         buffer.toString(), String.valueOf(configEntryDN));
     throw new MBeanException(new ConfigException(message));
   }
@@ -404,7 +405,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       JMXAlertHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
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 119cd8a..efc287e 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
@@ -37,7 +37,7 @@
 
 import javax.net.ssl.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.
   LDAPPassThroughAuthenticationPolicyCfgDefn.MappingPolicy;
@@ -2136,7 +2136,7 @@
     @Override
     public boolean isConfigurationChangeAcceptable(
         final LDAPPassThroughAuthenticationPolicyCfg cfg,
-        final List<Message> unacceptableReasons)
+        final List<LocalizableMessage> unacceptableReasons)
     {
       return LDAPPassThroughAuthenticationPolicyFactory.this
           .isConfigurationAcceptable(cfg, unacceptableReasons);
@@ -2184,7 +2184,7 @@
           && !cfg.getMappedSearchBindDN().isRootDN())
       {
         mappedSearchPassword = getMappedSearchBindPassword(cfg,
-            new LinkedList<Message>());
+            new LinkedList<LocalizableMessage>());
       }
       else
       {
@@ -2391,7 +2391,7 @@
   // In any case, the password must be in the clear.
   private static String getMappedSearchBindPassword(
       final LDAPPassThroughAuthenticationPolicyCfg cfg,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     String password = null;
 
@@ -2474,7 +2474,7 @@
 
   private static boolean isServerAddressValid(
       final LDAPPassThroughAuthenticationPolicyCfg configuration,
-      final List<Message> unacceptableReasons, final String hostPort)
+      final List<LocalizableMessage> unacceptableReasons, final String hostPort)
   {
     try
     {
@@ -2486,7 +2486,7 @@
     {
       if (unacceptableReasons != null)
       {
-        final Message msg = ERR_LDAP_PTA_INVALID_PORT_NUMBER.get(
+        final LocalizableMessage msg = ERR_LDAP_PTA_INVALID_PORT_NUMBER.get(
             String.valueOf(configuration.dn()), hostPort);
         unacceptableReasons.add(msg);
       }
@@ -2567,7 +2567,7 @@
   @Override
   public boolean isConfigurationAcceptable(
       final LDAPPassThroughAuthenticationPolicyCfg cfg,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     // Check that the port numbers are valid. We won't actually try and connect
     // to the server since they may not be available (hence we have fail-over
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java b/opendj3-server-dev/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java
index e700356..7cf3d81 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/LengthBasedPasswordValidator.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -40,7 +40,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -87,7 +87,7 @@
     int minLength = configuration.getMinPasswordLength();
     if ((maxLength > 0) && (minLength > 0) && (minLength > maxLength))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX.get(minLength, maxLength);
       throw new ConfigException(message);
     }
@@ -113,7 +113,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      MessageBuilder invalidReason)
+                                      LocalizableMessageBuilder invalidReason)
   {
     LengthBasedPasswordValidatorCfg config = currentConfig;
 
@@ -143,7 +143,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PasswordValidatorCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     LengthBasedPasswordValidatorCfg config =
          (LengthBasedPasswordValidatorCfg) configuration;
@@ -157,7 +157,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       LengthBasedPasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // Make sure that if both the maximum and minimum lengths are set, the
     // maximum length is greater than or equal to the minimum length.
@@ -165,7 +165,7 @@
     int minLength = configuration.getMinPasswordLength();
     if ((maxLength > 0) && (minLength > 0) && (minLength > maxLength))
     {
-      Message message = ERR_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX.get(
+      LocalizableMessage message = ERR_PWLENGTHVALIDATOR_MIN_GREATER_THAN_MAX.get(
               minLength, maxLength);
       unacceptableReasons.add(message);
       return false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/MD5PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/MD5PasswordStorageScheme.java
index 1d5fa9d..a87217c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/MD5PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/MD5PasswordStorageScheme.java
@@ -31,7 +31,7 @@
 import java.security.MessageDigest;
 import java.util.Arrays;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.MD5PasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -115,7 +115,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
           MESSAGE_DIGEST_ALGORITHM_MD5, String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -161,7 +161,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -208,7 +208,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -306,7 +306,7 @@
   public ByteString encodeAuthPassword(ByteSequence plaintext)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -344,7 +344,7 @@
   public ByteString getPlaintextValue(ByteSequence storedPassword)
          throws DirectoryException
   {
-    Message message = ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_MD5);
+    LocalizableMessage message = ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_MD5);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
 
@@ -358,7 +358,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java
index f45d603..59f7344 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/MemberVirtualAttributeProvider.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -363,7 +363,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       MemberVirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // The new configuration should always be acceptable.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationMessageNotificationMessageTemplateElement.java b/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationMessageNotificationMessageTemplateElement.java
index c49ebee..41e699b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationMessageNotificationMessageTemplateElement.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationMessageNotificationMessageTemplateElement.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
 
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.AccountStatusNotification;
 
 
@@ -52,7 +53,7 @@
   /**
    * {@inheritDoc}
    */
-  public void generateValue(MessageBuilder buffer,
+  public void generateValue(LocalizableMessageBuilder buffer,
                             AccountStatusNotification notification)
   {
     buffer.append(notification.getMessage());
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationMessageTemplateElement.java b/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationMessageTemplateElement.java
index c07cae1..9812fce 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationMessageTemplateElement.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationMessageTemplateElement.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
 
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.AccountStatusNotification;
 
 
@@ -47,7 +48,7 @@
    *                       appended.
    * @param  notification  The account status notification to process.
    */
-  public abstract void generateValue(MessageBuilder buffer,
+  public abstract void generateValue(LocalizableMessageBuilder buffer,
                                      AccountStatusNotification notification);
 }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationPropertyNotificationMessageTemplateElement.java b/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationPropertyNotificationMessageTemplateElement.java
index bc6449f..90f7750 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationPropertyNotificationMessageTemplateElement.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationPropertyNotificationMessageTemplateElement.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -29,7 +30,7 @@
 
 import java.util.List;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.AccountStatusNotification;
 import org.opends.server.types.AccountStatusNotificationProperty;
 
@@ -63,7 +64,7 @@
   /**
    * {@inheritDoc}
    */
-  public void generateValue(MessageBuilder buffer,
+  public void generateValue(LocalizableMessageBuilder buffer,
                             AccountStatusNotification notification)
   {
     List<String> propertyValues =
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationTypeNotificationMessageTemplateElement.java b/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationTypeNotificationMessageTemplateElement.java
index 74b7be5..583cfe8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationTypeNotificationMessageTemplateElement.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/NotificationTypeNotificationMessageTemplateElement.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
 
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.AccountStatusNotification;
 
 
@@ -52,7 +53,7 @@
   /**
    * {@inheritDoc}
    */
-  public void generateValue(MessageBuilder buffer,
+  public void generateValue(LocalizableMessageBuilder buffer,
                             AccountStatusNotification notification)
   {
     buffer.append(notification.getNotificationType().getName());
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProvider.java
index c4ddf3a..cb3df37 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/NumSubordinatesVirtualAttributeProvider.java
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.NumSubordinatesVirtualAttributeCfg;
 import org.opends.server.api.Backend;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -185,7 +185,7 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    Message message = ERR_NUMSUBORDINATES_VATTR_NOT_SEARCHABLE.get(
+    LocalizableMessage message = ERR_NUMSUBORDINATES_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/PBKDF2PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/PBKDF2PasswordStorageScheme.java
index bfe205f..3d2343b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/PBKDF2PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/PBKDF2PasswordStorageScheme.java
@@ -34,7 +34,7 @@
 import javax.crypto.SecretKeyFactory;
 import javax.crypto.spec.PBEKeySpec;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.PBKDF2PasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
@@ -140,7 +140,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PBKDF2PasswordStorageSchemeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // The configuration will always be acceptable.
     return true;
@@ -201,7 +201,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -279,7 +279,7 @@
       saltLength = decodedBytes.length - SHA1_LENGTH;
       if (saltLength <= 0)
       {
-        Message message =
+        LocalizableMessage message =
           ERR_PWSCHEME_INVALID_BASE64_DECODED_STORED_PASSWORD.get(
           storedPassword.toString());
         ErrorLogger.logError(message);
@@ -297,7 +297,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
           storedPassword.toString(), String.valueOf(e));
       ErrorLogger.logError(message);
       return false;
@@ -399,7 +399,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -519,7 +519,7 @@
   public ByteString getPlaintextValue(ByteSequence storedPassword)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_PBKDF2);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -534,7 +534,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(AUTH_PASSWORD_SCHEME_NAME_PBKDF2);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -593,7 +593,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
           CLASS_NAME, getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/PKCS11KeyManagerProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/PKCS11KeyManagerProvider.java
index 64d85bf..1cea765 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/PKCS11KeyManagerProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/PKCS11KeyManagerProvider.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -136,7 +136,7 @@
       String pinStr = System.getProperty(propertyName);
 
       if (pinStr == null) {
-        Message message = ERR_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
+        LocalizableMessage message = ERR_PKCS11_KEYMANAGER_PIN_PROPERTY_NOT_SET.get(
             String.valueOf(propertyName), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -148,7 +148,7 @@
       String pinStr = System.getenv(enVarName);
 
       if (pinStr == null) {
-        Message message = ERR_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
+        LocalizableMessage message = ERR_PKCS11_KEYMANAGER_PIN_ENVAR_NOT_SET.get(
             String.valueOf(enVarName), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -159,7 +159,7 @@
       File pinFile = getFileForPath(fileName);
 
       if (!pinFile.exists()) {
-        Message message = ERR_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE.get(
+        LocalizableMessage message = ERR_PKCS11_KEYMANAGER_PIN_NO_SUCH_FILE.get(
             String.valueOf(fileName), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -176,14 +176,14 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ioe);
         }
 
-        Message message = ERR_PKCS11_KEYMANAGER_PIN_FILE_CANNOT_READ.
+        LocalizableMessage message = ERR_PKCS11_KEYMANAGER_PIN_FILE_CANNOT_READ.
             get(String.valueOf(fileName), String.valueOf(configEntryDN),
                 getExceptionMessage(ioe));
         throw new InitializationException(message, ioe);
       }
 
       if (pinStr == null) {
-        Message message = ERR_PKCS11_KEYMANAGER_PIN_FILE_EMPTY.get(
+        LocalizableMessage message = ERR_PKCS11_KEYMANAGER_PIN_FILE_EMPTY.get(
             String.valueOf(fileName), String.valueOf(configEntryDN));
         throw new InitializationException(message);
       }
@@ -233,7 +233,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_PKCS11_KEYMANAGER_CANNOT_LOAD.get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -255,7 +255,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PKCS11_KEYMANAGER_CANNOT_CREATE_FACTORY.get(
+      LocalizableMessage message = ERR_PKCS11_KEYMANAGER_CANNOT_CREATE_FACTORY.get(
           getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message, e);
@@ -270,7 +270,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                         PKCS11KeyManagerProviderCfg configuration,
-                          List<Message> unacceptableReasons)
+                          List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(configuration, unacceptableReasons);
   }
@@ -282,7 +282,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PKCS11KeyManagerProviderCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -401,7 +401,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the PIN needed to access the contents of the keystore file.
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/ParallelWorkQueue.java b/opendj3-server-dev/src/server/org/opends/server/extensions/ParallelWorkQueue.java
index 62c48d6..6f64cb0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/ParallelWorkQueue.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/ParallelWorkQueue.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;
 
@@ -40,7 +40,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.ParallelWorkQueueCfg;
 import org.opends.server.api.WorkQueue;
@@ -179,7 +179,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR.get(
+      LocalizableMessage message = ERR_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR.get(
           String.valueOf(ParallelWorkQueueMonitor.class), String.valueOf(e));
       logError(message);
     }
@@ -191,7 +191,7 @@
    * {@inheritDoc}
    */
   @Override()
-  public void finalizeWorkQueue(Message reason)
+  public void finalizeWorkQueue(LocalizableMessage reason)
   {
     shutdownRequested = true;
 
@@ -276,7 +276,7 @@
   {
     if (shutdownRequested)
     {
-      Message message = WARN_OP_REJECTED_BY_SHUTDOWN.get();
+      LocalizableMessage message = WARN_OP_REJECTED_BY_SHUTDOWN.get();
       throw new DirectoryException(ResultCode.UNAVAILABLE, message);
     }
 
@@ -374,7 +374,7 @@
     {
       if (numFailures > MAX_RETRY_COUNT)
       {
-        Message message = ERR_CONFIG_WORK_QUEUE_TOO_MANY_FAILURES.get(
+        LocalizableMessage message = ERR_CONFIG_WORK_QUEUE_TOO_MANY_FAILURES.get(
             Thread.currentThread().getName(), numFailures, MAX_RETRY_COUNT);
         logError(message);
       }
@@ -508,7 +508,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       ParallelWorkQueueCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -522,7 +522,7 @@
   public ConfigChangeResult applyConfigurationChange(
                                  ParallelWorkQueueCfg configuration)
   {
-    ArrayList<Message> resultMessages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> resultMessages = new ArrayList<LocalizableMessage>();
     int newNumThreads =
         computeNumWorkerThreads(configuration.getNumWorkerThreads());
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/ParallelWorkerThread.java b/opendj3-server-dev/src/server/org/opends/server/extensions/ParallelWorkerThread.java
index 72faf89..8192d1e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/ParallelWorkerThread.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/ParallelWorkerThread.java
@@ -22,14 +22,14 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.extensions;
 
 
 import java.util.Map;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -180,7 +180,7 @@
 
         try
         {
-          Message message = ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION.
+          LocalizableMessage message = ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION.
               get(getName(), String.valueOf(operation),
                   stackTraceToSingleLineString(t));
           logError(message);
@@ -204,7 +204,7 @@
 
         try
         {
-          Message message = ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION.get(getName(),
+          LocalizableMessage message = ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION.get(getName(),
                                       String.valueOf(operation),
                                       stackTraceToSingleLineString(t));
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordExpirationTimeVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordExpirationTimeVirtualAttributeProvider.java
index 33b45ef..de5d1ea 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordExpirationTimeVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordExpirationTimeVirtualAttributeProvider.java
@@ -29,7 +29,7 @@
 import java.util.Collections;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import
   org.opends.server.admin.std.server.PasswordExpirationTimeVirtualAttributeCfg;
 import org.opends.server.api.AuthenticationPolicy;
@@ -112,7 +112,7 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    Message message =
+    LocalizableMessage message =
             ERR_PWDEXPTIME_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
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 f6f8190..27e621d 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
@@ -30,8 +30,8 @@
 import java.util.*;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.ExtendedOperationHandlerCfg;
 import org.opends.server.admin.std.server.
@@ -163,7 +163,7 @@
       identityMapper = DirectoryServer.getIdentityMapper(identityMapperDN);
       if (identityMapper == null)
       {
-        Message message = ERR_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER.get(
+        LocalizableMessage message = ERR_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER.get(
             String.valueOf(identityMapperDN), String.valueOf(config.dn()));
         throw new ConfigException(message);
       }
@@ -174,7 +174,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = ERR_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER.get(
+      LocalizableMessage message = ERR_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER.get(
           String.valueOf(config.dn()), getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -762,7 +762,7 @@
               }
             }
 
-            MessageBuilder invalidReason = new MessageBuilder();
+            LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
             if (! pwPolicyState.passwordIsAcceptable(operation, userEntry,
                                                      newPassword,
                                                      clearPasswords,
@@ -1110,7 +1110,7 @@
       }
       if (selfChange)
       {
-        Message message = INFO_MODIFY_PASSWORD_CHANGED.get();
+        LocalizableMessage message = INFO_MODIFY_PASSWORD_CHANGED.get();
         pwPolicyState.generateAccountStatusNotification(
           AccountStatusNotificationType.PASSWORD_CHANGED,
           userEntry, message,
@@ -1119,7 +1119,7 @@
       }
       else
       {
-        Message message = INFO_MODIFY_PASSWORD_RESET.get();
+        LocalizableMessage message = INFO_MODIFY_PASSWORD_RESET.get();
         pwPolicyState.generateAccountStatusNotification(
           AccountStatusNotificationType.PASSWORD_RESET,
           userEntry, message,
@@ -1229,7 +1229,7 @@
   @Override()
   public boolean isConfigurationAcceptable(ExtendedOperationHandlerCfg
                                                 configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     PasswordModifyExtendedOperationHandlerCfg config =
          (PasswordModifyExtendedOperationHandlerCfg) configuration;
@@ -1255,7 +1255,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
        PasswordModifyExtendedOperationHandlerCfg config,
-       List<Message> unacceptableReasons)
+       List<LocalizableMessage> unacceptableReasons)
   {
     // Make sure that the specified identity mapper is OK.
     try
@@ -1264,7 +1264,7 @@
       IdentityMapper<?> mapper = DirectoryServer.getIdentityMapper(mapperDN);
       if (mapper == null)
       {
-        Message message = ERR_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER.get(
+        LocalizableMessage message = ERR_EXTOP_PASSMOD_NO_SUCH_ID_MAPPER.get(
                 String.valueOf(mapperDN),
                 String.valueOf(config.dn()));
         unacceptableReasons.add(message);
@@ -1278,7 +1278,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER.get(
+      LocalizableMessage message = ERR_EXTOP_PASSMOD_CANNOT_DETERMINE_ID_MAPPER.get(
               String.valueOf(config.dn()),
               getExceptionMessage(e));
       unacceptableReasons.add(message);
@@ -1312,7 +1312,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    List<Message>     messages            = new ArrayList<Message>();
+    List<LocalizableMessage>     messages            = new ArrayList<LocalizableMessage>();
 
 
     // Make sure that the specified identity mapper is OK.
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordPolicyStateExtendedOperation.java b/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordPolicyStateExtendedOperation.java
index e01a24a..bb104fc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordPolicyStateExtendedOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordPolicyStateExtendedOperation.java
@@ -31,7 +31,7 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.
             PasswordPolicyStateExtendedOperationHandlerCfg;
 import org.opends.server.api.AuthenticationPolicy;
@@ -323,7 +323,7 @@
     ClientConnection clientConnection = operation.getClientConnection();
     if (! clientConnection.hasPrivilege(Privilege.PASSWORD_RESET, operation))
     {
-      Message message = ERR_PWPSTATE_EXTOP_NO_PRIVILEGE.get();
+      LocalizableMessage message = ERR_PWPSTATE_EXTOP_NO_PRIVILEGE.get();
       operation.appendErrorMessage(message);
       operation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS);
       return;
@@ -335,7 +335,7 @@
     ByteString requestValue = operation.getRequestValue();
     if (requestValue == null)
     {
-      Message message = ERR_PWPSTATE_EXTOP_NO_REQUEST_VALUE.get();
+      LocalizableMessage message = ERR_PWPSTATE_EXTOP_NO_REQUEST_VALUE.get();
       operation.appendErrorMessage(message);
       operation.setResultCode(ResultCode.PROTOCOL_ERROR);
       return;
@@ -355,7 +355,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_PWPSTATE_EXTOP_DECODE_FAILURE.get(getExceptionMessage(e));
       operation.appendErrorMessage(message);
       operation.setResultCode(ResultCode.PROTOCOL_ERROR);
@@ -538,7 +538,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWPSTATE_EXTOP_INVALID_OP_ENCODING.get(
+      LocalizableMessage message = ERR_PWPSTATE_EXTOP_INVALID_OP_ENCODING.get(
           e.getLocalizedMessage());
       operation.appendErrorMessage(message);
       operation.setResultCode(ResultCode.PROTOCOL_ERROR);
@@ -557,7 +557,7 @@
     catch(Exception e)
     {
       // TODO: Need a better message
-      Message message = ERR_PWPSTATE_EXTOP_INVALID_OP_ENCODING.get(
+      LocalizableMessage message = ERR_PWPSTATE_EXTOP_INVALID_OP_ENCODING.get(
           e.getLocalizedMessage());
       operation.appendErrorMessage(message);
       operation.setResultCode(ResultCode.PROTOCOL_ERROR);
@@ -619,7 +619,7 @@
     }
     else if (matchingEntries.size() > 1)
     {
-      Message message = ERR_PWPSTATE_EXTOP_MULTIPLE_ENTRIES.get(
+      LocalizableMessage message = ERR_PWPSTATE_EXTOP_MULTIPLE_ENTRIES.get(
               String.valueOf(targetDN));
       operation.appendErrorMessage(message);
       operation.setResultCode(ResultCode.CONSTRAINT_VIOLATION);
@@ -1341,7 +1341,7 @@
           }
           catch (DirectoryException de)
           {
-            Message message = ERR_PWPSTATE_EXTOP_BAD_AUTH_FAILURE_TIME.get(
+            LocalizableMessage message = ERR_PWPSTATE_EXTOP_BAD_AUTH_FAILURE_TIME.get(
                 opValues.get(0),
                 de.getMessageObject());
             operation.setResultCode(de.getResultCode());
@@ -1373,7 +1373,7 @@
             }
             catch (DirectoryException de)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_PWPSTATE_EXTOP_BAD_AUTH_FAILURE_TIME.get(
                       s,
                       de.getMessageObject());
@@ -1534,7 +1534,7 @@
           }
           catch (DirectoryException de)
           {
-            Message message = ERR_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME.get(
+            LocalizableMessage message = ERR_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME.get(
                 opValues.get(0),
                 de.getMessageObject());
             operation.setResultCode(de.getResultCode());
@@ -1566,7 +1566,7 @@
             }
             catch (DirectoryException de)
             {
-              Message message = ERR_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME.get(
+              LocalizableMessage message = ERR_PWPSTATE_EXTOP_BAD_GRACE_LOGIN_TIME.get(
                   s, de.getMessageObject());
               operation.setResultCode(de.getResultCode());
               operation.appendErrorMessage(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordPolicySubentryVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordPolicySubentryVirtualAttributeProvider.java
index 2ee166f..b4a4f39 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordPolicySubentryVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/PasswordPolicySubentryVirtualAttributeProvider.java
@@ -29,7 +29,7 @@
 import java.util.Collections;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.
         PasswordPolicySubentryVirtualAttributeCfg;
 import org.opends.server.api.AuthenticationPolicy;
@@ -154,7 +154,7 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    Message message =
+    LocalizableMessage message =
             ERR_PASSWORDPOLICYSUBENTRY_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
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 7200d3b..2dee279 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
@@ -38,7 +38,7 @@
 import java.util.List;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.PlainSASLMechanismHandlerCfg;
 import org.opends.server.admin.std.server.SASLMechanismHandlerCfg;
@@ -147,7 +147,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLPLAIN_NO_SASL_CREDENTIALS.get();
+      LocalizableMessage message = ERR_SASLPLAIN_NO_SASL_CREDENTIALS.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -159,7 +159,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLPLAIN_NO_NULLS_IN_CREDENTIALS.get();
+      LocalizableMessage message = ERR_SASLPLAIN_NO_NULLS_IN_CREDENTIALS.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -175,7 +175,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLPLAIN_NO_SECOND_NULL.get();
+      LocalizableMessage message = ERR_SASLPLAIN_NO_SECOND_NULL.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -184,7 +184,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLPLAIN_ZERO_LENGTH_AUTHCID.get();
+      LocalizableMessage message = ERR_SASLPLAIN_ZERO_LENGTH_AUTHCID.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -193,7 +193,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLPLAIN_ZERO_LENGTH_PASSWORD.get();
+      LocalizableMessage message = ERR_SASLPLAIN_ZERO_LENGTH_PASSWORD.get();
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -224,7 +224,7 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        Message message = ERR_SASLPLAIN_CANNOT_DECODE_AUTHCID_AS_DN.get(
+        LocalizableMessage message = ERR_SASLPLAIN_CANNOT_DECODE_AUTHCID_AS_DN.get(
                 authcID, de.getMessageObject());
         bindOperation.setAuthFailureReason(message);
         return;
@@ -234,7 +234,7 @@
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        Message message = ERR_SASLPLAIN_AUTHCID_IS_NULL_DN.get();
+        LocalizableMessage message = ERR_SASLPLAIN_AUTHCID_IS_NULL_DN.get();
         bindOperation.setAuthFailureReason(message);
         return;
       }
@@ -269,7 +269,7 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        Message message = ERR_SASLPLAIN_CANNOT_GET_ENTRY_BY_DN.get(
+        LocalizableMessage message = ERR_SASLPLAIN_CANNOT_GET_ENTRY_BY_DN.get(
                 String.valueOf(userDN),
                 de.getMessageObject());
         bindOperation.setAuthFailureReason(message);
@@ -301,7 +301,7 @@
 
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-        Message message = ERR_SASLPLAIN_CANNOT_MAP_USERNAME.get(
+        LocalizableMessage message = ERR_SASLPLAIN_CANNOT_MAP_USERNAME.get(
                 String.valueOf(authcID),
                 de.getMessageObject());
         bindOperation.setAuthFailureReason(message);
@@ -315,7 +315,7 @@
     {
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLPLAIN_NO_MATCHING_ENTRIES.get(authcID);
+      LocalizableMessage message = ERR_SASLPLAIN_NO_MATCHING_ENTRIES.get(authcID);
       bindOperation.setAuthFailureReason(message);
       return;
     }
@@ -347,7 +347,7 @@
 
           bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-          Message message = ERR_SASLPLAIN_AUTHZID_INVALID_DN.get(
+          LocalizableMessage message = ERR_SASLPLAIN_AUTHZID_INVALID_DN.get(
                   authzID, de.getMessageObject());
           bindOperation.setAuthFailureReason(message);
           return;
@@ -370,7 +370,7 @@
           {
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            Message message = ERR_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES.get(
+            LocalizableMessage message = ERR_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES.get(
                     String.valueOf(userEntry.getName()));
             bindOperation.setAuthFailureReason(message);
             return;
@@ -389,7 +389,7 @@
               {
                 bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-                Message message = ERR_SASLPLAIN_AUTHZID_NO_SUCH_ENTRY.get(
+                LocalizableMessage message = ERR_SASLPLAIN_AUTHZID_NO_SUCH_ENTRY.get(
                         String.valueOf(authzDN));
                 bindOperation.setAuthFailureReason(message);
                 return;
@@ -404,7 +404,7 @@
 
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              Message message = ERR_SASLPLAIN_AUTHZID_CANNOT_GET_ENTRY.get(
+              LocalizableMessage message = ERR_SASLPLAIN_AUTHZID_CANNOT_GET_ENTRY.get(
                       String.valueOf(authzDN),
                       de.getMessageObject());
               bindOperation.setAuthFailureReason(message);
@@ -438,7 +438,7 @@
             {
               bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-              Message message = ERR_SASLPLAIN_AUTHZID_NO_MAPPED_ENTRY.get(
+              LocalizableMessage message = ERR_SASLPLAIN_AUTHZID_NO_MAPPED_ENTRY.get(
                       authzID);
               bindOperation.setAuthFailureReason(message);
               return;
@@ -453,7 +453,7 @@
 
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            Message message = ERR_SASLPLAIN_AUTHZID_CANNOT_MAP_AUTHZID.get(
+            LocalizableMessage message = ERR_SASLPLAIN_AUTHZID_CANNOT_MAP_AUTHZID.get(
                     authzID, de.getMessageObject());
             bindOperation.setAuthFailureReason(message);
             return;
@@ -472,7 +472,7 @@
           {
             bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-            Message message = ERR_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES.get(
+            LocalizableMessage message = ERR_SASLPLAIN_AUTHZID_INSUFFICIENT_PRIVILEGES.get(
                     String.valueOf(userEntry.getName()));
             bindOperation.setAuthFailureReason(message);
             return;
@@ -496,7 +496,7 @@
       {
         // Check to see if the user is administratively disabled or locked.
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
-        Message message = ERR_BIND_OPERATION_ACCOUNT_DISABLED.get();
+        LocalizableMessage message = ERR_BIND_OPERATION_ACCOUNT_DISABLED.get();
         bindOperation.setAuthFailureReason(message);
         return;
       }
@@ -504,7 +504,7 @@
       if (!authState.passwordMatches(ByteString.valueOf(password)))
       {
         bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
-        Message message = ERR_SASLPLAIN_INVALID_PASSWORD.get();
+        LocalizableMessage message = ERR_SASLPLAIN_INVALID_PASSWORD.get();
         bindOperation.setAuthFailureReason(message);
         return;
       }
@@ -518,7 +518,7 @@
 
       bindOperation.setResultCode(ResultCode.INVALID_CREDENTIALS);
 
-      Message message = ERR_SASLPLAIN_CANNOT_CHECK_PASSWORD_VALIDITY.get(
+      LocalizableMessage message = ERR_SASLPLAIN_CANNOT_CHECK_PASSWORD_VALIDITY.get(
               String.valueOf(userEntry.getName()),
               String.valueOf(e));
       bindOperation.setAuthFailureReason(message);
@@ -569,7 +569,7 @@
   @Override()
   public boolean isConfigurationAcceptable(
                       SASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     PlainSASLMechanismHandlerCfg config =
          (PlainSASLMechanismHandlerCfg) configuration;
@@ -584,7 +584,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       PlainSASLMechanismHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -600,7 +600,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the identity mapper that should be used to find users.
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/RC4PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/RC4PasswordStorageScheme.java
index c1164c4..b530805 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/RC4PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/RC4PasswordStorageScheme.java
@@ -28,7 +28,7 @@
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.RC4PasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -129,7 +129,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_RC4,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_RC4,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -172,7 +172,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_RC4,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_RC4,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -246,7 +246,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_DECRYPT.get(STORAGE_SCHEME_NAME_RC4,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_DECRYPT.get(STORAGE_SCHEME_NAME_RC4,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -274,7 +274,7 @@
   public ByteString encodeAuthPassword(ByteSequence plaintext)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -302,7 +302,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/RandomPasswordGenerator.java b/opendj3-server-dev/src/server/org/opends/server/extensions/RandomPasswordGenerator.java
index 7d9c6a4..ba607a3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/RandomPasswordGenerator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/RandomPasswordGenerator.java
@@ -34,7 +34,7 @@
 import java.util.SortedSet;
 import java.util.StringTokenizer;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.PasswordGeneratorCfg;
 import org.opends.server.admin.std.server.RandomPasswordGeneratorCfg;
@@ -115,7 +115,7 @@
 
       if (encodedCharacterSets.size() == 0)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_RANDOMPWGEN_NO_CHARSETS.get(String.valueOf(configEntryDN));
         throw new ConfigException(message);
       }
@@ -124,7 +124,7 @@
       {
         if (charsets.containsKey(s.getName()))
         {
-          Message message = ERR_RANDOMPWGEN_CHARSET_NAME_CONFLICT.get(
+          LocalizableMessage message = ERR_RANDOMPWGEN_CHARSET_NAME_CONFLICT.get(
               String.valueOf(configEntryDN), s.getName());
           throw new ConfigException(message);
         }
@@ -145,7 +145,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS.get(getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -175,7 +175,7 @@
           NamedCharacterSet charset = charsets.get(name);
           if (charset == null)
           {
-            Message message = ERR_RANDOMPWGEN_UNKNOWN_CHARSET.get(
+            LocalizableMessage message = ERR_RANDOMPWGEN_UNKNOWN_CHARSET.get(
                 String.valueOf(formatString), String.valueOf(name));
             throw new ConfigException(message);
           }
@@ -196,7 +196,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_RANDOMPWGEN_INVALID_PWFORMAT.get(
+          LocalizableMessage message = ERR_RANDOMPWGEN_INVALID_PWFORMAT.get(
               String.valueOf(formatString));
           throw new ConfigException(message, e);
         }
@@ -224,7 +224,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT.get(getExceptionMessage(e));
       throw new InitializationException(message, e);
     }
@@ -281,7 +281,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PasswordGeneratorCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     RandomPasswordGeneratorCfg config =
          (RandomPasswordGeneratorCfg) configuration;
@@ -295,7 +295,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       RandomPasswordGeneratorCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     DN cfgEntryDN = configuration.dn();
 
@@ -309,7 +309,7 @@
       SortedSet<String> currentPasSet = configuration.getPasswordCharacterSet();
       if (currentPasSet.size() == 0)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_RANDOMPWGEN_NO_CHARSETS.get(String.valueOf(cfgEntryDN));
         throw new ConfigException(message);
       }
@@ -319,7 +319,7 @@
       {
         if (charsets.containsKey(s.getName()))
         {
-          Message message = ERR_RANDOMPWGEN_CHARSET_NAME_CONFLICT.get(
+          LocalizableMessage message = ERR_RANDOMPWGEN_CHARSET_NAME_CONFLICT.get(
                   String.valueOf(cfgEntryDN), s.getName());
           unacceptableReasons.add(message);
           return false;
@@ -342,7 +342,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS.get(
+      LocalizableMessage message = ERR_RANDOMPWGEN_CANNOT_DETERMINE_CHARSETS.get(
               getExceptionMessage(e));
       unacceptableReasons.add(message);
       return false;
@@ -369,7 +369,7 @@
             NamedCharacterSet charset = charsets.get(name);
             if (charset == null)
             {
-              Message message = ERR_RANDOMPWGEN_UNKNOWN_CHARSET.get(
+              LocalizableMessage message = ERR_RANDOMPWGEN_UNKNOWN_CHARSET.get(
                       String.valueOf(formatString), String.valueOf(name));
               unacceptableReasons.add(message);
               return false;
@@ -382,7 +382,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            Message message = ERR_RANDOMPWGEN_INVALID_PWFORMAT.get(
+            LocalizableMessage message = ERR_RANDOMPWGEN_INVALID_PWFORMAT.get(
                     String.valueOf(formatString));
             unacceptableReasons.add(message);
             return false;
@@ -396,7 +396,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT.get(
+      LocalizableMessage message = ERR_RANDOMPWGEN_CANNOT_DETERMINE_PWFORMAT.get(
               getExceptionMessage(e));
       unacceptableReasons.add(message);
       return false;
@@ -417,7 +417,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the character sets for use in generating the password.  At least one
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/RegularExpressionIdentityMapper.java b/opendj3-server-dev/src/server/org/opends/server/extensions/RegularExpressionIdentityMapper.java
index 3c1fa69..cda48e6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/RegularExpressionIdentityMapper.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/RegularExpressionIdentityMapper.java
@@ -50,7 +50,7 @@
 import org.opends.server.protocols.internal.InternalSearchOperation;
 import org.opends.server.types.*;
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -119,7 +119,7 @@
       matchPattern  = Pattern.compile(currentConfig.getMatchPattern());
     }
     catch (PatternSyntaxException pse) {
-      Message message = ERR_REGEXMAP_INVALID_MATCH_PATTERN.get(
+      LocalizableMessage message = ERR_REGEXMAP_INVALID_MATCH_PATTERN.get(
               currentConfig.getMatchPattern(),
               pse.getMessage());
       throw new ConfigException(message, pse);
@@ -251,7 +251,7 @@
 
         case SIZE_LIMIT_EXCEEDED:
           // Multiple entries matched the filter.  This is not acceptable.
-          Message message = ERR_REGEXMAP_MULTIPLE_MATCHING_ENTRIES.get(
+          LocalizableMessage message = ERR_REGEXMAP_MULTIPLE_MATCHING_ENTRIES.get(
                           String.valueOf(processedID));
           throw new DirectoryException(
                   ResultCode.CONSTRAINT_VIOLATION, message);
@@ -283,7 +283,7 @@
           matchingEntry = iterator.next();
           if (iterator.hasNext())
           {
-            Message message = ERR_REGEXMAP_MULTIPLE_MATCHING_ENTRIES.get(
+            LocalizableMessage message = ERR_REGEXMAP_MULTIPLE_MATCHING_ENTRIES.get(
                             String.valueOf(processedID));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                          message);
@@ -291,7 +291,7 @@
         }
         else
         {
-          Message message = ERR_REGEXMAP_MULTIPLE_MATCHING_ENTRIES.get(
+          LocalizableMessage message = ERR_REGEXMAP_MULTIPLE_MATCHING_ENTRIES.get(
                           String.valueOf(processedID));
           throw new DirectoryException(
                   ResultCode.CONSTRAINT_VIOLATION, message);
@@ -317,7 +317,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(IdentityMapperCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     RegularExpressionIdentityMapperCfg config =
          (RegularExpressionIdentityMapperCfg) configuration;
@@ -331,7 +331,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       RegularExpressionIdentityMapperCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -366,7 +366,7 @@
     }
     catch (PatternSyntaxException pse)
     {
-      Message message = ERR_REGEXMAP_INVALID_MATCH_PATTERN.get(
+      LocalizableMessage message = ERR_REGEXMAP_INVALID_MATCH_PATTERN.get(
                       configuration.getMatchPattern(),
                                   pse.getMessage());
       unacceptableReasons.add(message);
@@ -387,7 +387,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     Pattern newMatchPattern = null;
@@ -397,7 +397,7 @@
     }
     catch (PatternSyntaxException pse)
     {
-      Message message = ERR_REGEXMAP_INVALID_MATCH_PATTERN.get(
+      LocalizableMessage message = ERR_REGEXMAP_INVALID_MATCH_PATTERN.get(
                       configuration.getMatchPattern(),
                                   pse.getMessage());
       messages.add(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidator.java b/opendj3-server-dev/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidator.java
index 91fb635..a1e25f6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/RepeatedCharactersPasswordValidator.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -40,7 +40,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -102,7 +102,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      MessageBuilder invalidReason)
+                                      LocalizableMessageBuilder invalidReason)
   {
     // Get a handle to the current configuration and see if we need to count
     // the number of repeated characters in the password.
@@ -140,7 +140,7 @@
         consecutiveCount++;
         if (consecutiveCount > maxRepeats)
         {
-          Message message =
+          LocalizableMessage message =
                   ERR_REPEATEDCHARS_VALIDATOR_TOO_MANY_CONSECUTIVE.get(
                           maxRepeats);
           invalidReason.append(message);
@@ -164,7 +164,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       RepeatedCharactersPasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // All of the necessary validation should have been performed automatically,
     // so if we get to this point then the new configuration will be acceptable.
@@ -181,7 +181,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     // For this password validator, we will always be able to successfully apply
     // the new configuration.
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 0ea2cb3..c14c64f 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
@@ -43,7 +43,7 @@
 import javax.security.sasl.*;
 
 import org.ietf.jgss.GSSException;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AuthenticationPolicyState;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.IdentityMapper;
@@ -125,7 +125,7 @@
   private String userName;
 
   // Error message used by callbacks.
-  private Message cbMsg;
+  private LocalizableMessage cbMsg;
 
   // Error code used by callbacks.
   private ResultCode cbResultCode;
@@ -205,7 +205,7 @@
       }
       else
       {
-        final Message message = INFO_SASL_UNSUPPORTED_CALLBACK.get(mechanism,
+        final LocalizableMessage message = INFO_SASL_UNSUPPORTED_CALLBACK.get(mechanism,
             String.valueOf(callback));
         throw new UnsupportedCallbackException(callback, message.toString());
       }
@@ -244,7 +244,7 @@
         }
         final GSSException gex = (GSSException) ex.getCause();
 
-        final Message msg;
+        final LocalizableMessage msg;
         if (gex != null)
         {
           msg = ERR_SASL_CONTEXT_CREATE_ERROR.get(SASL_MECHANISM_GSSAPI,
@@ -313,7 +313,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      final Message msg = ERR_SASL_PROTOCOL_ERROR.get(mechanism,
+      final LocalizableMessage msg = ERR_SASL_PROTOCOL_ERROR.get(mechanism,
           getExceptionMessage(e));
       handleError(msg);
       return false;
@@ -358,7 +358,7 @@
 
     if ((clientCredentials == null) || (clientCredentials.length() == 0))
     {
-      final Message msg = ERR_SASL_NO_CREDENTIALS.get(mechanism, mechanism);
+      final LocalizableMessage msg = ERR_SASL_NO_CREDENTIALS.get(mechanism, mechanism);
       handleError(msg);
       return;
     }
@@ -400,7 +400,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      final Message msg = ERR_SASL_PROTOCOL_ERROR.get(mechanism,
+      final LocalizableMessage msg = ERR_SASL_PROTOCOL_ERROR.get(mechanism,
           getExceptionMessage(e));
       handleError(msg);
     }
@@ -433,7 +433,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      final Message msg = ERR_SASL_PROTOCOL_ERROR.get(mechanism,
+      final LocalizableMessage msg = ERR_SASL_PROTOCOL_ERROR.get(mechanism,
           getExceptionMessage(e));
       handleError(msg);
     }
@@ -585,7 +585,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      final Message msg = ERR_SASL_PROTOCOL_ERROR.get(mechanism,
+      final LocalizableMessage msg = ERR_SASL_PROTOCOL_ERROR.get(mechanism,
           getExceptionMessage(e));
       handleError(msg);
     }
@@ -946,7 +946,7 @@
    * @param msg
    *          The message to use if the callback message is not null.
    */
-  private void handleError(final Message msg)
+  private void handleError(final LocalizableMessage msg)
   {
     dispose();
     final ClientConnection clientConn = bindOp.getClientConnection();
@@ -1047,9 +1047,9 @@
         serverFQDN, saslProps, this);
     if (saslServer == null)
     {
-      final Message msg = ERR_SASL_CREATE_SASL_SERVER_FAILED.get(mechanism,
+      final LocalizableMessage msg = ERR_SASL_CREATE_SASL_SERVER_FAILED.get(mechanism,
           serverFQDN);
-      throw new SaslException(Message.toString(msg));
+      throw new SaslException(msg.toString());
     }
   }
 
@@ -1182,7 +1182,7 @@
 
       if (!authState.isPasswordPolicy())
       {
-        final Message message = ERR_SASL_ACCOUNT_NOT_LOCAL.get(mechanism,
+        final LocalizableMessage message = ERR_SASL_ACCOUNT_NOT_LOCAL.get(mechanism,
             String.valueOf(authEntry.getName()));
         setCallbackMsg(ResultCode.INAPPROPRIATE_AUTHENTICATION, message);
         return;
@@ -1234,7 +1234,7 @@
    * @param cbMsg
    *          The message to set the callback message to.
    */
-  private void setCallbackMsg(final Message cbMsg)
+  private void setCallbackMsg(final LocalizableMessage cbMsg)
   {
     setCallbackMsg(ResultCode.INVALID_CREDENTIALS, cbMsg);
   }
@@ -1250,7 +1250,7 @@
    *          The message.
    */
   private void setCallbackMsg(final ResultCode cbResultCode,
-      final Message cbMsg)
+      final LocalizableMessage cbMsg)
   {
     this.cbResultCode = cbResultCode;
     this.cbMsg = cbMsg;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SHA1PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SHA1PasswordStorageScheme.java
index 67d2421..d227809 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SHA1PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SHA1PasswordStorageScheme.java
@@ -31,7 +31,7 @@
 import java.security.MessageDigest;
 import java.util.Arrays;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.SHA1PasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -114,7 +114,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
           MESSAGE_DIGEST_ALGORITHM_SHA_1, String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -160,7 +160,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -207,7 +207,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -304,7 +304,7 @@
   public ByteString encodeAuthPassword(ByteSequence plaintext)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -342,7 +342,7 @@
   public ByteString getPlaintextValue(ByteSequence storedPassword)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SHA_1);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -357,7 +357,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SMTPAccountStatusNotificationHandler.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SMTPAccountStatusNotificationHandler.java
index 824fb81..ff242df 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SMTPAccountStatusNotificationHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SMTPAccountStatusNotificationHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -36,8 +37,8 @@
 import java.util.Properties;
 import java.util.Set;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.AccountStatusNotificationHandlerCfg;
 import org.opends.server.admin.std.server.
@@ -512,7 +513,7 @@
   public boolean isConfigurationAcceptable(
                       AccountStatusNotificationHandlerCfg
                            configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     SMTPAccountStatusNotificationHandlerCfg config =
          (SMTPAccountStatusNotificationHandlerCfg) configuration;
@@ -650,7 +651,7 @@
 
 
     // Generate the message body.
-    MessageBuilder messageBody = new MessageBuilder();
+    LocalizableMessageBuilder messageBody = new LocalizableMessageBuilder();
     for (NotificationMessageTemplateElement e : templateElements)
     {
       e.generateValue(messageBody, notification);
@@ -696,7 +697,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       SMTPAccountStatusNotificationHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -785,7 +786,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ce);
       }
 
-      LinkedList<Message> messageList = new LinkedList<Message>();
+      LinkedList<LocalizableMessage> messageList = new LinkedList<LocalizableMessage>();
       messageList.add(ce.getMessageObject());
 
       return new ConfigChangeResult(ResultCode.UNWILLING_TO_PERFORM, false,
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SMTPAlertHandler.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SMTPAlertHandler.java
index 7206658..b9a1f90 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SMTPAlertHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SMTPAlertHandler.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -49,7 +50,6 @@
 import org.opends.server.loggers.ErrorLogger;
 import static org.opends.messages.ExtensionMessages.*;
 
-import org.opends.messages.MessageDescriptor;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -97,7 +97,7 @@
     if ((DirectoryServer.getMailServerPropertySets() == null) ||
         DirectoryServer.getMailServerPropertySets().isEmpty())
     {
-      Message message = ERR_SMTPALERTHANDLER_NO_SMTP_SERVERS.get();
+      LocalizableMessage message = ERR_SMTPALERTHANDLER_NO_SMTP_SERVERS.get();
       throw new ConfigException(message);
     }
 
@@ -121,7 +121,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAcceptable(AlertHandlerCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -142,7 +142,7 @@
    * {@inheritDoc}
    */
   public void sendAlertNotification(AlertGenerator generator, String alertType,
-                                    Message alertMessage)
+                                    LocalizableMessage alertMessage)
   {
     SMTPAlertHandlerCfg cfg = currentConfig;
 
@@ -152,10 +152,10 @@
     String alertIDStr;
     String alertMessageStr;
     if (alertMessage != null) {
-      alertIDStr = String.valueOf(alertMessage.getDescriptor().getId());
+      alertIDStr = alertMessage.resourceName() + "-" + alertMessage.ordinal();
       alertMessageStr = alertMessage.toString();
     } else {
-      alertIDStr = String.valueOf(MessageDescriptor.NULL_ID);
+      alertIDStr = "-1";
       alertMessageStr = "none";
     }
     String subject = replaceTokens(cfg.getMessageSubject(), alertType,
@@ -167,7 +167,7 @@
     EMailMessage message = new EMailMessage(cfg.getSenderAddress(), recipients,
                                             subject);
 
-    message.setBody(Message.raw(wrapText(body, 75)));
+    message.setBody(LocalizableMessage.raw(wrapText(body, 75)));
 
     try
     {
@@ -180,7 +180,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message msg = WARN_SMTPALERTHANDLER_ERROR_SENDING_MESSAGE.get(
+      LocalizableMessage msg = WARN_SMTPALERTHANDLER_ERROR_SENDING_MESSAGE.get(
           alertType, alertMessage, e.getLocalizedMessage());
       ErrorLogger.logError(msg);
     }
@@ -224,7 +224,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       SMTPAlertHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java
index 69fa3eb..6345db5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedMD5PasswordStorageScheme.java
@@ -32,7 +32,7 @@
 import java.util.Arrays;
 import java.util.Random;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.SaltedMD5PasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -129,7 +129,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
           MESSAGE_DIGEST_ALGORITHM_MD5, String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -186,7 +186,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -248,7 +248,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -299,7 +299,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
           storedPassword.toString(), String.valueOf(e));
       ErrorLogger.logError(message);
       return false;
@@ -398,7 +398,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -488,7 +488,7 @@
   public ByteString getPlaintextValue(ByteSequence storedPassword)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SALTED_MD5);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -503,7 +503,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(AUTH_PASSWORD_SCHEME_NAME_SALTED_MD5);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java
index aee8d86..e98debe 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA1PasswordStorageScheme.java
@@ -32,7 +32,7 @@
 import java.util.Arrays;
 import java.util.Random;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.SaltedSHA1PasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -130,7 +130,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
           MESSAGE_DIGEST_ALGORITHM_SHA_1, String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -186,7 +186,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -248,7 +248,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -290,7 +290,7 @@
       saltLength = decodedBytes.length - SHA1_LENGTH;
       if (saltLength <= 0)
       {
-        Message message =
+        LocalizableMessage message =
           ERR_PWSCHEME_INVALID_BASE64_DECODED_STORED_PASSWORD.get(
           storedPassword.toString());
         ErrorLogger.logError(message);
@@ -308,7 +308,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
           storedPassword.toString(), String.valueOf(e));
       ErrorLogger.logError(message);
       return false;
@@ -407,7 +407,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -497,7 +497,7 @@
   public ByteString getPlaintextValue(ByteSequence storedPassword)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SALTED_SHA_1);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -512,7 +512,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -563,7 +563,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
           MESSAGE_DIGEST_ALGORITHM_SHA_1, String.valueOf(e));
       throw new DirectoryException(ResultCode.OTHER, message, e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
index 8a6510f..b77b5a7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA256PasswordStorageScheme.java
@@ -32,7 +32,7 @@
 import java.util.Arrays;
 import java.util.Random;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.SaltedSHA256PasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -131,7 +131,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
           MESSAGE_DIGEST_ALGORITHM_SHA_256, String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -188,7 +188,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -250,7 +250,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -294,7 +294,7 @@
       saltLength = decodedBytes.length - SHA256_LENGTH;
       if (saltLength <= 0)
       {
-        Message message =
+        LocalizableMessage message =
           ERR_PWSCHEME_INVALID_BASE64_DECODED_STORED_PASSWORD.get(
           storedPassword.toString());
         ErrorLogger.logError(message);
@@ -312,7 +312,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
           storedPassword.toString(), String.valueOf(e));
       ErrorLogger.logError(message);
       return false;
@@ -411,7 +411,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -501,7 +501,7 @@
   public ByteString getPlaintextValue(ByteSequence storedPassword)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SALTED_SHA_256);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -516,7 +516,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message = ERR_PWSCHEME_NOT_REVERSIBLE.get(
+    LocalizableMessage message = ERR_PWSCHEME_NOT_REVERSIBLE.get(
         AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_256);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java
index b0af529..6acb179 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA384PasswordStorageScheme.java
@@ -32,7 +32,7 @@
 import java.util.Arrays;
 import java.util.Random;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.SaltedSHA384PasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -132,7 +132,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
           MESSAGE_DIGEST_ALGORITHM_SHA_384, String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -189,7 +189,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -251,7 +251,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -295,7 +295,7 @@
       saltLength = decodedBytes.length - SHA384_LENGTH;
       if (saltLength <= 0)
       {
-        Message message =
+        LocalizableMessage message =
           ERR_PWSCHEME_INVALID_BASE64_DECODED_STORED_PASSWORD.get(
           storedPassword.toString());
         ErrorLogger.logError(message);
@@ -313,7 +313,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
           storedPassword.toString(), String.valueOf(e));
       ErrorLogger.logError(message);
       return false;
@@ -412,7 +412,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -502,7 +502,7 @@
   public ByteString getPlaintextValue(ByteSequence storedPassword)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SALTED_SHA_384);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -517,7 +517,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message = ERR_PWSCHEME_NOT_REVERSIBLE.get(
+    LocalizableMessage message = ERR_PWSCHEME_NOT_REVERSIBLE.get(
         AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_384);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java
index 229c5a4..b3ba45f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SaltedSHA512PasswordStorageScheme.java
@@ -32,7 +32,7 @@
 import java.util.Arrays;
 import java.util.Random;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.SaltedSHA512PasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -132,7 +132,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
           MESSAGE_DIGEST_ALGORITHM_SHA_512, String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -188,7 +188,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -250,7 +250,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -294,7 +294,7 @@
       saltLength = decodedBytes.length - SHA512_LENGTH;
       if (saltLength <= 0)
       {
-        Message message =
+        LocalizableMessage message =
           ERR_PWSCHEME_INVALID_BASE64_DECODED_STORED_PASSWORD.get(
           storedPassword.toString());
         ErrorLogger.logError(message);
@@ -312,7 +312,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_BASE64_DECODE_STORED_PASSWORD.get(
           storedPassword.toString(), String.valueOf(e));
       ErrorLogger.logError(message);
       return false;
@@ -411,7 +411,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
+        LocalizableMessage message = ERR_PWSCHEME_CANNOT_ENCODE_PASSWORD.get(
             CLASS_NAME, getExceptionMessage(e));
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, e);
@@ -501,7 +501,7 @@
   public ByteString getPlaintextValue(ByteSequence storedPassword)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_NOT_REVERSIBLE.get(STORAGE_SCHEME_NAME_SALTED_SHA_512);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -516,7 +516,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message = ERR_PWSCHEME_NOT_REVERSIBLE.get(
+    LocalizableMessage message = ERR_PWSCHEME_NOT_REVERSIBLE.get(
         AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_512);
     throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
   }
@@ -568,7 +568,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
+      LocalizableMessage message = ERR_PWSCHEME_CANNOT_INITIALIZE_MESSAGE_DIGEST.get(
           MESSAGE_DIGEST_ALGORITHM_SHA_512, String.valueOf(e));
       throw new DirectoryException(ResultCode.OTHER, message, e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidator.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidator.java
index 2956f44..c479ea4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SimilarityBasedPasswordValidator.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.List;
 import java.util.Set;
@@ -39,7 +39,7 @@
 import org.opends.server.admin.server.ConfigurationChangeListener;
 
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -98,7 +98,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      MessageBuilder invalidReason)  {
+                                      LocalizableMessageBuilder invalidReason)  {
 
     int minDifference = currentConfig.getMinPasswordDifference();
     ByteString passwd = newPassword == null
@@ -136,7 +136,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       SimilarityBasedPasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java
index 46c31d4..b8026b2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SimpleStaticGroupMemberList.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -129,7 +129,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
-        Message message = ERR_STATICMEMBERS_CANNOT_DECODE_DN.
+        LocalizableMessage message = ERR_STATICMEMBERS_CANNOT_DECODE_DN.
             get(String.valueOf(dn), String.valueOf(groupDN),
                 String.valueOf(de.getMessageObject()));
         throw new MembershipException(message, true, de);
@@ -157,7 +157,7 @@
         Entry memberEntry = DirectoryConfig.getEntry(DN.decode(memberDN));
         if (memberEntry == null)
         {
-          Message message = ERR_STATICMEMBERS_NO_SUCH_ENTRY.get(
+          LocalizableMessage message = ERR_STATICMEMBERS_NO_SUCH_ENTRY.get(
               String.valueOf(memberDN), String.valueOf(groupDN));
           throw new MembershipException(message, true);
         }
@@ -171,7 +171,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
 
-        Message message = ERR_STATICMEMBERS_CANNOT_GET_ENTRY.
+        LocalizableMessage message = ERR_STATICMEMBERS_CANNOT_GET_ENTRY.
             get(String.valueOf(memberDN), String.valueOf(groupDN),
                 String.valueOf(de.getMessageObject()));
         throw new MembershipException(message, true, de);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java
index b349fb4..ecf79e0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SoftReferenceEntryCache.java
@@ -35,8 +35,8 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.EntryCacheCfg;
@@ -140,22 +140,22 @@
 
     // Read configuration and apply changes.
     boolean applyChanges = true;
-    ArrayList<Message> errorMessages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>();
     EntryCacheCommon.ConfigErrorHandler errorHandler =
       EntryCacheCommon.getConfigErrorHandler (
           EntryCacheCommon.ConfigPhase.PHASE_INIT, null, errorMessages
           );
     if (!processEntryCacheConfig(configuration, applyChanges, errorHandler)) {
-      MessageBuilder buffer = new MessageBuilder();
+      LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
       if (!errorMessages.isEmpty()) {
-        Iterator<Message> iterator = errorMessages.iterator();
+        Iterator<LocalizableMessage> iterator = errorMessages.iterator();
         buffer.append(iterator.next());
         while (iterator.hasNext()) {
           buffer.append(".  ");
           buffer.append(iterator.next());
         }
       }
-      Message message = ERR_SOFTREFCACHE_CANNOT_INITIALIZE.get(
+      LocalizableMessage message = ERR_SOFTREFCACHE_CANNOT_INITIALIZE.get(
         buffer.toString());
       throw new ConfigException(message);
     }
@@ -479,7 +479,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(EntryCacheCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     SoftReferenceEntryCacheCfg config =
          (SoftReferenceEntryCacheCfg) configuration;
@@ -494,7 +494,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       SoftReferenceEntryCacheCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     boolean applyChanges = false;
     EntryCacheCommon.ConfigErrorHandler errorHandler =
@@ -519,7 +519,7 @@
       )
   {
     boolean applyChanges = true;
-    ArrayList<Message> errorMessages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errorMessages = new ArrayList<LocalizableMessage>();
     EntryCacheCommon.ConfigErrorHandler errorHandler =
       EntryCacheCommon.getConfigErrorHandler (
           EntryCacheCommon.ConfigPhase.PHASE_APPLY, null, errorMessages
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/StartTLSExtendedOperation.java b/opendj3-server-dev/src/server/org/opends/server/extensions/StartTLSExtendedOperation.java
index 206cf94..8612932 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/StartTLSExtendedOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/StartTLSExtendedOperation.java
@@ -22,11 +22,11 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.server.StartTLSExtendedOperationHandlerCfg;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.ExtendedOperationHandler;
@@ -105,7 +105,7 @@
       return;
     }
 
-    MessageBuilder unavailableReason = new MessageBuilder();
+    LocalizableMessageBuilder unavailableReason = new LocalizableMessageBuilder();
     if (! tlsCapableConnection.prepareTLS(unavailableReason))
     {
       operation.setResultCode(ResultCode.UNAVAILABLE);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/StaticGroup.java b/opendj3-server-dev/src/server/org/opends/server/extensions/StaticGroup.java
index 722d99b..12828ae 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/StaticGroup.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/StaticGroup.java
@@ -34,7 +34,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.GroupImplementationCfg;
 import org.opends.server.admin.std.server.StaticGroupImplementationCfg;
 import org.opends.server.api.Group;
@@ -186,14 +186,14 @@
     {
       if (groupEntry.hasObjectClass(groupOfNamesClass))
       {
-        Message message = ERR_STATICGROUP_INVALID_OC_COMBINATION.
+        LocalizableMessage message = ERR_STATICGROUP_INVALID_OC_COMBINATION.
             get(String.valueOf(groupEntry.getName()), OC_GROUP_OF_ENTRIES,
                 OC_GROUP_OF_NAMES);
         throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
       }
       else if (groupEntry.hasObjectClass(groupOfUniqueNamesClass))
       {
-        Message message = ERR_STATICGROUP_INVALID_OC_COMBINATION.
+        LocalizableMessage message = ERR_STATICGROUP_INVALID_OC_COMBINATION.
             get(String.valueOf(groupEntry.getName()), OC_GROUP_OF_ENTRIES,
                 OC_GROUP_OF_UNIQUE_NAMES);
         throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
@@ -206,7 +206,7 @@
     {
       if (groupEntry.hasObjectClass(groupOfUniqueNamesClass))
       {
-        Message message = ERR_STATICGROUP_INVALID_OC_COMBINATION.
+        LocalizableMessage message = ERR_STATICGROUP_INVALID_OC_COMBINATION.
             get(String.valueOf(groupEntry.getName()), OC_GROUP_OF_NAMES,
                 OC_GROUP_OF_UNIQUE_NAMES);
         throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
@@ -222,7 +222,7 @@
     }
     else
     {
-      Message message = ERR_STATICGROUP_NO_VALID_OC.
+      LocalizableMessage message = ERR_STATICGROUP_NO_VALID_OC.
           get(String.valueOf(groupEntry.getName()), OC_GROUP_OF_NAMES,
               OC_GROUP_OF_UNIQUE_NAMES);
       throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
@@ -258,7 +258,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = ERR_STATICGROUP_CANNOT_DECODE_MEMBER_VALUE_AS_DN.
+            LocalizableMessage message = ERR_STATICGROUP_CANNOT_DECODE_MEMBER_VALUE_AS_DN.
                 get(v.getValue().toString(),
                     someMemberAttributeType.getNameOrOID(),
                     String.valueOf(groupEntry.getName()),
@@ -410,7 +410,7 @@
     {
       if (nestedGroups.contains(nestedGroupDN))
       {
-        Message msg = ERR_STATICGROUP_ADD_NESTED_GROUP_ALREADY_EXISTS.get(
+        LocalizableMessage msg = ERR_STATICGROUP_ADD_NESTED_GROUP_ALREADY_EXISTS.get(
                 String.valueOf(nestedGroupDN),
                 String.valueOf(groupEntryDN));
         throw new DirectoryException(
@@ -436,7 +436,7 @@
       modifyOperation.run();
       if (modifyOperation.getResultCode() != ResultCode.SUCCESS)
       {
-        Message msg = ERR_STATICGROUP_ADD_MEMBER_UPDATE_FAILED.get(
+        LocalizableMessage msg = ERR_STATICGROUP_ADD_MEMBER_UPDATE_FAILED.get(
                 String.valueOf(nestedGroupDN),
                 String.valueOf(groupEntryDN),
                 modifyOperation.getErrorMessage().toString());
@@ -681,7 +681,7 @@
 
       if (memberDNs.contains(userDNString))
       {
-        Message message = ERR_STATICGROUP_ADD_MEMBER_ALREADY_EXISTS.get(
+        LocalizableMessage message = ERR_STATICGROUP_ADD_MEMBER_ALREADY_EXISTS.get(
             String.valueOf(userDN), String.valueOf(groupEntryDN));
         throw new DirectoryException(ResultCode.ATTRIBUTE_OR_VALUE_EXISTS,
                                      message);
@@ -705,7 +705,7 @@
       modifyOperation.run();
       if (modifyOperation.getResultCode() != ResultCode.SUCCESS)
       {
-        Message message = ERR_STATICGROUP_ADD_MEMBER_UPDATE_FAILED.
+        LocalizableMessage message = ERR_STATICGROUP_ADD_MEMBER_UPDATE_FAILED.
             get(String.valueOf(userDN), String.valueOf(groupEntryDN),
                 modifyOperation.getErrorMessage().toString());
         throw new DirectoryException(modifyOperation.getResultCode(), message);
@@ -736,7 +736,7 @@
     {
       if (! memberDNs.contains(userDNString))
       {
-        Message message = ERR_STATICGROUP_REMOVE_MEMBER_NO_SUCH_MEMBER.get(
+        LocalizableMessage message = ERR_STATICGROUP_REMOVE_MEMBER_NO_SUCH_MEMBER.get(
             String.valueOf(userDN), String.valueOf(groupEntryDN));
         throw new DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE, message);
       }
@@ -760,7 +760,7 @@
       modifyOperation.run();
       if (modifyOperation.getResultCode() != ResultCode.SUCCESS)
       {
-        Message message = ERR_STATICGROUP_REMOVE_MEMBER_UPDATE_FAILED.
+        LocalizableMessage message = ERR_STATICGROUP_REMOVE_MEMBER_UPDATE_FAILED.
             get(String.valueOf(userDN), String.valueOf(groupEntryDN),
                 modifyOperation.getErrorMessage().toString());
         throw new DirectoryException(modifyOperation.getResultCode(), message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProvider.java
index 2670d75..02c88f7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/StructuralObjectClassVirtualAttributeProvider.java
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.
         StructuralObjectClassVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -144,7 +144,7 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    Message message = ERR_VATTR_NOT_SEARCHABLE.get(
+    LocalizableMessage message = ERR_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
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 8552842..b99fa4a 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
@@ -34,7 +34,7 @@
 import java.util.*;
 import javax.security.auth.x500.X500Principal;
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.CertificateMapperCfg;
 import org.opends.server.admin.std.server
@@ -121,7 +121,7 @@
       int colonPos = lowerMap.indexOf(':');
       if (colonPos <= 0)
       {
-        Message message = ERR_SATUACM_INVALID_MAP_FORMAT.get(
+        LocalizableMessage message = ERR_SATUACM_INVALID_MAP_FORMAT.get(
             String.valueOf(configEntryDN), mapStr);
         throw new ConfigException(message);
       }
@@ -130,7 +130,7 @@
       String userAttrName = lowerMap.substring(colonPos+1).trim();
       if ((certAttrName.length() == 0) || (userAttrName.length() == 0))
       {
-        Message message = ERR_SATUACM_INVALID_MAP_FORMAT.get(
+        LocalizableMessage message = ERR_SATUACM_INVALID_MAP_FORMAT.get(
             String.valueOf(configEntryDN), mapStr);
         throw new ConfigException(message);
       }
@@ -141,7 +141,7 @@
 
       if (attributeMap.containsKey(certAttrName))
       {
-        Message message = ERR_SATUACM_DUPLICATE_CERT_ATTR.get(
+        LocalizableMessage message = ERR_SATUACM_DUPLICATE_CERT_ATTR.get(
             String.valueOf(configEntryDN), certAttrName);
         throw new ConfigException(message);
       }
@@ -150,7 +150,7 @@
            DirectoryServer.getAttributeType(userAttrName, false);
       if (userAttrType == null)
       {
-        Message message = ERR_SATUACM_NO_SUCH_ATTR.get(
+        LocalizableMessage message = ERR_SATUACM_NO_SUCH_ATTR.get(
             mapStr, String.valueOf(configEntryDN), userAttrName);
         throw new ConfigException(message);
       }
@@ -159,7 +159,7 @@
       {
         if (attrType.equals(userAttrType))
         {
-          Message message = ERR_SATUACM_DUPLICATE_USER_ATTR.get(
+          LocalizableMessage message = ERR_SATUACM_DUPLICATE_USER_ATTR.get(
               String.valueOf(configEntryDN), attrType.getNameOrOID());
           throw new ConfigException(message);
         }
@@ -183,7 +183,7 @@
         Backend b = DirectoryServer.getBackend(baseDN);
         if ((b != null) && (! b.isIndexed(t, IndexType.EQUALITY)))
         {
-          Message message = WARN_SATUACM_ATTR_UNINDEXED.get(
+          LocalizableMessage message = WARN_SATUACM_ATTR_UNINDEXED.get(
               configuration.dn().toString(),
               t.getNameOrOID(), b.getBackendID());
           ErrorLogger.logError(message);
@@ -227,7 +227,7 @@
     // Make sure that a peer certificate was provided.
     if ((certificateChain == null) || (certificateChain.length == 0))
     {
-      Message message = ERR_SATUACM_NO_PEER_CERTIFICATE.get();
+      LocalizableMessage message = ERR_SATUACM_NO_PEER_CERTIFICATE.get();
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
@@ -245,7 +245,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_SATUACM_PEER_CERT_NOT_X509.get(
+      LocalizableMessage message = ERR_SATUACM_PEER_CERT_NOT_X509.get(
           String.valueOf(certificateChain[0].getType()));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
@@ -262,7 +262,7 @@
     }
     catch (DirectoryException de)
     {
-      Message message = ERR_SATUACM_CANNOT_DECODE_SUBJECT_AS_DN.get(
+      LocalizableMessage message = ERR_SATUACM_CANNOT_DECODE_SUBJECT_AS_DN.get(
           peerName, de.getMessageObject());
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
                                    de);
@@ -290,7 +290,7 @@
 
     if (filterComps.isEmpty())
     {
-      Message message = ERR_SATUACM_NO_MAPPABLE_ATTRIBUTES.get(
+      LocalizableMessage message = ERR_SATUACM_NO_MAPPABLE_ATTRIBUTES.get(
            String.valueOf(peerDN));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
@@ -332,7 +332,7 @@
 
         case SIZE_LIMIT_EXCEEDED:
           // Multiple entries matched the filter.  This is not acceptable.
-          Message message = ERR_SATUACM_MULTIPLE_SEARCH_MATCHING_ENTRIES.get(
+          LocalizableMessage message = ERR_SATUACM_MULTIPLE_SEARCH_MATCHING_ENTRIES.get(
                         String.valueOf(peerDN));
           throw new DirectoryException(
                   ResultCode.INVALID_CREDENTIALS, message);
@@ -364,7 +364,7 @@
         }
         else
         {
-          Message message = ERR_SATUACM_MULTIPLE_MATCHING_ENTRIES.
+          LocalizableMessage message = ERR_SATUACM_MULTIPLE_MATCHING_ENTRIES.
               get(String.valueOf(peerDN), String.valueOf(userEntry.getName()),
                   String.valueOf(entry.getName()));
           throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
@@ -385,7 +385,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(CertificateMapperCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     SubjectAttributeToUserAttributeCertificateMapperCfg config =
          (SubjectAttributeToUserAttributeCertificateMapperCfg) configuration;
@@ -401,7 +401,7 @@
   public boolean isConfigurationChangeAcceptable(
               SubjectAttributeToUserAttributeCertificateMapperCfg
                    configuration,
-              List<Message> unacceptableReasons)
+              List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -488,7 +488,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get and validate the subject attribute to user attribute mappings.
@@ -595,7 +595,7 @@
         Backend b = DirectoryServer.getBackend(baseDN);
         if ((b != null) && (! b.isIndexed(t, IndexType.EQUALITY)))
         {
-          Message message = WARN_SATUACM_ATTR_UNINDEXED.get(
+          LocalizableMessage message = WARN_SATUACM_ATTR_UNINDEXED.get(
               configuration.dn().toString(),
               t.getNameOrOID(), b.getBackendID());
           messages.add(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapper.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapper.java
index b26c0ee..170dab1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapper.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SubjectDNToUserAttributeCertificateMapper.java
@@ -36,7 +36,7 @@
 import java.util.Set;
 import javax.security.auth.x500.X500Principal;
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.CertificateMapperCfg;
 import org.opends.server.admin.std.server
@@ -123,7 +123,7 @@
       Backend b = DirectoryServer.getBackend(baseDN);
       if ((b != null) && (! b.isIndexed(t, IndexType.EQUALITY)))
       {
-        Message message = WARN_SATUACM_ATTR_UNINDEXED.get(
+        LocalizableMessage message = WARN_SATUACM_ATTR_UNINDEXED.get(
             configuration.dn().toString(),
             t.getNameOrOID(), b.getBackendID());
         ErrorLogger.logError(message);
@@ -165,7 +165,7 @@
     // Make sure that a peer certificate was provided.
     if ((certificateChain == null) || (certificateChain.length == 0))
     {
-      Message message = ERR_SDTUACM_NO_PEER_CERTIFICATE.get();
+      LocalizableMessage message = ERR_SDTUACM_NO_PEER_CERTIFICATE.get();
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
@@ -183,7 +183,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_SDTUACM_PEER_CERT_NOT_X509.get(
+      LocalizableMessage message = ERR_SDTUACM_PEER_CERT_NOT_X509.get(
           String.valueOf(certificateChain[0].getType()));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
@@ -232,7 +232,7 @@
 
         case SIZE_LIMIT_EXCEEDED:
           // Multiple entries matched the filter.  This is not acceptable.
-          Message message = ERR_SDTUACM_MULTIPLE_SEARCH_MATCHING_ENTRIES.get(
+          LocalizableMessage message = ERR_SDTUACM_MULTIPLE_SEARCH_MATCHING_ENTRIES.get(
                         peerName);
           throw new DirectoryException(
                   ResultCode.INVALID_CREDENTIALS, message);
@@ -264,7 +264,7 @@
         }
         else
         {
-          Message message = ERR_SDTUACM_MULTIPLE_MATCHING_ENTRIES.
+          LocalizableMessage message = ERR_SDTUACM_MULTIPLE_MATCHING_ENTRIES.
               get(peerName, String.valueOf(userEntry.getName()),
                   String.valueOf(entry.getName()));
           throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
@@ -285,7 +285,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(CertificateMapperCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     SubjectDNToUserAttributeCertificateMapperCfg config =
          (SubjectDNToUserAttributeCertificateMapperCfg) configuration;
@@ -301,7 +301,7 @@
   public boolean isConfigurationChangeAcceptable(
                       SubjectDNToUserAttributeCertificateMapperCfg
                            configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
     return configAcceptable;
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 3cbd68f..6894ebb 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
@@ -34,7 +34,7 @@
 
 import javax.security.auth.x500.X500Principal;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.SubjectEqualsDNCertificateMapperCfg;
 import org.opends.server.api.CertificateMapper;
 import org.opends.server.config.ConfigException;
@@ -110,7 +110,7 @@
     // Make sure that a peer certificate was provided.
     if ((certificateChain == null) || (certificateChain.length == 0))
     {
-      Message message = ERR_SEDCM_NO_PEER_CERTIFICATE.get();
+      LocalizableMessage message = ERR_SEDCM_NO_PEER_CERTIFICATE.get();
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
 
@@ -128,7 +128,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_SEDCM_PEER_CERT_NOT_X509.get(
+      LocalizableMessage message = ERR_SEDCM_PEER_CERT_NOT_X509.get(
           String.valueOf(certificateChain[0].getType()));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
@@ -148,7 +148,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_SEDCM_CANNOT_DECODE_SUBJECT_AS_DN.get(
+      LocalizableMessage message = ERR_SEDCM_CANNOT_DECODE_SUBJECT_AS_DN.get(
           String.valueOf(peerPrincipal), getExceptionMessage(e));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
@@ -177,7 +177,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      Message message = ERR_SEDCM_CANNOT_GET_ENTRY.get(
+      LocalizableMessage message = ERR_SEDCM_CANNOT_GET_ENTRY.get(
           String.valueOf(subjectDN), de.getMessageObject());
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
                                    de);
@@ -189,7 +189,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_SEDCM_CANNOT_GET_ENTRY.get(
+      LocalizableMessage message = ERR_SEDCM_CANNOT_GET_ENTRY.get(
           String.valueOf(subjectDN), getExceptionMessage(e));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message,
                                    e);
@@ -202,7 +202,7 @@
 
     if (userEntry == null)
     {
-      Message message = ERR_SEDCM_NO_USER_FOR_DN.get(String.valueOf(subjectDN));
+      LocalizableMessage message = ERR_SEDCM_NO_USER_FOR_DN.get(String.valueOf(subjectDN));
       throw new DirectoryException(ResultCode.INVALID_CREDENTIALS, message);
     }
     else
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProvider.java
index a4d9340..a26ffb0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/SubschemaSubentryVirtualAttributeProvider.java
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.SubschemaSubentryVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
 import org.opends.server.core.DirectoryServer;
@@ -141,7 +141,7 @@
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
 
-    Message message = ERR_VATTR_NOT_SEARCHABLE.get(
+    LocalizableMessage message = ERR_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/TLSCapableConnection.java b/opendj3-server-dev/src/server/org/opends/server/extensions/TLSCapableConnection.java
index d3fd512..cb800a7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/TLSCapableConnection.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/TLSCapableConnection.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 
@@ -51,6 +51,6 @@
    * @return  <CODE>true</CODE> if TLS is available on the underlying client
    *          connection, or <CODE>false</CODE> if it is not.
    */
-  public boolean prepareTLS(MessageBuilder unavailableReason);
+  public boolean prepareTLS(LocalizableMessageBuilder unavailableReason);
 }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/TextNotificationMessageTemplateElement.java b/opendj3-server-dev/src/server/org/opends/server/extensions/TextNotificationMessageTemplateElement.java
index 0930b8f..ea66855 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/TextNotificationMessageTemplateElement.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/TextNotificationMessageTemplateElement.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
 
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.AccountStatusNotification;
 
 
@@ -60,7 +61,7 @@
   /**
    * {@inheritDoc}
    */
-  public void generateValue(MessageBuilder buffer,
+  public void generateValue(LocalizableMessageBuilder buffer,
                             AccountStatusNotification notification)
   {
     buffer.append(text);
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/TraditionalWorkQueue.java b/opendj3-server-dev/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
index 3e7cc1e..002ecad 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/TraditionalWorkQueue.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/TraditionalWorkQueue.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;
 
@@ -42,7 +42,7 @@
 import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.TraditionalWorkQueueCfg;
 import org.opends.server.api.WorkQueue;
@@ -223,7 +223,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR.get(
+        LocalizableMessage message = ERR_CONFIG_WORK_QUEUE_CANNOT_CREATE_MONITOR.get(
             String.valueOf(TraditionalWorkQueueMonitor.class),
             String.valueOf(e));
         logError(message);
@@ -241,7 +241,7 @@
    * {@inheritDoc}
    */
   @Override()
-  public void finalizeWorkQueue(Message reason)
+  public void finalizeWorkQueue(LocalizableMessage reason)
   {
     queueWriteLock.lock();
     try
@@ -371,7 +371,7 @@
     {
       if (shutdownRequested)
       {
-        Message message = WARN_OP_REJECTED_BY_SHUTDOWN.get();
+        LocalizableMessage message = WARN_OP_REJECTED_BY_SHUTDOWN.get();
         throw new DirectoryException(ResultCode.UNAVAILABLE, message);
       }
 
@@ -394,7 +394,7 @@
 
             if (shutdownRequested)
             {
-              Message message = WARN_OP_REJECTED_BY_SHUTDOWN.get();
+              LocalizableMessage message = WARN_OP_REJECTED_BY_SHUTDOWN.get();
               throw new DirectoryException(ResultCode.UNAVAILABLE, message);
             }
           }
@@ -407,7 +407,7 @@
 
           queueFullRejects.incrementAndGet();
 
-          Message message = WARN_OP_REJECTED_BY_QUEUE_INTERRUPT.get();
+          LocalizableMessage message = WARN_OP_REJECTED_BY_QUEUE_INTERRUPT.get();
           throw new DirectoryException(ResultCode.BUSY, message);
         }
       }
@@ -417,7 +417,7 @@
         {
           queueFullRejects.incrementAndGet();
 
-          Message message = WARN_OP_REJECTED_BY_QUEUE_FULL.get(maxCapacity);
+          LocalizableMessage message = WARN_OP_REJECTED_BY_QUEUE_FULL.get(maxCapacity);
           throw new DirectoryException(ResultCode.BUSY, message);
         }
       }
@@ -487,7 +487,7 @@
 
       if (numFailures > MAX_RETRY_COUNT)
       {
-        Message message = ERR_CONFIG_WORK_QUEUE_TOO_MANY_FAILURES.get(Thread
+        LocalizableMessage message = ERR_CONFIG_WORK_QUEUE_TOO_MANY_FAILURES.get(Thread
             .currentThread().getName(), numFailures, MAX_RETRY_COUNT);
         logError(message);
 
@@ -676,7 +676,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(
-      TraditionalWorkQueueCfg configuration, List<Message> unacceptableReasons)
+      TraditionalWorkQueueCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -690,7 +690,7 @@
   public ConfigChangeResult applyConfigurationChange(
       TraditionalWorkQueueCfg configuration)
   {
-    ArrayList<Message> resultMessages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> resultMessages = new ArrayList<LocalizableMessage>();
     int newNumThreads =
         computeNumWorkerThreads(configuration.getNumWorkerThreads());
     int newMaxCapacity = configuration.getMaxWorkQueueCapacity();
@@ -789,7 +789,7 @@
         // re-interrupt this thread.
         Thread.currentThread().interrupt();
 
-        Message message = WARN_OP_REJECTED_BY_QUEUE_INTERRUPT.get();
+        LocalizableMessage message = WARN_OP_REJECTED_BY_QUEUE_INTERRUPT.get();
         CancelRequest cancelRequest = new CancelRequest(true, message);
         if (pendingOperation != null)
         {
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/TraditionalWorkerThread.java b/opendj3-server-dev/src/server/org/opends/server/extensions/TraditionalWorkerThread.java
index d255608..91811fc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/TraditionalWorkerThread.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/TraditionalWorkerThread.java
@@ -22,14 +22,14 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
 
 import java.util.Map;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -180,7 +180,7 @@
 
         try
         {
-          Message message = ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION.
+          LocalizableMessage message = ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION.
               get(getName(), String.valueOf(operation),
                   stackTraceToSingleLineString(t));
           logError(message);
@@ -206,7 +206,7 @@
 
         try
         {
-          Message message = ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION.get(getName(),
+          LocalizableMessage message = ERR_UNCAUGHT_WORKER_THREAD_EXCEPTION.get(getName(),
                                       String.valueOf(operation),
                                       stackTraceToSingleLineString(t));
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/TripleDESPasswordStorageScheme.java b/opendj3-server-dev/src/server/org/opends/server/extensions/TripleDESPasswordStorageScheme.java
index ddfaa4c..61d13a2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/TripleDESPasswordStorageScheme.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/TripleDESPasswordStorageScheme.java
@@ -28,7 +28,7 @@
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.TripleDESPasswordStorageSchemeCfg;
 import org.opends.server.api.PasswordStorageScheme;
 import org.opends.server.config.ConfigException;
@@ -130,7 +130,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_3DES,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_3DES,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -173,7 +173,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_3DES,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_ENCRYPT.get(STORAGE_SCHEME_NAME_3DES,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -247,7 +247,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message m = ERR_PWSCHEME_CANNOT_DECRYPT.get(STORAGE_SCHEME_NAME_3DES,
+      LocalizableMessage m = ERR_PWSCHEME_CANNOT_DECRYPT.get(STORAGE_SCHEME_NAME_3DES,
                                                   getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    m, e);
@@ -275,7 +275,7 @@
   public ByteString encodeAuthPassword(ByteSequence plaintext)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
@@ -303,7 +303,7 @@
                                                   String authValue)
          throws DirectoryException
   {
-    Message message =
+    LocalizableMessage message =
         ERR_PWSCHEME_DOES_NOT_SUPPORT_AUTH_PASSWORD.get(getStorageSchemeName());
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidator.java b/opendj3-server-dev/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidator.java
index e68fbbf..258ef07 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidator.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/UniqueCharactersPasswordValidator.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -40,7 +40,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
 import static org.opends.messages.ExtensionMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -102,7 +102,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      MessageBuilder invalidReason)
+                                      LocalizableMessageBuilder invalidReason)
   {
     // Get a handle to the current configuration and see if we need to count
     // the number of unique characters in the password.
@@ -138,7 +138,7 @@
     // number of allowed unique characters, then we will reject the password.
     if (passwordCharacters.size() < minUniqueCharacters)
     {
-      Message message = ERR_UNIQUECHARS_VALIDATOR_NOT_ENOUGH_UNIQUE_CHARS.get(
+      LocalizableMessage message = ERR_UNIQUECHARS_VALIDATOR_NOT_ENOUGH_UNIQUE_CHARS.get(
               minUniqueCharacters);
       invalidReason.append(message);
       return false;
@@ -154,7 +154,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       UniqueCharactersPasswordValidatorCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // All of the necessary validation should have been performed automatically,
     // so if we get to this point then the new configuration will be acceptable.
@@ -171,7 +171,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     // For this password validator, we will always be able to successfully apply
     // the new configuration.
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/UserAttributeNotificationMessageTemplateElement.java b/opendj3-server-dev/src/server/org/opends/server/extensions/UserAttributeNotificationMessageTemplateElement.java
index 725fdbd..18b557d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/UserAttributeNotificationMessageTemplateElement.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/UserAttributeNotificationMessageTemplateElement.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -29,7 +30,7 @@
 
 import java.util.List;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.AccountStatusNotification;
 import org.opends.server.types.Attribute;
 import org.opends.server.types.AttributeType;
@@ -67,7 +68,7 @@
   /**
    * {@inheritDoc}
    */
-  public void generateValue(MessageBuilder buffer,
+  public void generateValue(LocalizableMessageBuilder buffer,
                             AccountStatusNotification notification)
   {
     Entry userEntry = notification.getUserEntry();
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/UserDNNotificationMessageTemplateElement.java b/opendj3-server-dev/src/server/org/opends/server/extensions/UserDNNotificationMessageTemplateElement.java
index 66681c2..b6673d6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/UserDNNotificationMessageTemplateElement.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/UserDNNotificationMessageTemplateElement.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
 
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.AccountStatusNotification;
 
 
@@ -52,7 +53,7 @@
   /**
    * {@inheritDoc}
    */
-  public void generateValue(MessageBuilder buffer,
+  public void generateValue(LocalizableMessageBuilder buffer,
                             AccountStatusNotification notification)
   {
     buffer.append(notification.getUserDN().toString());
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProvider.java
index f5c2631..f36b892 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/UserDefinedVirtualAttributeProvider.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.extensions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -177,7 +177,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       UserDefinedVirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // The new configuration should always be acceptable.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/extensions/VirtualStaticGroup.java b/opendj3-server-dev/src/server/org/opends/server/extensions/VirtualStaticGroup.java
index 0675799..0028df0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/extensions/VirtualStaticGroup.java
+++ b/opendj3-server-dev/src/server/org/opends/server/extensions/VirtualStaticGroup.java
@@ -32,7 +32,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.VirtualStaticGroupImplementationCfg;
 import org.opends.server.api.Group;
 import org.opends.server.core.DirectoryServer;
@@ -151,7 +151,7 @@
         {
           if (targetDN != null)
           {
-            Message message = ERR_VIRTUAL_STATIC_GROUP_MULTIPLE_TARGETS.get(
+            LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_MULTIPLE_TARGETS.get(
                 String.valueOf(groupEntry.getName()));
             throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION,
                                          message);
@@ -168,7 +168,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, de);
             }
 
-            Message message = ERR_VIRTUAL_STATIC_GROUP_CANNOT_DECODE_TARGET.
+            LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_CANNOT_DECODE_TARGET.
                 get(v.getValue().toString(),
                     String.valueOf(groupEntry.getName()),
                     de.getMessageObject());
@@ -181,7 +181,7 @@
 
     if (targetDN == null)
     {
-      Message message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET.get(
+      LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET.get(
           String.valueOf(groupEntry.getName()));
       throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION, message);
     }
@@ -289,7 +289,7 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Virtual static groups don't support nesting.
-    Message message = ERR_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED.get();
     throw new UnsupportedOperationException(message.toString());
   }
 
@@ -303,7 +303,7 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Virtual static groups don't support nesting.
-    Message message = ERR_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_NESTING_NOT_SUPPORTED.get();
     throw new UnsupportedOperationException(message.toString());
   }
 
@@ -325,14 +325,14 @@
          DirectoryServer.getGroupManager().getGroupInstance(targetGroupDN);
     if (targetGroup == null)
     {
-      Message message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
+      LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
           String.valueOf(targetGroupDN), String.valueOf(groupEntryDN));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
     else if (targetGroup instanceof VirtualStaticGroup)
     {
-      Message message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
+      LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
           String.valueOf(groupEntryDN), String.valueOf(targetGroupDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -360,14 +360,14 @@
          DirectoryServer.getGroupManager().getGroupInstance(targetGroupDN);
     if (targetGroup == null)
     {
-      Message message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
+      LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
           String.valueOf(targetGroupDN), String.valueOf(groupEntryDN));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
     else if (targetGroup instanceof VirtualStaticGroup)
     {
-      Message message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
+      LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
           String.valueOf(groupEntryDN), String.valueOf(targetGroupDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -390,14 +390,14 @@
          DirectoryServer.getGroupManager().getGroupInstance(targetGroupDN);
     if (targetGroup == null)
     {
-      Message message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
+      LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
           String.valueOf(targetGroupDN), String.valueOf(groupEntryDN));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
     else if (targetGroup instanceof VirtualStaticGroup)
     {
-      Message message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
+      LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
           String.valueOf(groupEntryDN), String.valueOf(targetGroupDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -421,14 +421,14 @@
          DirectoryServer.getGroupManager().getGroupInstance(targetGroupDN);
     if (targetGroup == null)
     {
-      Message message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
+      LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_NO_TARGET_GROUP.get(
           String.valueOf(targetGroupDN), String.valueOf(groupEntryDN));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                    message);
     }
     else if (targetGroup instanceof VirtualStaticGroup)
     {
-      Message message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
+      LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_TARGET_CANNOT_BE_VIRTUAL.get(
           String.valueOf(groupEntryDN), String.valueOf(targetGroupDN));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -459,7 +459,7 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Virtual static groups don't support altering the member list.
-    Message message = ERR_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED.
         get(String.valueOf(groupEntryDN));
     throw new UnsupportedOperationException(message.toString());
   }
@@ -474,7 +474,7 @@
          throws UnsupportedOperationException, DirectoryException
   {
     // Virtual static groups don't support altering the member list.
-    Message message = ERR_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED.
+    LocalizableMessage message = ERR_VIRTUAL_STATIC_GROUP_ALTERING_MEMBERS_NOT_SUPPORTED.
         get(String.valueOf(groupEntryDN));
     throw new UnsupportedOperationException(message.toString());
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/AbstractLogger.java b/opendj3-server-dev/src/server/org/opends/server/loggers/AbstractLogger.java
index 830eccf..318f41b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/AbstractLogger.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/AbstractLogger.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.loggers;
 
@@ -34,8 +34,8 @@
 import java.util.List;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageDescriptor.Arg3;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageDescriptor.Arg3;
 import org.opends.server.admin.ClassPropertyDefinition;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -44,6 +44,7 @@
 import org.opends.server.api.LogPublisher;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
+import org.opends.server.core.ServerContext;
 import org.opends.server.loggers.debug.DebugLogger;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
@@ -131,7 +132,7 @@
      */
     public synchronized void removeAllLogPublishers()
     {
-      StaticUtils.close((Collection) logPublishers);
+      StaticUtils.close(logPublishers);
       logPublishers.clear();
     }
 
@@ -165,6 +166,8 @@
   private final Arg3<CharSequence, CharSequence, CharSequence>
       invalidLoggerClassErrorMessage;
 
+  ServerContext serverContext;
+
   /**
    * The constructor for this class.
    *
@@ -186,6 +189,8 @@
    * Initializes all the log publishers.
    *
    * @param configs The log publisher configurations.
+   * @param serverContext
+   *            The server context.
    * @throws ConfigException
    *           If an unrecoverable problem arises in the process of
    *           performing the initialization as a result of the server
@@ -194,9 +199,10 @@
    *           If a problem occurs during initialization that is not
    *           related to the server configuration.
    */
-  public void initializeLogger(List<C> configs)
+  public void initializeLogger(List<C> configs, ServerContext serverContext)
       throws ConfigException, InitializationException
   {
+    this.serverContext = serverContext;
     for (C config : configs)
     {
       config.addChangeListener((ConfigurationChangeListener) this);
@@ -213,7 +219,7 @@
    */
   @Override
   public boolean isConfigurationAddAcceptable(C config,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return !config.isEnabled() ||
         isJavaClassAcceptable(config, unacceptableReasons);
@@ -224,7 +230,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(C config,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return !config.isEnabled() ||
         isJavaClassAcceptable(config, unacceptableReasons);
@@ -239,7 +245,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     config.addChangeListener((ConfigurationChangeListener) this);
 
@@ -297,7 +303,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     P logPublisher = findLogPublisher(config.dn());
     if(logPublisher == null)
@@ -338,7 +344,7 @@
    */
   @Override
   public boolean isConfigurationDeleteAcceptable(C config,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return findLogPublisher(config.dn()) != null;
   }
@@ -367,7 +373,7 @@
   }
 
   private boolean isJavaClassAcceptable(C config,
-                                        List<Message> unacceptableReasons)
+                                        List<LocalizableMessage> unacceptableReasons)
   {
     String className = config.getJavaClass();
     ClassPropertyDefinition pd = getJavaClassPropertyDefinition();
@@ -377,7 +383,7 @@
       // The class is valid as far as we can tell.
       return publisher.isConfigurationAcceptable(config, unacceptableReasons);
     } catch (Exception e) {
-      Message message =
+      LocalizableMessage message =
           invalidLoggerClassErrorMessage.get(className, config.dn().toString(),
               String.valueOf(e));
       unacceptableReasons.add(message);
@@ -392,13 +398,13 @@
     try {
       // Load the class and cast it to a LogPublisher.
       P logPublisher = pd.loadClass(className, logPublisherClass).newInstance();
-      logPublisher.initializeLogPublisher(config);
+      logPublisher.initializeLogPublisher(config, serverContext);
       // The log publisher has been successfully initialized.
       return logPublisher;
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           invalidLoggerClassErrorMessage.get(className, config.dn().toString(),
               String.valueOf(e));
       throw new ConfigException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/AbstractTextAccessLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/loggers/AbstractTextAccessLogPublisher.java
index df0b1b8..08e196e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/AbstractTextAccessLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/AbstractTextAccessLogPublisher.java
@@ -36,8 +36,8 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageDescriptor.Arg2;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageDescriptor.Arg2;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
@@ -1047,7 +1047,7 @@
     @Override
     public final boolean isConfigurationChangeAcceptable(
         final AccessLogPublisherCfg configuration,
-        final List<Message> unacceptableReasons)
+        final List<LocalizableMessage> unacceptableReasons)
     {
       return true;
     }
@@ -1113,7 +1113,7 @@
     @Override
     public boolean isConfigurationAddAcceptable(
         final AccessLogFilteringCriteriaCfg configuration,
-        final List<Message> unacceptableReasons)
+        final List<LocalizableMessage> unacceptableReasons)
     {
       return validateConfiguration(configuration, unacceptableReasons);
     }
@@ -1126,7 +1126,7 @@
     @Override
     public boolean isConfigurationChangeAcceptable(
         final AccessLogFilteringCriteriaCfg configuration,
-        final List<Message> unacceptableReasons)
+        final List<LocalizableMessage> unacceptableReasons)
     {
       return validateConfiguration(configuration, unacceptableReasons);
     }
@@ -1139,7 +1139,7 @@
     @Override
     public boolean isConfigurationDeleteAcceptable(
         final AccessLogFilteringCriteriaCfg configuration,
-        final List<Message> unacceptableReasons)
+        final List<LocalizableMessage> unacceptableReasons)
     {
       // Always allow criteria to be deleted.
       return true;
@@ -1149,7 +1149,7 @@
 
     private boolean validateConfiguration(
         final AccessLogFilteringCriteriaCfg configuration,
-        final List<Message> unacceptableReasons)
+        final List<LocalizableMessage> unacceptableReasons)
     {
       try
       {
@@ -1327,7 +1327,7 @@
    *         access log publisher, or {@code false} if not.
    */
   protected final boolean isFilterConfigurationAcceptable(final T config,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     for (final String criteriaName : config.listAccessLogFilteringCriteria())
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/AccessLogger.java b/opendj3-server-dev/src/server/org/opends/server/loggers/AccessLogger.java
index 18127d4..4c08083 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/AccessLogger.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/AccessLogger.java
@@ -22,14 +22,14 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.loggers;
 import static org.opends.messages.ConfigMessages.*;
 
 import java.util.Collection;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.ClassPropertyDefinition;
 import org.opends.server.admin.std.meta.AccessLogPublisherCfgDefn;
 import org.opends.server.admin.std.server.AccessLogPublisherCfg;
@@ -162,7 +162,7 @@
    */
   public static void logDisconnect(ClientConnection clientConnection,
                                    DisconnectReason disconnectReason,
-                                   Message message)
+                                   LocalizableMessage message)
   {
     for (AccessLogPublisher<?> publisher : getAccessLogPublishers())
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/AsynchronousTextWriter.java b/opendj3-server-dev/src/server/org/opends/server/loggers/AsynchronousTextWriter.java
index 35be897..f5b6dc5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/AsynchronousTextWriter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/AsynchronousTextWriter.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.loggers;
 
@@ -31,7 +31,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.api.ServerShutdownListener;
 import org.opends.server.core.DirectoryServer;
@@ -220,7 +220,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void processServerShutdown(Message reason)
+  public void processServerShutdown(LocalizableMessage reason)
   {
     // Don't shutdown the wrapped writer on server shutdown as it
     // might get more write requests before the log publishers are
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/ErrorLogger.java b/opendj3-server-dev/src/server/org/opends/server/loggers/ErrorLogger.java
index b1adbcb..1aebaae 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/ErrorLogger.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/ErrorLogger.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.loggers;
 
 import static org.opends.messages.ConfigMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
+import org.opends.messages.Severity;
 import org.opends.server.admin.ClassPropertyDefinition;
 import org.opends.server.admin.std.meta.ErrorLogPublisherCfgDefn;
 import org.opends.server.admin.std.server.ErrorLogPublisherCfg;
@@ -124,11 +125,29 @@
    *
    * @param  message   The message to be logged.
    */
-  public static void logError(Message message)
+  // TODO : remove
+  public static void logError(LocalizableMessage message)
+  {
+    log("category", Severity.SEVERE_ERROR, message, null);
+  }
+
+  /**
+   * Writes a message to the error log using the provided information.
+   *
+   * @param category
+   *          The category of the message.
+   * @param severity
+   *          The severity of the message.
+   * @param message
+   *          The message to be logged.
+   * @param exception
+   *          The exception to be logged. May be {@code null}.
+   */
+  public static void log(String category, Severity severity, LocalizableMessage message, Throwable exception)
   {
     for (ErrorLogPublisher publisher : loggerStorage.getLogPublishers())
     {
-      publisher.logError(message);
+      publisher.log(category, severity, message, exception);
     }
 
     if (Thread.currentThread() instanceof DirectoryThread)
@@ -137,8 +156,39 @@
       Task task = thread.getAssociatedTask();
       if (task != null)
       {
-        task.addLogMessage(message);
+        task.addLogMessage(severity, message, exception);
       }
     }
   }
+
+  /**
+   * Check if logging is enabled for the provided category and severity.
+   *
+   * @param category
+   *            The category of logging event.
+   * @param severity
+   *            The severity of logging event.
+   * @return {@code true} if logger is enabled
+   */
+  public static boolean isEnabledFor(String category, Severity severity)
+  {
+    if (Thread.currentThread() instanceof DirectoryThread)
+    {
+      DirectoryThread thread = (DirectoryThread) Thread.currentThread();
+      Task task = thread.getAssociatedTask();
+      if (task != null)
+      {
+        return true;
+      }
+    }
+    for (ErrorLogPublisher publisher : loggerStorage.getLogPublishers())
+    {
+      if (publisher.isEnabledFor(category, severity))
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/FileNumberRetentionPolicy.java b/opendj3-server-dev/src/server/org/opends/server/loggers/FileNumberRetentionPolicy.java
index 800f3e3..532d398 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/FileNumberRetentionPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/FileNumberRetentionPolicy.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.loggers;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.LoggerMessages.ERR_LOGGER_ERROR_LISTING_FILES;
 
 import org.opends.server.admin.std.server.FileCountLogRetentionPolicyCfg;
@@ -76,7 +77,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       FileCountLogRetentionPolicyCfg config,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -91,7 +92,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     this.numFiles = config.getNumberOfFiles();
     this.config = config;
@@ -108,7 +109,7 @@
     File[] files = fileNamingPolicy.listFiles();
     if(files == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LOGGER_ERROR_LISTING_FILES.get(
               fileNamingPolicy.getInitialName().toString());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java b/opendj3-server-dev/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java
index 96a8f6d..e6aa011 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/FixedTimeRotationPolicy.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.loggers;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.*;
 
@@ -79,7 +80,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      FixedTimeLogRotationPolicyCfg config, List<Message> unacceptableReasons)
+      FixedTimeLogRotationPolicyCfg config, List<LocalizableMessage> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -94,7 +95,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     rotationTimes = new int[config.getTimeOfDay().size()];
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java b/opendj3-server-dev/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
index 7a9676e..ac05b8a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/FreeDiskSpaceRetentionPolicy.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.loggers;
 
@@ -35,7 +35,7 @@
 import java.util.Arrays;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.FreeDiskSpaceLogRetentionPolicyCfg;
 import org.opends.server.core.DirectoryServer;
@@ -80,7 +80,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       FreeDiskSpaceLogRetentionPolicyCfg config,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -96,7 +96,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     this.freeDiskSpace = config.getFreeDiskSpace();
     this.config = config;
@@ -114,7 +114,7 @@
     File[] files = fileNamingPolicy.listFiles();
     if(files == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LOGGER_ERROR_LISTING_FILES.get(
               fileNamingPolicy.getInitialName().toString());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
@@ -139,7 +139,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message =
+      LocalizableMessage message =
           ERR_LOGGER_ERROR_OBTAINING_FREE_SPACE.get(files[0].toString(),
               stackTraceToSingleLineString(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/LogPublisherErrorHandler.java b/opendj3-server-dev/src/server/org/opends/server/loggers/LogPublisherErrorHandler.java
index ae4548d..540f9ea 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/LogPublisherErrorHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/LogPublisherErrorHandler.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.loggers;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.DN;
 
@@ -67,7 +68,7 @@
   {
     if(!writeErroroccurred)
     {
-      Message msg = ERR_LOGGER_ERROR_WRITING_RECORD.get(
+      LocalizableMessage msg = ERR_LOGGER_ERROR_WRITING_RECORD.get(
               publisherConfigDN.toString(),
               stackTraceToSingleLineString(ex));
       System.err.println(msg);
@@ -83,7 +84,7 @@
    */
   public void handleOpenError(File file, Throwable ex)
   {
-    Message msg = ERR_LOGGER_ERROR_OPENING_FILE.get(file.toString(),
+    LocalizableMessage msg = ERR_LOGGER_ERROR_OPENING_FILE.get(file.toString(),
                             publisherConfigDN.toString(),
                             stackTraceToSingleLineString(ex));
     System.err.println(msg);
@@ -96,7 +97,7 @@
    */
   public void handleCloseError(Throwable ex)
   {
-    Message msg = ERR_LOGGER_ERROR_CLOSING_FILE.get(
+    LocalizableMessage msg = ERR_LOGGER_ERROR_CLOSING_FILE.get(
             publisherConfigDN.toString(),
             stackTraceToSingleLineString(ex));
     System.err.println(msg);
@@ -109,7 +110,7 @@
    */
   public void handleFlushError(Throwable ex)
   {
-    Message msg = ERR_LOGGER_ERROR_FLUSHING_BUFFER.get(
+    LocalizableMessage msg = ERR_LOGGER_ERROR_FLUSHING_BUFFER.get(
             publisherConfigDN.toString(),
             stackTraceToSingleLineString(ex));
     System.err.println(msg);
@@ -124,7 +125,7 @@
    */
   public void handleDeleteError(RetentionPolicy retentionPolicy, Throwable ex)
   {
-    Message msg = ERR_LOGGER_ERROR_ENFORCING_RETENTION_POLICY.get(
+    LocalizableMessage msg = ERR_LOGGER_ERROR_ENFORCING_RETENTION_POLICY.get(
             retentionPolicy.toString(), publisherConfigDN.toString(),
             stackTraceToSingleLineString(ex));
     System.err.println(msg);
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/MultifileTextWriter.java b/opendj3-server-dev/src/server/org/opends/server/loggers/MultifileTextWriter.java
index bfa7f2a..a960e30 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/MultifileTextWriter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/MultifileTextWriter.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.loggers;
 
@@ -39,7 +40,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.messages.LoggerMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.*;
 import java.util.concurrent.CopyOnWriteArrayList;
@@ -198,7 +199,7 @@
       {
         if(!FilePermission.setPermissions(file, filePermissions))
         {
-          Message message = WARN_LOGGER_UNABLE_SET_PERMISSIONS.get(
+          LocalizableMessage message = WARN_LOGGER_UNABLE_SET_PERMISSIONS.get(
               filePermissions.toString(), file.toString());
           ErrorLogger.logError(message);
         }
@@ -206,7 +207,7 @@
       catch(Exception e)
       {
         // Log an warning that the permissions were not set.
-        Message message = WARN_LOGGER_SET_PERMISSION_FAILED.get(
+        LocalizableMessage message = WARN_LOGGER_SET_PERMISSION_FAILED.get(
             file.toString(), stackTraceToSingleLineString(e));
         ErrorLogger.logError(message);
       }
@@ -355,7 +356,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      SizeLimitLogRotationPolicyCfg config, List<Message> unacceptableReasons)
+      SizeLimitLogRotationPolicyCfg config, List<LocalizableMessage> unacceptableReasons)
   {
     // This should always be ok
     return true;
@@ -396,7 +397,7 @@
     sizeLimit = newSizeLimit;
 
     return new ConfigChangeResult(ResultCode.SUCCESS, false,
-                                  new ArrayList<Message>());
+                                  new ArrayList<LocalizableMessage>());
   }
 
   /**
@@ -501,7 +502,7 @@
    *
    * @param  reason  The human-readable reason for the shutdown.
    */
-  public void processServerShutdown(Message reason)
+  public void processServerShutdown(LocalizableMessage reason)
   {
     stopRequested = true;
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/OpenDJLoggerAdapter.java b/opendj3-server-dev/src/server/org/opends/server/loggers/OpenDJLoggerAdapter.java
new file mode 100644
index 0000000..7cb4a8e
--- /dev/null
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/OpenDJLoggerAdapter.java
@@ -0,0 +1,567 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *      Copyright 2014 ForgeRock AS.
+ */
+package org.opends.server.loggers;
+
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.slf4j.LocalizedMarker;
+import org.opends.messages.Severity;
+import org.opends.server.loggers.debug.DebugLogger;
+import org.opends.server.loggers.debug.DebugTracer;
+import org.opends.server.types.DebugLogLevel;
+import org.slf4j.Logger;
+import org.slf4j.Marker;
+
+/**
+ * OpenDJ implementation of a SLF4J Logger.
+ * <p>
+ * Log calls at trace level are redirected to {@code DebugLogger}, while calls
+ * at other levels are redirected to {@code ErrorLogger}.
+ * <p>
+ * Trace level calls are accepted with no Marker argument, while calls at other
+ * level must be done with a Marker expected to be an instance of
+ * {@code LocalizedMarker}.
+ */
+public final class OpenDJLoggerAdapter implements Logger
+{
+  /** Name of logger, used as the category. */
+  private final String name;
+
+  /** The tracer associated to this logger. */
+  private final DebugTracer tracer;
+
+  /**
+   * Creates a new logger with the provided name.
+   *
+   * @param name
+   *          The name of logger.
+   */
+  public OpenDJLoggerAdapter(String name)
+  {
+    this.name = name;
+    this.tracer = DebugLogger.getTracer(name);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public String getName()
+  {
+    return name;
+  }
+
+  /** Trace with message only. */
+  private void logTraceMessage(String msg)
+  {
+    tracer.debugMessage(DebugLogLevel.VERBOSE, msg);
+
+  }
+
+  /** Trace with message and exception. */
+  private void logTraceException(String message, Throwable t)
+  {
+    tracer.debugCaught(DebugLogLevel.VERBOSE, t);
+  }
+
+  /**
+   * Log a message to {@code ErrorLogger} with the provided severity, extracting
+   * {@code LocalizableMessage} from the provided {@code Marker marker}
+   * argument.
+   *
+   * @param marker
+   *          The marker, expected to be an instance of {@code LocalizedMarker}
+   *          class, from which message to log is extracted.
+   * @param severity
+   *          The severity to use when logging message.
+   * @param throwable
+   *          Exception to log. May be {@code null}.
+   */
+  private void logError(Marker marker,
+      Severity severity, Throwable throwable)
+  {
+    if (marker instanceof LocalizedMarker)
+    {
+      LocalizableMessage message = ((LocalizedMarker) marker).getMessage();
+      ErrorLogger.log(name, severity, message, throwable);
+    }
+    else {
+      throw new IllegalStateException("Expecting the marker to be an instance of LocalizedMarker");
+    }
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean isTraceEnabled()
+  {
+    return DebugLogger.debugEnabled() && tracer.enabled();
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void trace(String msg)
+  {
+    logTraceMessage(msg);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void trace(Marker marker, String msg)
+  {
+    logTraceMessage(msg);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void trace(String msg, Throwable t)
+  {
+    logTraceException(msg, t);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void trace(Marker marker, String msg, Throwable t)
+  {
+    logTraceException(msg, t);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean isDebugEnabled()
+  {
+    return ErrorLogger.isEnabledFor(name, Severity.INFORMATION);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void debug(Marker marker, String msg)
+  {
+    logError(marker, Severity.INFORMATION, null);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void debug(Marker marker, String msg, Throwable t)
+  {
+    logError(marker, Severity.INFORMATION, t);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean isInfoEnabled()
+  {
+    return ErrorLogger.isEnabledFor(name, Severity.NOTICE);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void info(Marker marker, String msg)
+  {
+    logError(marker, Severity.NOTICE, null);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void info(Marker marker, String msg, Throwable t)
+  {
+    logError(marker, Severity.NOTICE, t);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean isWarnEnabled()
+  {
+    return ErrorLogger.isEnabledFor(name, Severity.SEVERE_WARNING);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void warn(Marker marker, String msg)
+  {
+    logError(marker, Severity.SEVERE_WARNING, null);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void warn(Marker marker, String msg, Throwable t)
+  {
+    logError(marker, Severity.SEVERE_WARNING, t);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean isErrorEnabled()
+  {
+    return ErrorLogger.isEnabledFor(name, Severity.FATAL_ERROR);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void error(Marker marker, String msg)
+  {
+    logError(marker, Severity.FATAL_ERROR, null);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void error(Marker marker, String msg, Throwable t)
+  {
+    logError(marker, Severity.FATAL_ERROR, t);
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean isTraceEnabled(Marker marker)
+  {
+    return isTraceEnabled();
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean isDebugEnabled(Marker marker)
+  {
+    return isDebugEnabled();
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean isInfoEnabled(Marker marker)
+  {
+    return isInfoEnabled();
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean isWarnEnabled(Marker marker)
+  {
+    return isWarnEnabled();
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public boolean isErrorEnabled(Marker marker)
+  {
+    return isErrorEnabled();
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void trace(String format, Object arg)
+  {
+    throw new UnsupportedOperationException("Use #trace(String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void trace(String format, Object arg1, Object arg2)
+  {
+    throw new UnsupportedOperationException("Use #trace(String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void trace(String format, Object... argArray)
+  {
+    throw new UnsupportedOperationException("Use #trace(String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void trace(Marker marker, String format, Object arg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #trace(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void trace(Marker marker, String format, Object arg1, Object arg2)
+  {
+    throw new UnsupportedOperationException(
+        "Use #trace(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void trace(Marker marker, String format, Object... argArray)
+  {
+    throw new UnsupportedOperationException(
+        "Use #trace(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void debug(String msg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #debug(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void debug(String format, Object arg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #debug(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void debug(String format, Object arg1, Object arg2)
+  {
+    throw new UnsupportedOperationException(
+        "Use #debug(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void debug(String format, Object... argArray)
+  {
+    throw new UnsupportedOperationException(
+        "Use #debug(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void debug(String msg, Throwable t)
+  {
+    throw new UnsupportedOperationException(
+        "Use #debug(Marker, String, Throwable) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void debug(Marker marker, String format, Object arg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #debug(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void debug(Marker marker, String format, Object arg1, Object arg2)
+  {
+    throw new UnsupportedOperationException(
+        "Use #debug(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void debug(Marker marker, String format, Object... arguments)
+  {
+    throw new UnsupportedOperationException(
+        "Use #debug(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void info(String msg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #info(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void info(String format, Object arg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #info(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void info(String format, Object arg1, Object arg2)
+  {
+    throw new UnsupportedOperationException(
+        "Use #info(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void info(String format, Object... argArray)
+  {
+    throw new UnsupportedOperationException(
+        "Use #info(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void info(String msg, Throwable t)
+  {
+    throw new UnsupportedOperationException(
+        "Use #info(Marker, String, Throwable) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void info(Marker marker, String format, Object arg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #info(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void info(Marker marker, String format, Object arg1, Object arg2)
+  {
+    throw new UnsupportedOperationException(
+        "Use #info(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void info(Marker marker, String format, Object... arguments)
+  {
+    throw new UnsupportedOperationException(
+        "Use #info(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void warn(String msg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #warn(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void warn(String format, Object arg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #warn(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void warn(String format, Object arg1, Object arg2)
+  {
+    throw new UnsupportedOperationException(
+        "Use #warn(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void warn(String format, Object... argArray)
+  {
+    throw new UnsupportedOperationException(
+        "Use #warn(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void warn(String msg, Throwable t)
+  {
+    throw new UnsupportedOperationException(
+        "Use #warn(Marker, String, Throwable) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void warn(Marker marker, String format, Object arg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #warn(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void warn(Marker marker, String format, Object arg1, Object arg2)
+  {
+    throw new UnsupportedOperationException(
+        "Use #warn(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void warn(Marker marker, String format, Object... arguments)
+  {
+    throw new UnsupportedOperationException(
+        "Use #warn(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void error(String msg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #error(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void error(String format, Object arg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #error(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void error(String format, Object arg1, Object arg2)
+  {
+    throw new UnsupportedOperationException(
+        "Use #error(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void error(String format, Object... arguments)
+  {
+    throw new UnsupportedOperationException(
+        "Use #error(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void error(String msg, Throwable t)
+  {
+    throw new UnsupportedOperationException(
+        "Use #error(Marker, String, Throwable) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void error(Marker marker, String format, Object arg)
+  {
+    throw new UnsupportedOperationException(
+        "Use #error(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void error(Marker marker, String format, Object arg1, Object arg2)
+  {
+    throw new UnsupportedOperationException(
+        "Use #error(Marker, String) instead.");
+  }
+
+  /** {@inheritDoc} */
+  @Override
+  public void error(Marker marker, String format, Object... arguments)
+  {
+    throw new UnsupportedOperationException(
+        "Use #error(Marker, String) instead.");
+  }
+}
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/OpenDJLoggerFactory.java b/opendj3-server-dev/src/server/org/opends/server/loggers/OpenDJLoggerFactory.java
new file mode 100644
index 0000000..61024b3
--- /dev/null
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/OpenDJLoggerFactory.java
@@ -0,0 +1,67 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License").  You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ *      Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ *      Copyright 2014 ForgeRock AS.
+ */
+package org.opends.server.loggers;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.slf4j.ILoggerFactory;
+import org.slf4j.Logger;
+
+/**
+ * Factory to retrieve an openDJ implementation of SLF4J Logger.
+ */
+public final class OpenDJLoggerFactory implements ILoggerFactory
+{
+
+  private final ConcurrentMap<String, Logger> loggerMap;
+
+  /**
+   * Create the factory.
+   */
+  public OpenDJLoggerFactory()
+  {
+    loggerMap = new ConcurrentHashMap<String, Logger>();
+  }
+
+  /** {@inheritDoc} */
+  public Logger getLogger(String name)
+  {
+    if (name.equalsIgnoreCase(Logger.ROOT_LOGGER_NAME))
+    {
+      name = "org.forgerock";
+    }
+
+    Logger slf4jLogger = loggerMap.get(name);
+    if (slf4jLogger != null)
+    {
+      return slf4jLogger;
+    }
+    Logger newInstance = new OpenDJLoggerAdapter(name);
+    Logger oldInstance = loggerMap.putIfAbsent(name, newInstance);
+    return oldInstance == null ? newInstance : oldInstance;
+  }
+}
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/ParallelTextWriter.java b/opendj3-server-dev/src/server/org/opends/server/loggers/ParallelTextWriter.java
index eb54912..114e642 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/ParallelTextWriter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/ParallelTextWriter.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.loggers;
 
@@ -32,7 +33,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.api.ServerShutdownListener;
 import org.opends.server.core.DirectoryServer;
@@ -193,7 +194,7 @@
   /**
    * {@inheritDoc}
    */
-  public void processServerShutdown(Message reason)
+  public void processServerShutdown(LocalizableMessage reason)
   {
     // Don't shutdown the wrapped writer on server shutdown as it
     // might get more write requests before the log publishers are
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java b/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java
index 6bac575..10d9cb3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRetentionPolicy.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.loggers;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.LoggerMessages.ERR_LOGGER_ERROR_LISTING_FILES;
 
 import org.opends.server.admin.std.server.SizeLimitLogRetentionPolicyCfg;
@@ -78,7 +79,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       SizeLimitLogRetentionPolicyCfg config,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -93,7 +94,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     this.size = config.getDiskSpaceUsed();
     this.config = config;
@@ -110,7 +111,7 @@
     File[] files = fileNamingPolicy.listFiles();
     if(files == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LOGGER_ERROR_LISTING_FILES.get(
               fileNamingPolicy.getInitialName().toString());
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java b/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
index fc8a213..acfe086 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/SizeBasedRotationPolicy.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.loggers;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import org.opends.server.admin.std.server.SizeLimitLogRotationPolicyCfg;
@@ -66,7 +67,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      SizeLimitLogRotationPolicyCfg config, List<Message> unacceptableReasons)
+      SizeLimitLogRotationPolicyCfg config, List<LocalizableMessage> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -81,7 +82,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     sizeLimit = config.getFileSizeLimit();
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/TextAccessLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/loggers/TextAccessLogPublisher.java
index 6767efd..6d891d3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/TextAccessLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/TextAccessLogPublisher.java
@@ -34,8 +34,8 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.FileBasedAccessLogPublisherCfgDefn.*;
 import org.opends.server.admin.std.server.FileBasedAccessLogPublisherCfg;
@@ -113,7 +113,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    final List<Message> messages = new ArrayList<Message>();
+    final List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     final File logFile = getFileForPath(config.getLogFile());
     final FileNamingPolicy fnPolicy = new TimeStampNaming(logFile);
@@ -220,7 +220,7 @@
     }
     catch (final Exception e)
     {
-      final Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+      final LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
           config.dn().toString(), stackTraceToSingleLineString(e));
       resultCode = DirectoryServer.getServerErrorResultCode();
       messages.add(message);
@@ -236,7 +236,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void initializeLogPublisher(final FileBasedAccessLogPublisherCfg cfg)
+  public void initializeLogPublisher(final FileBasedAccessLogPublisherCfg cfg, ServerContext serverContext)
       throws ConfigException, InitializationException
   {
     final File logFile = getFileForPath(cfg.getLogFile());
@@ -290,13 +290,13 @@
     }
     catch (final DirectoryException e)
     {
-      final Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(cfg
+      final LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(cfg
           .dn().toString(), String.valueOf(e));
       throw new InitializationException(message, e);
     }
     catch (final IOException e)
     {
-      final Message message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(
+      final LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(
           logFile.toString(), cfg.dn().toString(), String.valueOf(e));
       throw new InitializationException(message, e);
 
@@ -320,7 +320,7 @@
   @Override
   public boolean isConfigurationAcceptable(
       final FileBasedAccessLogPublisherCfg configuration,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     return isFilterConfigurationAcceptable(configuration, unacceptableReasons)
         && isConfigurationChangeAcceptable(configuration, unacceptableReasons);
@@ -334,7 +334,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       final FileBasedAccessLogPublisherCfg config,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     // Validate the time-stamp formatter.
     final String formatString = config.getLogRecordTimeFormat();
@@ -344,7 +344,7 @@
     }
     catch (final Exception e)
     {
-      final Message message = ERR_CONFIG_LOGGING_INVALID_TIME_FORMAT.get(String
+      final LocalizableMessage message = ERR_CONFIG_LOGGING_INVALID_TIME_FORMAT.get(String
           .valueOf(formatString));
       unacceptableReasons.add(message);
       return false;
@@ -357,7 +357,7 @@
           .getLogFilePermissions());
       if (!filePerm.isOwnerWritable())
       {
-        final Message message = ERR_CONFIG_LOGGING_INSANE_MODE.get(config
+        final LocalizableMessage message = ERR_CONFIG_LOGGING_INSANE_MODE.get(config
             .getLogFilePermissions());
         unacceptableReasons.add(message);
         return false;
@@ -365,7 +365,7 @@
     }
     catch (final DirectoryException e)
     {
-      final Message message = ERR_CONFIG_LOGGING_MODE_INVALID.get(
+      final LocalizableMessage message = ERR_CONFIG_LOGGING_MODE_INVALID.get(
           config.getLogFilePermissions(), String.valueOf(e));
       unacceptableReasons.add(message);
       return false;
@@ -541,13 +541,11 @@
     }
     appendResultCodeAndMessage(buffer, bindOperation);
 
-    final Message failureMessage = bindOperation.getAuthFailureReason();
+    final LocalizableMessage failureMessage = bindOperation.getAuthFailureReason();
     if (failureMessage != null)
     {
       // this code path is mutually exclusive with the if result code is success
       // down below
-      buffer.append(" authFailureID=");
-      buffer.append(failureMessage.getDescriptor().getId());
       appendLabel(buffer, "authFailureReason", failureMessage);
       if (bindOperation.getSASLMechanism() != null
           && bindOperation.getSASLAuthUserEntry() != null)
@@ -764,7 +762,7 @@
    */
   @Override
   public void logDisconnect(final ClientConnection clientConnection,
-      final DisconnectReason disconnectReason, final Message message)
+      final DisconnectReason disconnectReason, final LocalizableMessage message)
   {
     if (!isDisconnectLoggable(clientConnection))
     {
@@ -1220,7 +1218,7 @@
     buffer.append(" result=");
     buffer.append(operation.getResultCode().getIntValue());
 
-    final MessageBuilder msg = operation.getErrorMessage();
+    final LocalizableMessageBuilder msg = operation.getErrorMessage();
     if ((msg != null) && (msg.length() > 0))
     {
       appendLabel(buffer, "message", msg);
@@ -1231,7 +1229,7 @@
       buffer.append(" maskedResult=");
       buffer.append(operation.getMaskedResultCode().getIntValue());
     }
-    final MessageBuilder maskedMsg = operation.getMaskedErrorMessage();
+    final LocalizableMessageBuilder maskedMsg = operation.getMaskedErrorMessage();
     if (maskedMsg != null && maskedMsg.length() > 0)
     {
       appendLabel(buffer, "maskedMessage", maskedMsg);
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/TextAuditLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/loggers/TextAuditLogPublisher.java
index bd4e3f3..075c2f5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/TextAuditLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/TextAuditLogPublisher.java
@@ -38,7 +38,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.FileBasedAuditLogPublisherCfg;
 import org.opends.server.config.ConfigException;
@@ -76,7 +76,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     File logFile = getFileForPath(config.getLogFile());
     FileNamingPolicy fnPolicy = new TimeStampNaming(logFile);
@@ -157,7 +157,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(config.dn()
+      LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(config.dn()
           .toString(), stackTraceToSingleLineString(e));
       resultCode = DirectoryServer.getServerErrorResultCode();
       messages.add(message);
@@ -185,7 +185,7 @@
    * {@inheritDoc}
    */
   @Override()
-  public void initializeLogPublisher(FileBasedAuditLogPublisherCfg cfg)
+  public void initializeLogPublisher(FileBasedAuditLogPublisherCfg cfg, ServerContext serverContext)
       throws ConfigException, InitializationException
   {
     File logFile = getFileForPath(cfg.getLogFile());
@@ -231,14 +231,14 @@
     }
     catch (DirectoryException e)
     {
-      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(cfg.dn()
+      LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(cfg.dn()
           .toString(), String.valueOf(e));
       throw new InitializationException(message, e);
 
     }
     catch (IOException e)
     {
-      Message message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(logFile
+      LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(logFile
           .toString(), cfg.dn().toString(), String.valueOf(e));
       throw new InitializationException(message, e);
 
@@ -257,7 +257,7 @@
   @Override
   public boolean isConfigurationAcceptable(
       FileBasedAuditLogPublisherCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return isFilterConfigurationAcceptable(configuration, unacceptableReasons)
         && isConfigurationChangeAcceptable(configuration, unacceptableReasons);
@@ -270,7 +270,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(
-      FileBasedAuditLogPublisherCfg config, List<Message> unacceptableReasons)
+      FileBasedAuditLogPublisherCfg config, List<LocalizableMessage> unacceptableReasons)
   {
     // Make sure the permission is valid.
     try
@@ -279,7 +279,7 @@
           .getLogFilePermissions());
       if (!filePerm.isOwnerWritable())
       {
-        Message message = ERR_CONFIG_LOGGING_INSANE_MODE.get(config
+        LocalizableMessage message = ERR_CONFIG_LOGGING_INSANE_MODE.get(config
             .getLogFilePermissions());
         unacceptableReasons.add(message);
         return false;
@@ -287,7 +287,7 @@
     }
     catch (DirectoryException e)
     {
-      Message message = ERR_CONFIG_LOGGING_MODE_INVALID.get(config
+      LocalizableMessage message = ERR_CONFIG_LOGGING_MODE_INVALID.get(config
           .getLogFilePermissions(), String.valueOf(e));
       unacceptableReasons.add(message);
       return false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/TextErrorLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/loggers/TextErrorLogPublisher.java
index edd219b..cea9b29 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/TextErrorLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/TextErrorLogPublisher.java
@@ -22,16 +22,25 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.loggers;
 
+import static org.opends.messages.ConfigMessages.*;
+import static org.opends.messages.LoggerMessages.*;
+import static org.opends.server.util.ServerConstants.*;
+import static org.opends.server.util.StaticUtils.*;
+
 import java.io.File;
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.StringTokenizer;
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.ErrorLogPublisherCfgDefn;
@@ -39,14 +48,16 @@
 import org.opends.server.api.ErrorLogPublisher;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
-import org.opends.server.types.*;
+import org.opends.server.core.ServerContext;
+import org.opends.server.types.ConfigChangeResult;
+import org.opends.server.types.DN;
+import org.opends.server.types.DirectoryException;
+import org.opends.server.types.FilePermission;
+import org.opends.server.types.InitializationException;
+import org.opends.server.types.ResultCode;
+import org.opends.server.util.StaticUtils;
 import org.opends.server.util.TimeThread;
 
-import static org.opends.messages.ConfigMessages.*;
-import static org.opends.messages.LoggerMessages.*;
-import static org.opends.server.util.ServerConstants.*;
-import static org.opends.server.util.StaticUtils.*;
-
 /**
  * This class provides an implementation of an error log publisher.
  */
@@ -109,7 +120,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void initializeLogPublisher(FileBasedErrorLogPublisherCfg config)
+  public void initializeLogPublisher(FileBasedErrorLogPublisherCfg config, ServerContext serverContext)
       throws ConfigException, InitializationException
   {
     File logFile = getFileForPath(config.getLogFile());
@@ -163,14 +174,14 @@
     }
     catch(DirectoryException e)
     {
-      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+      LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
           config.dn().toString(), String.valueOf(e));
       throw new InitializationException(message, e);
 
     }
     catch(IOException e)
     {
-      Message message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(
+      LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(
           logFile.toString(), config.dn().toString(), String.valueOf(e));
       throw new InitializationException(message, e);
 
@@ -220,17 +231,15 @@
         int equalPos = overrideSeverity.indexOf('=');
         if (equalPos < 0)
         {
-          Message msg =
+          LocalizableMessage msg =
               WARN_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY.get(overrideSeverity);
           throw new ConfigException(msg);
         } else
         {
-          String categoryName = overrideSeverity.substring(0, equalPos);
-          categoryName = categoryName.replace("-", "_").toUpperCase();
+          String category = overrideSeverity.substring(0, equalPos);
+          category = category.replace("-", "_").toUpperCase();
           try
           {
-            Category category = Category.valueOf(categoryName);
-
             Set<Severity> severities = new HashSet<Severity>();
             StringTokenizer sevTokenizer =
               new StringTokenizer(overrideSeverity.substring(equalPos+1), ",");
@@ -257,7 +266,7 @@
                 }
                 catch(Exception e)
                 {
-                  Message msg =
+                  LocalizableMessage msg =
                       WARN_ERROR_LOGGER_INVALID_SEVERITY.get(severityName);
                   throw new ConfigException(msg);
                 }
@@ -267,7 +276,7 @@
           }
           catch(Exception e)
           {
-            Message msg = WARN_ERROR_LOGGER_INVALID_CATEGORY.get(categoryName);
+            LocalizableMessage msg = WARN_ERROR_LOGGER_INVALID_CATEGORY.get(category);
             throw new ConfigException(msg);
           }
         }
@@ -286,7 +295,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(
-      FileBasedErrorLogPublisherCfg config, List<Message> unacceptableReasons)
+      FileBasedErrorLogPublisherCfg config, List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
   }
@@ -296,7 +305,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(
-      FileBasedErrorLogPublisherCfg config, List<Message> unacceptableReasons)
+      FileBasedErrorLogPublisherCfg config, List<LocalizableMessage> unacceptableReasons)
   {
     // Make sure the permission is valid.
     try
@@ -305,7 +314,7 @@
           FilePermission.decodeUNIXMode(config.getLogFilePermissions());
       if(!filePerm.isOwnerWritable())
       {
-        Message message = ERR_CONFIG_LOGGING_INSANE_MODE.get(
+        LocalizableMessage message = ERR_CONFIG_LOGGING_INSANE_MODE.get(
             config.getLogFilePermissions());
         unacceptableReasons.add(message);
         return false;
@@ -313,7 +322,7 @@
     }
     catch(DirectoryException e)
     {
-      Message message = ERR_CONFIG_LOGGING_MODE_INVALID.get(
+      LocalizableMessage message = ERR_CONFIG_LOGGING_MODE_INVALID.get(
           config.getLogFilePermissions(), String.valueOf(e));
       unacceptableReasons.add(message);
       return false;
@@ -326,24 +335,14 @@
         int equalPos = overrideSeverity.indexOf('=');
         if (equalPos < 0)
         {
-          Message msg = WARN_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY.get(
+          LocalizableMessage msg = WARN_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY.get(
                   overrideSeverity);
           unacceptableReasons.add(msg);
           return false;
 
         } else
         {
-          String categoryName = overrideSeverity.substring(0, equalPos);
-          categoryName = categoryName.replace("-", "_").toUpperCase();
-          try
-          {
-            Category.valueOf(categoryName);
-          }
-          catch(Exception e)
-          {
-            Message msg = WARN_ERROR_LOGGER_INVALID_CATEGORY.get(categoryName);
-            unacceptableReasons.add(msg);
-          }
+          // No check on category because it can be any value
 
           StringTokenizer sevTokenizer =
               new StringTokenizer(overrideSeverity.substring(equalPos+1), ",");
@@ -359,7 +358,7 @@
               }
               catch(Exception e)
               {
-                Message msg =
+                LocalizableMessage msg =
                     WARN_ERROR_LOGGER_INVALID_SEVERITY.get(severityName);
                 unacceptableReasons.add(msg);
                 return false;
@@ -382,7 +381,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     Set<ErrorLogPublisherCfgDefn.DefaultSeverity> defSevs =
         config.getDefaultSeverity();
@@ -429,18 +428,16 @@
         int equalPos = overrideSeverity.indexOf('=');
         if (equalPos < 0)
         {
-          Message msg = WARN_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY.get(
+          LocalizableMessage msg = WARN_ERROR_LOGGER_INVALID_OVERRIDE_SEVERITY.get(
                   overrideSeverity);
           resultCode = DirectoryServer.getServerErrorResultCode();
           messages.add(msg);
         } else
         {
-          String categoryName = overrideSeverity.substring(0, equalPos);
-          categoryName = categoryName.replace("-", "_").toUpperCase();
+          String category = overrideSeverity.substring(0, equalPos);
+          category = category.replace("-", "_").toUpperCase();
           try
           {
-            Category category = Category.valueOf(categoryName);
-
             Set<Severity> severities = new HashSet<Severity>();
             StringTokenizer sevTokenizer =
               new StringTokenizer(overrideSeverity.substring(equalPos+1), ",");
@@ -467,7 +464,7 @@
                 }
                 catch(Exception e)
                 {
-                  Message msg =
+                  LocalizableMessage msg =
                       WARN_ERROR_LOGGER_INVALID_SEVERITY.get(severityName);
                   throw new ConfigException(msg);
                 }
@@ -477,7 +474,7 @@
           }
           catch(Exception e)
           {
-            Message msg = WARN_ERROR_LOGGER_INVALID_CATEGORY.get(categoryName);
+            LocalizableMessage msg = WARN_ERROR_LOGGER_INVALID_CATEGORY.get(category);
             resultCode = DirectoryServer.getServerErrorResultCode();
             messages.add(msg);
           }
@@ -562,7 +559,7 @@
     }
     catch(Exception e)
     {
-      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+      LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
               config.dn().toString(),
               stackTraceToSingleLineString(e));
       resultCode = DirectoryServer.getServerErrorResultCode();
@@ -588,16 +585,10 @@
     }
   }
 
-
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
-  public void logError(Message message)
+  public void log(String category, Severity severity, LocalizableMessage message, Throwable exception)
   {
-    Severity severity = message.getDescriptor().getSeverity();
-    Category category = message.getDescriptor().getCategory();
-    int msgId = message.getDescriptor().getId();
     Set<Severity> severities = definedSeverities.get(category);
     if(severities == null)
     {
@@ -610,14 +601,32 @@
       sb.append("[");
       sb.append(TimeThread.getLocalTime());
       sb.append("] category=").append(category).
-          append(" severity=").append(severity).
-          append(" msgID=").append(msgId).
-          append(" msg=").append(message);
+      append(" severity=").append(severity).
+      append(" msgID=").append(message.resourceName()).
+      append("-").append(message.ordinal()).
+      append(" msg=").append(message);
+      if (exception != null)
+      {
+        sb.append(" exception=").append(
+            StaticUtils.stackTraceToSingleLineString(exception));
+      }
 
       writer.writeRecord(sb.toString());
     }
   }
 
+  /** {@inheritDoc} */
+  @Override
+  public boolean isEnabledFor(String category, Severity severity)
+  {
+    Set<Severity> severities = definedSeverities.get(category);
+    if (severities == null)
+    {
+      severities = defaultSeverities;
+    }
+    return severities.contains(severity);
+  }
+
   /**
    * {@inheritDoc}
    */
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/TextHTTPAccessLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/loggers/TextHTTPAccessLogPublisher.java
index e167114..a77a62c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/TextHTTPAccessLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/TextHTTPAccessLogPublisher.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.loggers;
 
@@ -40,12 +40,13 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.FileBasedHTTPAccessLogPublisherCfg;
 import org.opends.server.api.HTTPAccessLogPublisher;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
+import org.opends.server.core.ServerContext;
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
@@ -122,7 +123,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    final List<Message> messages = new ArrayList<Message>();
+    final List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     final File logFile = getFileForPath(config.getLogFile());
     final FileNamingPolicy fnPolicy = new TimeStampNaming(logFile);
@@ -227,7 +228,7 @@
 
         cfg = config;
         logFormatFields = extractFieldsOrder(cfg.getLogFormat());
-        Message errorMessage = validateLogFormat(logFormatFields);
+        LocalizableMessage errorMessage = validateLogFormat(logFormatFields);
         if (errorMessage != null)
         {
           resultCode = DirectoryServer.getServerErrorResultCode();
@@ -238,7 +239,7 @@
     }
     catch (final Exception e)
     {
-      final Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+      final LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
           config.dn().toString(), stackTraceToSingleLineString(e));
       resultCode = DirectoryServer.getServerErrorResultCode();
       messages.add(message);
@@ -262,7 +263,7 @@
    *          the fields comprising the log format.
    * @return an error message when validation fails, null otherwise
    */
-  private Message validateLogFormat(List<String> fields)
+  private LocalizableMessage validateLogFormat(List<String> fields)
   {
     final Collection<String> unsupportedFields =
         subtract(fields, ALL_SUPPORTED_FIELDS);
@@ -304,7 +305,7 @@
   /** {@inheritDoc} */
   @Override
   public void initializeLogPublisher(
-      final FileBasedHTTPAccessLogPublisherCfg cfg)
+      final FileBasedHTTPAccessLogPublisherCfg cfg, ServerContext serverContext)
       throws ConfigException, InitializationException
   {
     final File logFile = getFileForPath(cfg.getLogFile());
@@ -358,20 +359,20 @@
     }
     catch (final DirectoryException e)
     {
-      final Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(cfg
+      final LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(cfg
           .dn().toString(), String.valueOf(e));
       throw new InitializationException(message, e);
     }
     catch (final IOException e)
     {
-      final Message message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(
+      final LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(
           logFile.toString(), cfg.dn().toString(), String.valueOf(e));
       throw new InitializationException(message, e);
     }
 
     this.cfg = cfg;
     logFormatFields = extractFieldsOrder(cfg.getLogFormat());
-    Message error = validateLogFormat(logFormatFields);
+    LocalizableMessage error = validateLogFormat(logFormatFields);
     if (error != null)
     {
       throw new InitializationException(error);
@@ -386,7 +387,7 @@
   @Override
   public boolean isConfigurationAcceptable(
       final FileBasedHTTPAccessLogPublisherCfg configuration,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(configuration, unacceptableReasons);
   }
@@ -396,7 +397,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       final FileBasedHTTPAccessLogPublisherCfg config,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     // Validate the time-stamp formatter.
     final String formatString = config.getLogRecordTimeFormat();
@@ -406,7 +407,7 @@
     }
     catch (final Exception e)
     {
-      final Message message = ERR_CONFIG_LOGGING_INVALID_TIME_FORMAT.get(String
+      final LocalizableMessage message = ERR_CONFIG_LOGGING_INVALID_TIME_FORMAT.get(String
           .valueOf(formatString));
       unacceptableReasons.add(message);
       return false;
@@ -419,7 +420,7 @@
           .getLogFilePermissions());
       if (!filePerm.isOwnerWritable())
       {
-        final Message message = ERR_CONFIG_LOGGING_INSANE_MODE.get(config
+        final LocalizableMessage message = ERR_CONFIG_LOGGING_INSANE_MODE.get(config
             .getLogFilePermissions());
         unacceptableReasons.add(message);
         return false;
@@ -427,7 +428,7 @@
     }
     catch (final DirectoryException e)
     {
-      final Message message = ERR_CONFIG_LOGGING_MODE_INVALID.get(
+      final LocalizableMessage message = ERR_CONFIG_LOGGING_MODE_INVALID.get(
           config.getLogFilePermissions(), String.valueOf(e));
       unacceptableReasons.add(message);
       return false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/ThreadFilterTextErrorLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/loggers/ThreadFilterTextErrorLogPublisher.java
index 71b7e16..e91c40b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/ThreadFilterTextErrorLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/ThreadFilterTextErrorLogPublisher.java
@@ -22,19 +22,20 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.loggers;
 
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.admin.std.server.ErrorLogPublisherCfg;
 import org.opends.server.api.ErrorLogPublisher;
 import org.opends.server.config.ConfigException;
+import org.opends.server.core.ServerContext;
 import org.opends.server.types.DN;
 import org.opends.server.types.InitializationException;
+import org.opends.server.util.StaticUtils;
 import org.opends.server.util.TimeThread;
 
 /**
@@ -65,7 +66,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void initializeLogPublisher(ErrorLogPublisherCfg config)
+  public void initializeLogPublisher(ErrorLogPublisherCfg config, ServerContext serverContext)
       throws ConfigException, InitializationException
   {
     // This class should only be used internally in the server and not be
@@ -81,16 +82,12 @@
     writer.shutdown();
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
   @Override
-  public void logError(Message message)
+  public void log(String category, Severity severity,
+      LocalizableMessage message, Throwable exception)
   {
     if (message != null) {
-      Severity severity = message.getDescriptor().getSeverity();
-      Category category = message.getDescriptor().getCategory();
-      int msgId = message.getDescriptor().getId();
       Thread currentThread = Thread.currentThread();
       if(this.thread.equals(currentThread) ||
           this.thread.getThreadGroup().equals(currentThread.getThreadGroup()))
@@ -99,18 +96,31 @@
         sb.append("[");
         sb.append(TimeThread.getLocalTime());
         sb.append("] category=").append(category).
-            append(" severity=").append(severity).
-            append(" msgID=").append(msgId).
-            append(" msg=").append(message);
+        append(" severity=").append(severity).
+        append(" msgID=").append(message.resourceName()).
+        append("-").append(message.ordinal()).
+        append(" msg=").append(message);
+        if (exception != null)
+        {
+          sb.append(" exception=").append(
+              StaticUtils.stackTraceToSingleLineString(exception));
+        }
 
         this.writer.writeRecord(sb.toString());
       }
     }
   }
 
-  /**
-   * {@inheritDoc}
-   */
+  /** {@inheritDoc} */
+  @Override
+  public boolean isEnabledFor(String category, Severity severity)
+  {
+    Thread currentThread = Thread.currentThread();
+    return (this.thread.equals(currentThread) || this.thread.getThreadGroup()
+        .equals(currentThread.getThreadGroup()));
+  }
+
+  /** {@inheritDoc} */
   @Override
   public DN getDN()
   {
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java b/opendj3-server-dev/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
index 3d14e63..d33a8aa 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/TimeLimitRotationPolicy.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.loggers;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.util.TimeThread;
 import org.opends.server.admin.std.server.TimeLimitLogRotationPolicyCfg;
@@ -60,7 +61,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(
-      TimeLimitLogRotationPolicyCfg config, List<Message> unacceptableReasons)
+      TimeLimitLogRotationPolicyCfg config, List<LocalizableMessage> unacceptableReasons)
   {
     // Changes should always be OK
     return true;
@@ -75,7 +76,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     timeInterval = config.getRotationInterval();
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/debug/DebugLogger.java b/opendj3-server-dev/src/server/org/opends/server/loggers/debug/DebugLogger.java
index f0bfa97..c5f23da 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/debug/DebugLogger.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/debug/DebugLogger.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.loggers.debug;
 
@@ -36,8 +36,6 @@
 import org.opends.server.admin.std.server.DebugLogPublisherCfg;
 import org.opends.server.api.DebugLogPublisher;
 import org.opends.server.loggers.AbstractLogger;
-import org.opends.server.loggers.LogLevel;
-import org.opends.server.types.DebugLogLevel;
 
 /**
  * A logger for debug and trace logging. DebugLogger provides a debugging
@@ -54,15 +52,6 @@
 public class DebugLogger extends AbstractLogger
     <DebugLogPublisher<DebugLogPublisherCfg>, DebugLogPublisherCfg>
 {
-  /** The default level to log constructor executions. */
-  static final LogLevel DEFAULT_CONSTRUCTOR_LEVEL =
-      DebugLogLevel.VERBOSE;
-  /** The default level to log method entry and exit pointcuts. */
-  static final LogLevel DEFAULT_ENTRY_EXIT_LEVEL =
-      DebugLogLevel.VERBOSE;
-  /** The default level to log method entry and exit pointcuts. */
-  static final LogLevel DEFAULT_THROWN_LEVEL =
-      DebugLogLevel.ERROR;
 
   /** The set of all DebugTracer instances. */
   private static Map<String, DebugTracer> classTracers =
@@ -195,12 +184,8 @@
    */
   public static DebugTracer getTracer()
   {
-    DebugTracer tracer =
-        new DebugTracer(loggerStorage.getLogPublishers().toArray(
-            new DebugLogPublisher[0]));
-    classTracers.put(tracer.getTracedClassName(), tracer);
-
-    return tracer;
+    // TODO : remove this method
+    return getTracer("org.opends");
   }
 
   /**
@@ -212,31 +197,15 @@
    */
   public static DebugTracer getTracer(String className)
   {
-    return classTracers.get(className);
+    DebugTracer tracer = classTracers.get(className);
+    if (tracer == null)
+    {
+      tracer =
+          new DebugTracer(className, loggerStorage.getLogPublishers().toArray(
+              new DebugLogPublisher[0]));
+      classTracers.put(tracer.getTracedClassName(), tracer);
+    }
+    return tracer;
   }
 
-  /**
-   * Classes and methods annotated with @NoDebugTracing will not be weaved with
-   * debug logging statements by AspectJ.
-   */
-  public @interface NoDebugTracing {}
-
-  /**
-   * Methods annotated with @NoEntryDebugTracing will not be weaved with
-   * entry debug logging statements by AspectJ.
-   */
-  public @interface NoEntryDebugTracing {}
-
-  /**
-   * Methods annotated with @NoExitDebugTracing will not be weaved with
-   * exit debug logging statements by AspectJ.
-   */
-  public @interface NoExitDebugTracing {}
-
-  /**
-   * Methods annotated with @TraceThrown will be weaved by AspectJ with
-   * debug logging statements when an exception is thrown from the method.
-   */
-  public @interface TraceThrown {}
-
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/debug/DebugTracer.java b/opendj3-server-dev/src/server/org/opends/server/loggers/debug/DebugTracer.java
index 28b11c0..a3a309f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/debug/DebugTracer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/debug/DebugTracer.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.loggers.debug;
 
@@ -32,8 +33,6 @@
 import org.opends.server.loggers.LogCategory;
 
 import java.util.Map;
-import java.nio.ByteBuffer;
-
 import com.sleepycat.je.OperationStatus;
 import com.sleepycat.je.Transaction;
 import com.sleepycat.je.DatabaseEntry;
@@ -70,22 +69,13 @@
    * Construct a new DebugTracer object with cached settings obtained from
    * the provided array of publishers.
    *
+   * @param className The classname to use as category for logging.
    * @param publishers The array of publishers to obtain the settings from.
    */
   @SuppressWarnings({ "unchecked", "rawtypes" })
-  DebugTracer(DebugLogPublisher[] publishers)
+  DebugTracer(String className, DebugLogPublisher[] publishers)
   {
-    // Trim off the debug logging and non OpenDS frames.
-    StackTraceElement callerFrame =
-        getCallerFrame(Thread.currentThread().getStackTrace());
-
-    // TODO: What if this is null or 0 length?
-    if(callerFrame != null)
-    {
-      // The caller should be the first item on the stack.
-      className = callerFrame.getClassName();
-    }
-
+    this.className = className;
     publisherSettings = new PublisherSettings[publishers.length];
 
     // Get the settings from all publishers.
@@ -110,445 +100,6 @@
   }
 
   /**
-   * Log an constructor execution event.
-   *
-   * @param level The level of the message being logged.
-   * @param args The arguments passed to the constructor.
-   */
-  public void debugConstructor(LogLevel level, Object... args)
-  {
-    if(DebugLogger.debugEnabled())
-    {
-      StackTraceElement[] stackTrace = null;
-      StackTraceElement[] filteredStackTrace = null;
-      StackTraceElement callerFrame = null;
-      for (PublisherSettings settings : publisherSettings)
-      {
-        TraceSettings activeSettings = settings.classSettings;
-        Map<String, TraceSettings> methodSettings = settings.methodSettings;
-
-        if (shouldLog(level, DebugLogCategory.CONSTRUCTOR,
-                      activeSettings) || methodSettings != null)
-        {
-          if(stackTrace == null)
-          {
-            stackTrace = Thread.currentThread().getStackTrace();
-          }
-          if (callerFrame == null)
-          {
-            callerFrame = getCallerFrame(stackTrace);
-          }
-
-          String signature = callerFrame.getMethodName();
-
-          // Specific method settings still could exist. Try getting
-          // the settings for this method.
-          if(methodSettings != null)
-          {
-            TraceSettings mSettings = methodSettings.get(signature);
-
-            if (mSettings == null)
-            {
-              // Try looking for an undecorated method name
-              int idx = signature.indexOf('(');
-              if (idx != -1)
-              {
-                mSettings =
-                    methodSettings.get(signature.substring(0, idx));
-              }
-            }
-
-            // If this method does have a specific setting and it is not
-            // suppose to be logged, continue.
-            if (mSettings != null)
-            {
-              if(!shouldLog(level, DebugLogCategory.CONSTRUCTOR,
-                            mSettings))
-              {
-                continue;
-              }
-              else
-              {
-                activeSettings = mSettings;
-              }
-            }
-          }
-
-          String sl = callerFrame.getFileName() + ":" +
-              callerFrame.getLineNumber();
-
-          if (activeSettings.noArgs)
-          {
-            args = null;
-          }
-
-          if (filteredStackTrace == null && activeSettings.stackDepth > 0)
-          {
-            filteredStackTrace =
-                DebugStackTraceFormatter.SMART_FRAME_FILTER.
-                    getFilteredStackTrace(stackTrace);
-          }
-
-          settings.debugPublisher.traceConstructor(level,
-                                                   activeSettings, signature,
-                                                   sl, args,
-                                                   filteredStackTrace);
-        }
-      }
-    }
-  }
-
-  /**
-   * Log an non static method entry event.
-   *
-   * @param level The level of the message being logged.
-   * @param obj The object type instance the method is a member of.
-   * @param args The arguments passed to the method.
-   */
-  public void debugMethodEntry(LogLevel level, Object obj, Object... args)
-  {
-    if(DebugLogger.debugEnabled())
-    {
-      StackTraceElement[] stackTrace = null;
-      StackTraceElement[] filteredStackTrace = null;
-      StackTraceElement callerFrame = null;
-      for (PublisherSettings settings : publisherSettings)
-      {
-        TraceSettings activeSettings = settings.classSettings;
-        Map<String, TraceSettings> methodSettings = settings.methodSettings;
-
-        if (shouldLog(level, DebugLogCategory.ENTER,
-                      activeSettings) || methodSettings != null)
-        {
-          if(stackTrace == null)
-          {
-            stackTrace = Thread.currentThread().getStackTrace();
-          }
-          if (callerFrame == null)
-          {
-            callerFrame = getCallerFrame(stackTrace);
-          }
-
-          String signature = callerFrame.getMethodName();
-
-          // Specific method settings still could exist. Try getting
-          // the settings for this method.
-          if(methodSettings != null)
-          {
-            TraceSettings mSettings = methodSettings.get(signature);
-
-            if (mSettings == null)
-            {
-              // Try looking for an undecorated method name
-              int idx = signature.indexOf('(');
-              if (idx != -1)
-              {
-                mSettings =
-                    methodSettings.get(signature.substring(0, idx));
-              }
-            }
-
-            // If this method does have a specific setting and it is not
-            // suppose to be logged, continue.
-            if (mSettings != null)
-            {
-              if(!shouldLog(level, DebugLogCategory.ENTER,
-                            mSettings))
-              {
-                continue;
-              }
-              else
-              {
-                activeSettings = mSettings;
-              }
-            }
-          }
-
-          String sl = callerFrame.getFileName() + ":" +
-              callerFrame.getLineNumber();
-
-          if (activeSettings.noArgs)
-          {
-            args = null;
-          }
-
-          if (filteredStackTrace == null && activeSettings.stackDepth > 0)
-          {
-            filteredStackTrace =
-                DebugStackTraceFormatter.SMART_FRAME_FILTER.
-                    getFilteredStackTrace(stackTrace);
-          }
-
-          settings.debugPublisher.traceMethodEntry(level,
-                                                   activeSettings, signature,
-                                                   sl, obj, args,
-                                                   filteredStackTrace);
-        }
-      }
-    }
-  }
-
-  /**
-   * Log an static method entry event.
-   *
-   * @param level The level of the message being logged.
-   * @param args The arguments passed to the method.
-   */
-  public void debugStaticMethodEntry(LogLevel level, Object... args)
-  {
-    if(DebugLogger.debugEnabled())
-    {
-      StackTraceElement[] stackTrace = null;
-      StackTraceElement[] filteredStackTrace = null;
-      StackTraceElement callerFrame = null;
-      for (PublisherSettings settings : publisherSettings)
-      {
-        TraceSettings activeSettings = settings.classSettings;
-        Map<String, TraceSettings> methodSettings = settings.methodSettings;
-
-        if (shouldLog(level, DebugLogCategory.ENTER,
-                      activeSettings) || methodSettings != null)
-        {
-          if(stackTrace == null)
-          {
-            stackTrace = Thread.currentThread().getStackTrace();
-          }
-          if (callerFrame == null)
-          {
-            callerFrame = getCallerFrame(stackTrace);
-          }
-
-          String signature = callerFrame.getMethodName();
-
-          // Specific method settings still could exist. Try getting
-          // the settings for this method.
-          if(methodSettings != null)
-          {
-            TraceSettings mSettings = methodSettings.get(signature);
-
-            if (mSettings == null)
-            {
-              // Try looking for an undecorated method name
-              int idx = signature.indexOf('(');
-              if (idx != -1)
-              {
-                mSettings =
-                    methodSettings.get(signature.substring(0, idx));
-              }
-            }
-
-            // If this method does have a specific setting and it is not
-            // suppose to be logged, continue.
-            if (mSettings != null)
-            {
-              if(!shouldLog(level, DebugLogCategory.ENTER,
-                            mSettings))
-              {
-                continue;
-              }
-              else
-              {
-                activeSettings = mSettings;
-              }
-            }
-          }
-
-          String sl = callerFrame.getFileName() + ":" +
-              callerFrame.getLineNumber();
-
-          if (activeSettings.noArgs)
-          {
-            args = null;
-          }
-
-          if (filteredStackTrace == null && activeSettings.stackDepth > 0)
-          {
-            filteredStackTrace =
-                DebugStackTraceFormatter.SMART_FRAME_FILTER.
-                    getFilteredStackTrace(stackTrace);
-          }
-
-          settings.debugPublisher.traceStaticMethodEntry(level,
-                                                         activeSettings,
-                                                         signature, sl, args,
-                                                         filteredStackTrace);
-        }
-      }
-    }
-  }
-
-  /**
-   * Log a return from a method call event.
-   *
-   * @param level The level of the message being logged.
-   * @param ret The value being returned from the method.
-   */
-  public void debugReturn(LogLevel level, Object ret)
-  {
-    if(DebugLogger.debugEnabled())
-    {
-      StackTraceElement[] stackTrace = null;
-      StackTraceElement[] filteredStackTrace = null;
-      StackTraceElement callerFrame = null;
-      for (PublisherSettings settings : publisherSettings)
-      {
-        TraceSettings activeSettings = settings.classSettings;
-        Map<String, TraceSettings> methodSettings = settings.methodSettings;
-
-        if (shouldLog(level, DebugLogCategory.ENTER,
-                      activeSettings) || methodSettings != null)
-        {
-          if(stackTrace == null)
-          {
-            stackTrace = Thread.currentThread().getStackTrace();
-          }
-          if (callerFrame == null)
-          {
-            callerFrame = getCallerFrame(stackTrace);
-          }
-
-          String signature = callerFrame.getMethodName();
-
-          // Specific method settings still could exist. Try getting
-          // the settings for this method.
-          if(methodSettings != null)
-          {
-            TraceSettings mSettings = methodSettings.get(signature);
-
-            if (mSettings == null)
-            {
-              // Try looking for an undecorated method name
-              int idx = signature.indexOf('(');
-              if (idx != -1)
-              {
-                mSettings =
-                    methodSettings.get(signature.substring(0, idx));
-              }
-            }
-
-            // If this method does have a specific setting and it is not
-            // suppose to be logged, continue.
-            if (mSettings != null)
-            {
-              if(!shouldLog(level, DebugLogCategory.ENTER,
-                            mSettings))
-              {
-                continue;
-              }
-              else
-              {
-                activeSettings = mSettings;
-              }
-            }
-          }
-
-          String sl = callerFrame.getFileName() + ":" +
-              callerFrame.getLineNumber();
-
-          if (activeSettings.noRetVal)
-          {
-            ret = null;
-          }
-
-          if (filteredStackTrace == null && activeSettings.stackDepth > 0)
-          {
-            filteredStackTrace =
-                DebugStackTraceFormatter.SMART_FRAME_FILTER.
-                    getFilteredStackTrace(stackTrace);
-          }
-
-          settings.debugPublisher.traceReturn(level,
-                                              activeSettings, signature,
-                                              sl, ret,
-                                              filteredStackTrace);
-        }
-      }
-    }
-  }
-
-  /**
-   * Log an exception thrown from a method.
-   *
-   * @param level The level of the message being logged.
-   * @param ex The exception being thrown.
-   */
-  public void debugThrown(LogLevel level, Throwable ex)
-  {
-    if(DebugLogger.debugEnabled())
-    {
-      StackTraceElement[] stackTrace = null;
-      StackTraceElement[] filteredStackTrace = null;
-      StackTraceElement callerFrame = null;
-      for (PublisherSettings settings : publisherSettings)
-      {
-        TraceSettings activeSettings = settings.classSettings;
-        Map<String, TraceSettings> methodSettings = settings.methodSettings;
-
-        if (shouldLog(level, DebugLogCategory.THROWN,
-                      activeSettings) || methodSettings != null)
-        {
-          if(stackTrace == null)
-          {
-            stackTrace = Thread.currentThread().getStackTrace();
-          }
-          if (callerFrame == null)
-          {
-            callerFrame = getCallerFrame(stackTrace);
-          }
-
-          String signature = callerFrame.getMethodName();
-
-          // Specific method settings still could exist. Try getting
-          // the settings for this method.
-          if(methodSettings != null)
-          {
-            TraceSettings mSettings = methodSettings.get(signature);
-
-            if (mSettings == null)
-            {
-              // Try looking for an undecorated method name
-              int idx = signature.indexOf('(');
-              if (idx != -1)
-              {
-                mSettings =
-                    methodSettings.get(signature.substring(0, idx));
-              }
-            }
-
-            // If this method does have a specific setting and it is not
-            // suppose to be logged, continue.
-            if (mSettings != null)
-            {
-              if(!shouldLog(level, DebugLogCategory.THROWN,
-                            mSettings))
-              {
-                continue;
-              }
-              else
-              {
-                activeSettings = mSettings;
-              }
-            }
-          }
-
-          String sl = callerFrame.getFileName() + ":" +
-              callerFrame.getLineNumber();
-
-          if (filteredStackTrace == null && activeSettings.stackDepth > 0)
-          {
-            filteredStackTrace =
-                DebugStackTraceFormatter.SMART_FRAME_FILTER.
-                    getFilteredStackTrace(ex.getStackTrace());
-          }
-
-          settings.debugPublisher.traceThrown(level, activeSettings, signature,
-                                              sl, ex, filteredStackTrace);
-        }
-      }
-    }
-  }
-
-  /**
    * Log an arbitrary event at the verbose level.
    * Same as debugMessage(DebugLogLevel.ERROR, msg)
    *
@@ -672,8 +223,7 @@
         TraceSettings activeSettings = settings.classSettings;
         Map<String, TraceSettings> methodSettings = settings.methodSettings;
 
-        if (shouldLog(level, DebugLogCategory.MESSAGE,
-                      activeSettings) || methodSettings != null)
+        if (shouldLog(DebugLogCategory.MESSAGE, activeSettings) || methodSettings != null)
         {
           if(stackTrace == null)
           {
@@ -707,8 +257,7 @@
             // suppose to be logged, continue.
             if (mSettings != null)
             {
-              if(!shouldLog(level, DebugLogCategory.MESSAGE,
-                            mSettings))
+              if(!shouldLog(DebugLogCategory.MESSAGE, mSettings))
               {
                 continue;
               }
@@ -734,8 +283,8 @@
                     getFilteredStackTrace(stackTrace);
           }
 
-          settings.debugPublisher.traceMessage(level, activeSettings, signature,
-                                               sl, msg, filteredStackTrace);
+          settings.debugPublisher.traceMessage(activeSettings, signature, sl,
+                                               msg, filteredStackTrace);
         }
       }
     }
@@ -749,6 +298,17 @@
    */
   public void debugCaught(LogLevel level, Throwable ex)
   {
+    debugCaught("", ex);
+  }
+
+  /**
+   * Log a caught exception.
+   *
+   * @param msg the message
+   * @param ex the exception caught.
+   */
+  public void debugCaught(String msg, Throwable ex)
+  {
     if(DebugLogger.debugEnabled())
     {
       StackTraceElement[] stackTrace = null;
@@ -759,8 +319,7 @@
         TraceSettings activeSettings = settings.classSettings;
         Map<String, TraceSettings> methodSettings = settings.methodSettings;
 
-        if (shouldLog(level, DebugLogCategory.CAUGHT,
-                      activeSettings) || methodSettings != null)
+        if (shouldLog(DebugLogCategory.CAUGHT, activeSettings) || methodSettings != null)
         {
           if(stackTrace == null)
           {
@@ -794,8 +353,7 @@
             // suppose to be logged, continue.
             if (mSettings != null)
             {
-              if(!shouldLog(level, DebugLogCategory.CAUGHT,
-                            mSettings))
+              if(!shouldLog(DebugLogCategory.CAUGHT, mSettings))
               {
                 continue;
               }
@@ -816,8 +374,8 @@
                     getFilteredStackTrace(ex.getStackTrace());
           }
 
-          settings.debugPublisher.traceCaught(level, activeSettings, signature,
-                                              sl, ex, filteredStackTrace);
+          settings.debugPublisher.traceCaught(activeSettings, signature, sl,
+                                              msg, ex, filteredStackTrace);
         }
       }
     }
@@ -847,8 +405,7 @@
         TraceSettings activeSettings = settings.classSettings;
         Map<String, TraceSettings> methodSettings = settings.methodSettings;
 
-        if (shouldLog(level, DebugLogCategory.DATABASE_ACCESS,
-                      activeSettings) || methodSettings != null)
+        if (shouldLog(DebugLogCategory.MESSAGE, activeSettings) || methodSettings != null)
         {
           if(stackTrace == null)
           {
@@ -882,8 +439,7 @@
             // suppose to be logged, continue.
             if (mSettings != null)
             {
-              if(!shouldLog(level, DebugLogCategory.DATABASE_ACCESS,
-                            mSettings))
+              if(!shouldLog(DebugLogCategory.MESSAGE, mSettings))
               {
                 continue;
               }
@@ -904,92 +460,9 @@
                     getFilteredStackTrace(stackTrace);
           }
 
-          settings.debugPublisher.traceJEAccess(level, activeSettings,
-                                                signature, sl, status, database,
-                                                txn, key, data,
-                                                filteredStackTrace);
-        }
-      }
-    }
-  }
-
-  /**
-   * Log raw data in the form of a byte array.
-   *
-   * @param level the level of the log message.
-   * @param data the data to dump.
-   */
-  public void debugData(LogLevel level, byte[] data)
-  {
-    if(DebugLogger.debugEnabled() && data != null)
-    {
-      StackTraceElement[] stackTrace = null;
-      StackTraceElement[] filteredStackTrace = null;
-      StackTraceElement callerFrame = null;
-      for (PublisherSettings settings : publisherSettings)
-      {
-        TraceSettings activeSettings = settings.classSettings;
-        Map<String, TraceSettings> methodSettings = settings.methodSettings;
-
-        if (shouldLog(level, DebugLogCategory.DATA,
-                      activeSettings) || methodSettings != null)
-        {
-          if(stackTrace == null)
-          {
-            stackTrace = Thread.currentThread().getStackTrace();
-          }
-          if (callerFrame == null)
-          {
-            callerFrame = getCallerFrame(stackTrace);
-          }
-
-          String signature = callerFrame.getMethodName();
-
-          // Specific method settings still could exist. Try getting
-          // the settings for this method.
-          if(methodSettings != null)
-          {
-            TraceSettings mSettings = methodSettings.get(signature);
-
-            if (mSettings == null)
-            {
-              // Try looking for an undecorated method name
-              int idx = signature.indexOf('(');
-              if (idx != -1)
-              {
-                mSettings =
-                    methodSettings.get(signature.substring(0, idx));
-              }
-            }
-
-            // If this method does have a specific setting and it is not
-            // suppose to be logged, continue.
-            if (mSettings != null)
-            {
-              if(!shouldLog(level, DebugLogCategory.DATA,
-                            mSettings))
-              {
-                continue;
-              }
-              else
-              {
-                activeSettings = mSettings;
-              }
-            }
-          }
-
-          String sl = callerFrame.getFileName() + ":" +
-              callerFrame.getLineNumber();
-
-          if (filteredStackTrace == null && activeSettings.stackDepth > 0)
-          {
-            filteredStackTrace =
-                DebugStackTraceFormatter.SMART_FRAME_FILTER.
-                    getFilteredStackTrace(stackTrace);
-          }
-
-          settings.debugPublisher.traceData(level, activeSettings, signature,
-                                            sl, data, filteredStackTrace);
+          settings.debugPublisher.traceJEAccess(activeSettings, signature,
+                                                sl, status, database, txn,
+                                                key, data, filteredStackTrace);
         }
       }
     }
@@ -1013,8 +486,7 @@
         TraceSettings activeSettings = settings.classSettings;
         Map<String, TraceSettings> methodSettings = settings.methodSettings;
 
-        if (shouldLog(level, DebugLogCategory.PROTOCOL,
-                      activeSettings) || methodSettings != null)
+        if (shouldLog(DebugLogCategory.MESSAGE, activeSettings) || methodSettings != null)
         {
           if(stackTrace == null)
           {
@@ -1048,8 +520,7 @@
             // suppose to be logged, continue.
             if (mSettings != null)
             {
-              if(!shouldLog(level, DebugLogCategory.PROTOCOL,
-                            mSettings))
+              if(!shouldLog(DebugLogCategory.MESSAGE, mSettings))
               {
                 continue;
               }
@@ -1070,9 +541,8 @@
                     getFilteredStackTrace(stackTrace);
           }
 
-          settings.debugPublisher.traceProtocolElement(level, activeSettings,
-                                                       signature, sl,
-                                                       elementStr,
+          settings.debugPublisher.traceProtocolElement(activeSettings, signature,
+                                                       sl, elementStr,
                                                        filteredStackTrace);
         }
       }
@@ -1080,17 +550,6 @@
   }
 
   /**
-   * Log raw data in the form of a ByteBuffer.
-   *
-   * @param level the level of the log message.
-   * @param buffer the data to dump.
-   */
-  public void debugData(LogLevel level, ByteBuffer buffer)
-  {
-    debugData(level, buffer.array());
-  }
-
-  /**
    * Gets the name of the class this tracer traces.
    *
    * @return The name of the class this tracer traces.
@@ -1101,6 +560,51 @@
   }
 
   /**
+   * Indicates if logging is enabled for the provided debug log
+   * category.
+   *
+   * @param logCategory
+   *            Log category to check
+   * @return {@code true} if logging is enabled, false otherwise.
+   */
+  public boolean enabledFor(LogCategory logCategory)
+  {
+    for (PublisherSettings settings : publisherSettings)
+    {
+      TraceSettings activeSettings = settings.classSettings;
+      Map<String, TraceSettings> methodSettings = settings.methodSettings;
+
+      if (shouldLog(logCategory, activeSettings)
+          || methodSettings != null)
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
+   * Indicates if logging is enabled for at least one category
+   * in a publisher.
+   *
+   * @return {@code true} if logging is enabled, false otherwise.
+   */
+  public boolean enabled()
+  {
+    for (PublisherSettings settings : publisherSettings)
+    {
+      TraceSettings activeSettings = settings.classSettings;
+      Map<String, TraceSettings> methodSettings = settings.methodSettings;
+
+      if (shouldLog(activeSettings) || methodSettings != null)
+      {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  /**
    * Update the cached settings of the tracer with the settings from the
    * provided publishers.
    *
@@ -1166,12 +670,15 @@
     return null;
   }
 
-  private boolean shouldLog(LogLevel messageLevel, LogCategory messageCategory,
-                            TraceSettings activeSettings)
+  private boolean shouldLog(LogCategory messageCategory, TraceSettings activeSettings)
   {
-    return !(activeSettings.includeCategories != null &&
-        !activeSettings.includeCategories.contains(messageCategory)) &&
-        messageLevel.intValue() >= activeSettings.level.intValue();
+    return activeSettings.includeCategories != null &&
+        activeSettings.includeCategories.contains(messageCategory);
+  }
 
+  /** Indicates if at least one category is active for logging. */
+  private boolean shouldLog(TraceSettings settings)
+  {
+    return settings.includeCategories != null && !settings.includeCategories.isEmpty();
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
index 1967ef6..a5c05c3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/debug/TextDebugLogPublisher.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.loggers.debug;
 
@@ -30,7 +30,7 @@
 import java.io.IOException;
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
@@ -41,6 +41,7 @@
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
+import org.opends.server.core.ServerContext;
 import org.opends.server.loggers.*;
 import org.opends.server.types.*;
 import org.opends.server.util.ServerConstants;
@@ -119,7 +120,7 @@
    */
   @Override
   public boolean isConfigurationAcceptable(
-      FileBasedDebugLogPublisherCfg config, List<Message> unacceptableReasons)
+      FileBasedDebugLogPublisherCfg config, List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
   }
@@ -128,10 +129,10 @@
    * {@inheritDoc}
    */
   @Override
-  public void initializeLogPublisher(FileBasedDebugLogPublisherCfg config)
+  public void initializeLogPublisher(FileBasedDebugLogPublisherCfg config, ServerContext serverContext)
       throws ConfigException, InitializationException
   {
-    File logFile = getFileForPath(config.getLogFile());
+    File logFile = getFileForPath(config.getLogFile(), serverContext);
     FileNamingPolicy fnPolicy = new TimeStampNaming(logFile);
 
     try
@@ -181,14 +182,14 @@
     }
     catch(DirectoryException e)
     {
-      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+      LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
           config.dn().toString(), String.valueOf(e));
       throw new InitializationException(message, e);
 
     }
     catch(IOException e)
     {
-      Message message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(
+      LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_OPEN_FILE.get(
           logFile.toString(), config.dn().toString(), String.valueOf(e));
       throw new InitializationException(message, e);
 
@@ -241,7 +242,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(
-      FileBasedDebugLogPublisherCfg config, List<Message> unacceptableReasons)
+      FileBasedDebugLogPublisherCfg config, List<LocalizableMessage> unacceptableReasons)
   {
     // Make sure the permission is valid.
     try
@@ -250,7 +251,7 @@
           FilePermission.decodeUNIXMode(config.getLogFilePermissions());
       if(!filePerm.isOwnerWritable())
       {
-        Message message = ERR_CONFIG_LOGGING_INSANE_MODE.get(
+        LocalizableMessage message = ERR_CONFIG_LOGGING_INSANE_MODE.get(
             config.getLogFilePermissions());
         unacceptableReasons.add(message);
         return false;
@@ -258,7 +259,7 @@
     }
     catch(DirectoryException e)
     {
-      Message message = ERR_CONFIG_LOGGING_MODE_INVALID.get(
+      LocalizableMessage message = ERR_CONFIG_LOGGING_MODE_INVALID.get(
           config.getLogFilePermissions(), String.valueOf(e));
       unacceptableReasons.add(message);
       return false;
@@ -277,7 +278,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     //Get the default/global settings
     LogLevel logLevel =
@@ -382,7 +383,7 @@
     }
     catch(Exception e)
     {
-      Message message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
+      LocalizableMessage message = ERR_CONFIG_LOGGING_CANNOT_CREATE_WRITER.get(
               config.dn().toString(),
               stackTraceToSingleLineString(e));
       resultCode = DirectoryServer.getServerErrorResultCode();
@@ -398,7 +399,7 @@
    */
   @Override
   public boolean isConfigurationAddAcceptable(DebugTargetCfg config,
-                                              List<Message> unacceptableReasons)
+                                              List<LocalizableMessage> unacceptableReasons)
   {
     return getTraceSettings(config.getDebugScope()) == null;
   }
@@ -408,7 +409,7 @@
    */
   @Override
   public boolean isConfigurationDeleteAcceptable(DebugTargetCfg config,
-                                              List<Message> unacceptableReasons)
+                                              List<LocalizableMessage> unacceptableReasons)
   {
     // A delete should always be acceptable.
     return true;
@@ -423,7 +424,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     addTraceSettings(config.getDebugScope(), new TraceSettings(config));
 
@@ -441,7 +442,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     removeTraceSettings(config.getDebugScope());
 
@@ -454,145 +455,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void traceConstructor(LogLevel level,
-                               TraceSettings settings,
-                               String signature,
-                               String sourceLocation,
-                               Object[] args,
-                               StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.CONSTRUCTOR;
-
-    String msg = "";
-    if(args != null)
-    {
-      msg = buildDefaultEntryMessage(args);
-    }
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
-                                                        settings.stackDepth);
-    }
-    publish(category, level, signature, sourceLocation, msg, stack);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceMethodEntry(LogLevel level,
-                               TraceSettings settings,
-                               String signature,
-                               String sourceLocation,
-                               Object obj,
-                               Object[] args,
-                               StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.ENTER;
-    String msg = "";
-    if(args != null)
-    {
-      msg = buildDefaultEntryMessage(args);
-    }
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
-                                                        settings.stackDepth);
-    }
-    publish(category, level, signature, sourceLocation, msg, stack);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceStaticMethodEntry(LogLevel level,
-                                     TraceSettings settings,
-                                     String signature,
-                                     String sourceLocation,
-                                     Object[] args,
-                                     StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.ENTER;
-    String msg = "";
-    if(args != null)
-    {
-      msg = buildDefaultEntryMessage(args);
-    }
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
-                                                        settings.stackDepth);
-    }
-    publish(category, level, signature, sourceLocation, msg, stack);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceReturn(LogLevel level,
-                          TraceSettings settings,
-                          String signature,
-                          String sourceLocation,
-                          Object ret,
-                          StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.EXIT;
-    String msg = "";
-    if(ret != null)
-    {
-      msg = DebugMessageFormatter.format("returned={%s}",
-                                         new Object[] {ret});
-    }
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
-                                                        settings.stackDepth);
-    }
-    publish(category, level, signature, sourceLocation, msg, stack);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceThrown(LogLevel level,
-                          TraceSettings settings,
-                          String signature,
-                          String sourceLocation,
-                          Throwable ex,
-                          StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.THROWN;
-
-    String msg = DebugMessageFormatter.format("thrown={%s}",
-                                              new Object[] {ex});
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(ex,
-                                                        settings.stackDepth,
-                                                        settings.includeCause);
-    }
-    publish(category, level, signature, sourceLocation, msg, stack);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceMessage(LogLevel level,
-                           TraceSettings settings,
+  public void traceMessage(TraceSettings settings,
                            String signature,
                            String sourceLocation,
                            String msg,
@@ -606,23 +469,27 @@
       stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
                                                         settings.stackDepth);
     }
-    publish(category, level, signature, sourceLocation, msg, stack);
+    publish(category, signature, sourceLocation, msg, stack);
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void traceCaught(LogLevel level,
-                          TraceSettings settings,
+  public void traceCaught(TraceSettings settings,
                           String signature,
                           String sourceLocation,
-                          Throwable ex,
-                          StackTraceElement[] stackTrace)
+                          String msg,
+                          Throwable ex, StackTraceElement[] stackTrace)
   {
     LogCategory category = DebugLogCategory.CAUGHT;
-    String msg = DebugMessageFormatter.format("caught={%s}",
-                                              new Object[] {ex});
+    StringBuilder message = new StringBuilder();
+    if (!msg.isEmpty())
+    {
+      message.append(msg).append(" ");
+    }
+    message.append(DebugMessageFormatter.format("caught={%s}",
+        new Object[] { ex }));
 
     String stack = null;
     if(stackTrace != null)
@@ -631,23 +498,22 @@
                                                         settings.stackDepth,
                                                         settings.includeCause);
     }
-    publish(category, level, signature, sourceLocation, msg, stack);
+    publish(category, signature, sourceLocation, message.toString(), stack);
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void traceJEAccess(LogLevel level,
-                            TraceSettings settings,
+  public void traceJEAccess(TraceSettings settings,
                             String signature,
                             String sourceLocation,
                             OperationStatus status,
-                            Database database, Transaction txn,
-                            DatabaseEntry key, DatabaseEntry data,
-                            StackTraceElement[] stackTrace)
+                            Database database,
+                            Transaction txn, DatabaseEntry key,
+                            DatabaseEntry data, StackTraceElement[] stackTrace)
   {
-    LogCategory category = DebugLogCategory.DATABASE_ACCESS;
+    LogCategory category = DebugLogCategory.MESSAGE;
 
     // Build the string that is common to category DATABASE_ACCESS.
     StringBuilder builder = new StringBuilder();
@@ -707,55 +573,21 @@
       stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
                                                         settings.stackDepth);
     }
-    publish(category, level, signature, sourceLocation,
-            builder.toString(), stack);
+    publish(category, signature, sourceLocation, builder.toString(),
+            stack);
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void traceData(LogLevel level,
-                        TraceSettings settings,
-                        String signature,
-                        String sourceLocation,
-                        byte[] data,
-                        StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.DATA;
-    if(data != null)
-    {
-      StringBuilder builder = new StringBuilder();
-      builder.append(ServerConstants.EOL);
-      builder.append("data(len=");
-      builder.append(data.length);
-      builder.append("):");
-      builder.append(ServerConstants.EOL);
-      StaticUtils.byteArrayToHexPlusAscii(builder, data, 4);
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
-                                                        settings.stackDepth);
-    }
-    publish(category, level, signature, sourceLocation,
-            builder.toString(), stack);
-    }
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceProtocolElement(LogLevel level,
-                                   TraceSettings settings,
+  public void traceProtocolElement(TraceSettings settings,
                                    String signature,
                                    String sourceLocation,
                                    String decodedForm,
                                    StackTraceElement[] stackTrace)
   {
-    LogCategory category = DebugLogCategory.PROTOCOL;
+    LogCategory category = DebugLogCategory.MESSAGE;
 
     StringBuilder builder = new StringBuilder();
     builder.append(ServerConstants.EOL);
@@ -767,8 +599,8 @@
       stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
                                                         settings.stackDepth);
     }
-    publish(category, level, signature, sourceLocation,
-            builder.toString(), stack);
+    publish(category, signature, sourceLocation, builder.toString(),
+            stack);
   }
 
   /**
@@ -789,8 +621,8 @@
   // Publishes a record, optionally performing some "special" work:
   // - injecting a stack trace into the message
   // - format the message with argument values
-  private void publish(LogCategory category, LogLevel level, String signature,
-                       String sourceLocation, String msg, String stack)
+  private void publish(LogCategory category, String signature, String sourceLocation,
+                       String msg, String stack)
   {
     Thread thread = Thread.currentThread();
 
@@ -809,8 +641,7 @@
     buf.append(" ");
 
     // Emit the debug level.
-    buf.append(level);
-    buf.append(" ");
+    buf.append("TRACE ");
 
     // Emit thread info.
     buf.append("thread={");
diff --git a/opendj3-server-dev/src/server/org/opends/server/loggers/debug/TraceSettings.java b/opendj3-server-dev/src/server/org/opends/server/loggers/debug/TraceSettings.java
index 96b2168..1d1de03 100644
--- a/opendj3-server-dev/src/server/org/opends/server/loggers/debug/TraceSettings.java
+++ b/opendj3-server-dev/src/server/org/opends/server/loggers/debug/TraceSettings.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.loggers.debug;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.DebugLogLevel;
 import org.opends.server.types.DebugLogCategory;
@@ -193,7 +194,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
           DebugTargetCfg config,
-          List<Message> unacceptableReasons)
+          List<LocalizableMessage> unacceptableReasons)
   {
     // This should alwas be acceptable. We are assuing that the scope for this
     // trace setting is the same sine its part of the DN.
@@ -208,7 +209,7 @@
     // Default result code.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // We can assume that the target scope did not change since its the
     // naming attribute. Changing it would result in a modify DN.
diff --git a/opendj3-server-dev/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java b/opendj3-server-dev/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
index 953563d..9466e66 100644
--- a/opendj3-server-dev/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
+++ b/opendj3-server-dev/src/server/org/opends/server/monitors/DatabaseEnvironmentMonitor.java
@@ -34,7 +34,7 @@
 import java.util.*;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.api.MonitorProvider;
@@ -72,7 +72,7 @@
    */
   private static class FilterStats implements Comparable<FilterStats>
   {
-    private volatile Message failureReason = Message.EMPTY;
+    private volatile LocalizableMessage failureReason = LocalizableMessage.EMPTY;
     private long maxMatchingEntries = -1;
     private final AtomicInteger hits = new AtomicInteger();
 
@@ -80,7 +80,7 @@
       return this.hits.get() - that.hits.get();
     }
 
-    private void update(int hitCount, Message failureReason)
+    private void update(int hitCount, LocalizableMessage failureReason)
     {
       this.hits.getAndAdd(hitCount);
       this.failureReason = failureReason;
@@ -89,7 +89,7 @@
     private void update(int hitCount, long matchingEntries)
     {
       this.hits.getAndAdd(hitCount);
-      this.failureReason = Message.EMPTY;
+      this.failureReason = LocalizableMessage.EMPTY;
       synchronized(this)
       {
         if(matchingEntries > maxMatchingEntries)
@@ -312,7 +312,7 @@
    * @param searchFilter The search filter that was evaluated.
    * @param failureMessage The reason why an index was not used.
    */
-  public void updateStats(SearchFilter searchFilter, Message failureMessage)
+  public void updateStats(SearchFilter searchFilter, LocalizableMessage failureMessage)
   {
     if(!filterUseEnabled)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java b/opendj3-server-dev/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java
index 798a12d..8a4a329 100644
--- a/opendj3-server-dev/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/monitors/EntryCacheMonitorProvider.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.monitors;
 
@@ -30,7 +31,7 @@
 
 import java.util.ArrayList;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.EntryCacheCfg;
 import org.opends.server.admin.std.server.EntryCacheMonitorProviderCfg;
 import org.opends.server.api.EntryCache;
@@ -97,7 +98,7 @@
       monitorConfiguration = configuration;
     }
     if (monitorConfiguration == null) {
-      Message message =
+      LocalizableMessage message =
         INFO_WARN_CONFIG_ENTRYCACHE_NO_MONITOR_CONFIG_ENTRY.get(
         ConfigConstants.DN_ENTRY_CACHE_MONITOR_CONFIG,
         monitorName);
@@ -105,7 +106,7 @@
       throw new ConfigException(message);
     }
     if (!monitorConfiguration.isEnabled()) {
-      Message message =
+      LocalizableMessage message =
         INFO_WARN_CONFIG_ENTRYCACHE_MONITOR_CONFIG_DISABLED.get(
         ConfigConstants.DN_ENTRY_CACHE_MONITOR_CONFIG,
         monitorName);
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/AttributeCleanupPlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/AttributeCleanupPlugin.java
index 22cea4c..4c9efa6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/AttributeCleanupPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/AttributeCleanupPlugin.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2011 profiq s.r.o.
- *      Portions copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.plugins;
 
@@ -37,7 +37,7 @@
 import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.AttributeCleanupPluginCfg;
 import org.opends.server.admin.std.server.PluginCfg;
@@ -253,14 +253,14 @@
       case PRE_PARSE_MODIFY:
         break;
       default:
-        final Message message = ERR_PLUGIN_ATTR_CLEANUP_INITIALIZE_PLUGIN
+        final LocalizableMessage message = ERR_PLUGIN_ATTR_CLEANUP_INITIALIZE_PLUGIN
             .get(String.valueOf(t));
         throw new ConfigException(message);
       }
     }
 
     /* Verify the current configuration. */
-    final List<Message> messages = new LinkedList<Message>();
+    final List<LocalizableMessage> messages = new LinkedList<LocalizableMessage>();
     if (!isConfigurationChangeAcceptable(configuration, messages))
     {
       throw new ConfigException(messages.get(0));
@@ -280,7 +280,7 @@
    */
   @Override
   public boolean isConfigurationAcceptable(final PluginCfg configuration,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     final AttributeCleanupPluginCfg cfg =
       (AttributeCleanupPluginCfg) configuration;
@@ -294,7 +294,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(
-      final AttributeCleanupPluginCfg config, final List<Message> messages)
+      final AttributeCleanupPluginCfg config, final List<LocalizableMessage> messages)
   {
     /*
      * The admin framework will ensure that there are no duplicate attributes to
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/ChangeNumberControlPlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/ChangeNumberControlPlugin.java
index c578d0c..426582f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/ChangeNumberControlPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/ChangeNumberControlPlugin.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  *      Portions Copyright 2013 ForgeRock AS
  */
 package org.opends.server.plugins;
@@ -33,7 +33,7 @@
 import java.util.TreeSet;
 import java.io.IOException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.PluginCfgDefn;
 import org.opends.server.admin.std.server.ChangeNumberControlPluginCfg;
@@ -146,7 +146,7 @@
           break;
 
         default:
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_CHANGE_NUMBER_INVALID_PLUGIN_TYPE.get(t.toString());
           throw new ConfigException(message);
       }
@@ -172,7 +172,7 @@
         found.append(t.toString());
       }
 
-      Message message = ERR_PLUGIN_CHANGE_NUMBER_INVALID_PLUGIN_TYPE_LIST.get(
+      LocalizableMessage message = ERR_PLUGIN_CHANGE_NUMBER_INVALID_PLUGIN_TYPE_LIST.get(
               found.toString(), expected.toString());
           throw new ConfigException(message);
     }
@@ -249,7 +249,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     ChangeNumberControlPluginCfg cfg =
         (ChangeNumberControlPluginCfg) configuration;
@@ -263,7 +263,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       ChangeNumberControlPluginCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -282,7 +282,7 @@
 
 
         default:
-          Message message = ERR_PLUGIN_CHANGE_NUMBER_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_CHANGE_NUMBER_INVALID_PLUGIN_TYPE.get(
                   pluginType.toString());
           unacceptableReasons.add(message);
           configAcceptable = false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/EntryUUIDPlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/EntryUUIDPlugin.java
index 602bc96..f6fa5e5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/EntryUUIDPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/EntryUUIDPlugin.java
@@ -35,7 +35,7 @@
 import java.util.Set;
 import java.util.UUID;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.PluginCfgDefn;
 import org.opends.server.admin.std.server.EntryUUIDPluginCfg;
@@ -136,7 +136,7 @@
 
 
         default:
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_ENTRYUUID_INVALID_PLUGIN_TYPE.get(t.toString());
           throw new ConfigException(message);
       }
@@ -231,7 +231,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     EntryUUIDPluginCfg cfg = (EntryUUIDPluginCfg) configuration;
     return isConfigurationChangeAcceptable(cfg, unacceptableReasons);
@@ -244,7 +244,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       EntryUUIDPluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -261,7 +261,7 @@
 
 
         default:
-          Message message = ERR_PLUGIN_ENTRYUUID_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_ENTRYUUID_INVALID_PLUGIN_TYPE.get(
                   pluginType.toString());
           unacceptableReasons.add(message);
           configAcceptable = false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/LDAPADListPlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/LDAPADListPlugin.java
index 2e01ff0..320d1be 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/LDAPADListPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/LDAPADListPlugin.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.plugins;
 
@@ -31,7 +31,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.PluginCfgDefn;
 import org.opends.server.admin.std.server.LDAPAttributeDescriptionListPluginCfg;
@@ -180,7 +180,7 @@
     // The set of plugin types must contain only the pre-parse search element.
     if (pluginTypes.isEmpty())
     {
-      Message message = ERR_PLUGIN_ADLIST_NO_PLUGIN_TYPES.get(
+      LocalizableMessage message = ERR_PLUGIN_ADLIST_NO_PLUGIN_TYPES.get(
           String.valueOf(configuration.dn()));
       throw new ConfigException(message);
     }
@@ -190,7 +190,7 @@
       {
         if (t != PluginType.PRE_PARSE_SEARCH)
         {
-          Message message = ERR_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE.get(
               String.valueOf(configuration.dn()), String.valueOf(t));
           throw new ConfigException(message);
         }
@@ -234,7 +234,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     LDAPAttributeDescriptionListPluginCfg cfg =
          (LDAPAttributeDescriptionListPluginCfg) configuration;
@@ -248,7 +248,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       LDAPAttributeDescriptionListPluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -263,7 +263,7 @@
 
 
         default:
-          Message message = ERR_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_ADLIST_INVALID_PLUGIN_TYPE.get(
                   String.valueOf(configuration.dn()),
                   String.valueOf(pluginType));
           unacceptableReasons.add(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/LastModPlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/LastModPlugin.java
index 7016221..b1526a0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/LastModPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/LastModPlugin.java
@@ -32,7 +32,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.PluginCfgDefn;
 import org.opends.server.admin.std.server.LastModPluginCfg;
@@ -136,7 +136,7 @@
 
 
         default:
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_LASTMOD_INVALID_PLUGIN_TYPE.get(t.toString());
           throw new ConfigException(message);
       }
@@ -320,7 +320,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     LastModPluginCfg cfg = (LastModPluginCfg) configuration;
     return isConfigurationChangeAcceptable(cfg, unacceptableReasons);
@@ -332,7 +332,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(LastModPluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -350,7 +350,7 @@
 
 
         default:
-          Message message = ERR_PLUGIN_LASTMOD_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_LASTMOD_INVALID_PLUGIN_TYPE.get(
                   pluginType.toString());
           unacceptableReasons.add(message);
           configAcceptable = false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/PasswordPolicyImportPlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/PasswordPolicyImportPlugin.java
index 83ce524..c90ef99 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/PasswordPolicyImportPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/PasswordPolicyImportPlugin.java
@@ -42,7 +42,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.PluginCfgDefn;
 import org.opends.server.admin.std.server.PasswordPolicyImportPluginCfg;
@@ -143,7 +143,7 @@
 
 
         default:
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_PWPIMPORT_INVALID_PLUGIN_TYPE.get(t.toString());
           throw new ConfigException(message);
       }
@@ -173,7 +173,7 @@
                   AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
         if (defaultAuthPasswordSchemes[0] == null)
         {
-          Message message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES.get(
+          LocalizableMessage message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES.get(
               AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
           throw new ConfigException(message);
         }
@@ -190,14 +190,14 @@
              DirectoryServer.getPasswordStorageScheme(schemeDN);
         if (defaultAuthPasswordSchemes[i] == null)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_PWIMPORT_NO_SUCH_DEFAULT_AUTH_SCHEME.get(
                    String.valueOf(schemeDN));
           throw new ConfigException(message);
         }
         else if (! defaultAuthPasswordSchemes[i].supportsAuthPasswordSyntax())
         {
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME.get(
                    String.valueOf(schemeDN));
           throw new ConfigException(message);
@@ -229,7 +229,7 @@
                   toLowerCase(STORAGE_SCHEME_NAME_SALTED_SHA_1));
         if (defaultUserPasswordSchemes[0] == null)
         {
-          Message message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES.get(
+          LocalizableMessage message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES.get(
               STORAGE_SCHEME_NAME_SALTED_SHA_1);
           throw new ConfigException(message);
         }
@@ -246,7 +246,7 @@
              DirectoryServer.getPasswordStorageScheme(schemeDN);
         if (defaultUserPasswordSchemes[i] == null)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME.get(
                    String.valueOf(schemeDN));
           throw new ConfigException(message);
@@ -372,7 +372,7 @@
                 .getAuthenticationPolicy(policyDN);
             if (authPolicy == null)
             {
-              Message message = WARN_PLUGIN_PWIMPORT_NO_SUCH_POLICY.get(
+              LocalizableMessage message = WARN_PLUGIN_PWIMPORT_NO_SUCH_POLICY.get(
                   String.valueOf(entry.getName()), String.valueOf(policyDN));
               logError(message);
             }
@@ -385,7 +385,7 @@
           }
           catch (DirectoryException de)
           {
-            Message message = WARN_PLUGIN_PWIMPORT_CANNOT_DECODE_POLICY_DN.get(
+            LocalizableMessage message = WARN_PLUGIN_PWIMPORT_CANNOT_DECODE_POLICY_DN.get(
                 String.valueOf(entry.getName()), de.getMessageObject());
             logError(message);
             break policyLoop;
@@ -433,7 +433,7 @@
                       TRACER.debugCaught(DebugLogLevel.ERROR, e);
                     }
 
-                    Message message =
+                    LocalizableMessage message =
                       ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD
                         .get(policy.getPasswordAttribute().getNameOrOID(),
                             String.valueOf(entry.getName()),
@@ -468,7 +468,7 @@
                       TRACER.debugCaught(DebugLogLevel.ERROR, e);
                     }
 
-                    Message message =
+                    LocalizableMessage message =
                       ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD
                         .get(policy.getPasswordAttribute().getNameOrOID(),
                             String.valueOf(entry.getName()),
@@ -533,7 +533,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              Message message = ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD
+              LocalizableMessage message = ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD
                   .get(t.getNameOrOID(), String.valueOf(entry.getName()),
                       stackTraceToSingleLineString(e));
               logError(message);
@@ -591,7 +591,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              Message message = ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD
+              LocalizableMessage message = ERR_PLUGIN_PWPIMPORT_ERROR_ENCODING_PASSWORD
                   .get(t.getNameOrOID(), String.valueOf(entry.getName()),
                       stackTraceToSingleLineString(e));
               logError(message);
@@ -623,7 +623,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     PasswordPolicyImportPluginCfg config =
          (PasswordPolicyImportPluginCfg) configuration;
@@ -637,7 +637,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       PasswordPolicyImportPluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -652,7 +652,7 @@
 
 
         default:
-          Message message = ERR_PLUGIN_PWPIMPORT_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_PWPIMPORT_INVALID_PLUGIN_TYPE.get(
                   pluginType.toString());
           unacceptableReasons.add(message);
           configAcceptable = false;
@@ -673,7 +673,7 @@
                 AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
       if (defaultAuthSchemes[0] == null)
       {
-        Message message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES.get(
+        LocalizableMessage message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_AUTH_SCHEMES.get(
                 AUTH_PASSWORD_SCHEME_NAME_SALTED_SHA_1);
         unacceptableReasons.add(message);
         configAcceptable = false;
@@ -690,7 +690,7 @@
              DirectoryServer.getPasswordStorageScheme(schemeDN);
         if (defaultAuthSchemes[i] == null)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_PWIMPORT_NO_SUCH_DEFAULT_AUTH_SCHEME.get(
                    String.valueOf(schemeDN));
           unacceptableReasons.add(message);
@@ -698,7 +698,7 @@
         }
         else if (! defaultAuthSchemes[i].supportsAuthPasswordSyntax())
         {
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_AUTH_SCHEME.get(
                    String.valueOf(schemeDN));
           unacceptableReasons.add(message);
@@ -722,7 +722,7 @@
                 toLowerCase(STORAGE_SCHEME_NAME_SALTED_SHA_1));
       if (defaultUserSchemes[0] == null)
       {
-        Message message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES.get(
+        LocalizableMessage message = ERR_PLUGIN_PWIMPORT_NO_DEFAULT_USER_SCHEMES.get(
                 STORAGE_SCHEME_NAME_SALTED_SHA_1);
         unacceptableReasons.add(message);
         configAcceptable = false;
@@ -739,7 +739,7 @@
              DirectoryServer.getPasswordStorageScheme(schemeDN);
         if (defaultUserSchemes[i] == null)
         {
-          Message message = ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME.get(
+          LocalizableMessage message = ERR_PLUGIN_PWIMPORT_INVALID_DEFAULT_USER_SCHEME.get(
                                  String.valueOf(schemeDN));
           unacceptableReasons.add(message);
           configAcceptable = false;
@@ -762,7 +762,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
 
     // Get the set of default password storage schemes for auth password
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 46672b6..f0c50b9 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
@@ -48,7 +48,7 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.ReferentialIntegrityPluginCfg;
 import org.opends.server.admin.std.server.PluginCfg;
 import org.opends.server.admin.std.meta.PluginCfgDefn;
@@ -176,7 +176,7 @@
          throws ConfigException
   {
     pluginCfg.addReferentialIntegrityChangeListener(this);
-    LinkedList<Message> unacceptableReasons = new LinkedList<Message>();
+    LinkedList<LocalizableMessage> unacceptableReasons = new LinkedList<LocalizableMessage>();
 
     if (!isConfigurationAcceptable(pluginCfg, unacceptableReasons))
     {
@@ -208,7 +208,7 @@
   {
     ResultCode         resultCode          = ResultCode.SUCCESS;
     boolean            adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     //Load base DNs from new configuration.
     LinkedHashSet<DN> newConfiguredBaseDNs = new LinkedHashSet<DN>();
@@ -289,7 +289,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     boolean isAcceptable = true;
     ReferentialIntegrityPluginCfg pluginCfg =
@@ -403,7 +403,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
           ReferentialIntegrityPluginCfg configuration,
-          List<Message> unacceptableReasons)
+          List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigurationAcceptable(configuration, unacceptableReasons);
   }
@@ -554,7 +554,7 @@
    *
    */
   private void processIntervalChange(long newInterval,
-                                     ArrayList<Message> msgs) {
+                                     ArrayList<LocalizableMessage> msgs) {
     if(interval == 0) {
       DirectoryServer.registerShutdownListener(this);
       interval=newInterval;
@@ -562,7 +562,7 @@
               get(Long.toString(interval)));
       setUpBackGroundProcessing();
     } else if(newInterval == 0) {
-      Message message=
+      LocalizableMessage message=
               INFO_PLUGIN_REFERENT_BACKGROUND_PROCESSING_STOPPING.get();
       msgs.add(message);
       processServerShutdown(message);
@@ -726,7 +726,7 @@
         return;
 
       default:
-        Message message1 = ERR_PLUGIN_REFERENT_SEARCH_FAILED.
+        LocalizableMessage message1 = ERR_PLUGIN_REFERENT_SEARCH_FAILED.
                 get(String.valueOf(operation.getErrorMessage()));
         logError(message1);
         return;
@@ -975,7 +975,7 @@
           } catch (DirectoryException ex) {
             //This exception should rarely happen since the plugin wrote the DN
             //strings originally.
-            Message message=
+            LocalizableMessage message=
                     ERR_PLUGIN_REFERENT_CANNOT_DECODE_STRING_AS_DN.
                                                            get(ex.getMessage());
             logError(message);
@@ -1022,7 +1022,7 @@
    *
    */
   @Override
-  public void processServerShutdown(Message reason)
+  public void processServerShutdown(LocalizableMessage reason)
   {
     stopRequested = true;
 
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 4a88ca1..7bb03ef 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
@@ -43,7 +43,7 @@
 import javax.crypto.*;
 import javax.crypto.spec.SecretKeySpec;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.PluginCfgDefn;
 import org.opends.server.admin.std.meta.SambaPasswordPluginCfgDefn.*;
@@ -894,10 +894,10 @@
   {
 
     // Verify config parameters.
-    final LinkedList<Message> messages = new LinkedList<Message>();
+    final LinkedList<LocalizableMessage> messages = new LinkedList<LocalizableMessage>();
     if (!isConfigurationAcceptable(configuration, messages))
     {
-      for (final Message m : messages)
+      for (final LocalizableMessage m : messages)
       {
         logError(m);
       }
@@ -925,7 +925,7 @@
    */
   public boolean isConfigurationAcceptable(
       final SambaPasswordPluginCfg configuration,
-      final List<Message> unacceptableReasons)
+      final List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigurationChangeAcceptable(configuration, unacceptableReasons);
   }
@@ -937,7 +937,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(
-      final SambaPasswordPluginCfg newConfig, final List<Message> messages)
+      final SambaPasswordPluginCfg newConfig, final List<LocalizableMessage> messages)
   {
     /*
      * The plugin implements only postoperationmodify and postoperationextended
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/SevenBitCleanPlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/SevenBitCleanPlugin.java
index df62be9..63aac52 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/SevenBitCleanPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/SevenBitCleanPlugin.java
@@ -31,7 +31,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.PluginCfgDefn;
 import org.opends.server.admin.std.server.SevenBitCleanPluginCfg;
@@ -110,7 +110,7 @@
 
 
         default:
-          Message message =
+          LocalizableMessage message =
               ERR_PLUGIN_7BIT_INVALID_PLUGIN_TYPE.get(t.toString());
           throw new ConfigException(message);
       }
@@ -178,7 +178,7 @@
           {
             if (! is7BitClean(v.getValue()))
             {
-              Message rejectMessage =
+              LocalizableMessage rejectMessage =
                    ERR_PLUGIN_7BIT_IMPORT_ATTR_NOT_CLEAN.get(
                         a.getNameWithOptions());
               return PluginResult.ImportLDIF.stopEntryProcessing(rejectMessage);
@@ -465,7 +465,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     SevenBitCleanPluginCfg cfg = (SevenBitCleanPluginCfg) configuration;
     return isConfigurationChangeAcceptable(cfg, unacceptableReasons);
@@ -478,7 +478,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       SevenBitCleanPluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -496,7 +496,7 @@
 
 
         default:
-          Message message = ERR_PLUGIN_7BIT_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_7BIT_INVALID_PLUGIN_TYPE.get(
                   pluginType.toString());
           unacceptableReasons.add(message);
           configAcceptable = false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/UniqueAttributePlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/UniqueAttributePlugin.java
index 3ca37d7..33db1ce 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/UniqueAttributePlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/UniqueAttributePlugin.java
@@ -29,7 +29,7 @@
 import java.util.*;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.PluginCfgDefn;
 import org.opends.server.admin.std.server.PluginCfg;
@@ -127,7 +127,7 @@
           break;
 
         default:
-          Message message =
+          LocalizableMessage message =
                   ERR_PLUGIN_UNIQUEATTR_INVALID_PLUGIN_TYPE.get(t.toString());
           throw new ConfigException(message);
 
@@ -325,7 +325,7 @@
         {
           uniqueAttrValue2Dn.remove(v2);
         }
-        Message msg = ERR_PLUGIN_UNIQUEATTR_ATTR_NOT_UNIQUE.get(
+        LocalizableMessage msg = ERR_PLUGIN_UNIQUEATTR_ATTR_NOT_UNIQUE.get(
             t.getNameOrOID(), v.getValue().toString(),
             conflictDN.toString());
         return PluginResult.PreOperation.stopProcessing(
@@ -339,7 +339,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_PLUGIN_UNIQUEATTR_INTERNAL_ERROR.get(
                              de.getResultCode().toString(),
                              de.getMessageObject());
@@ -558,7 +558,7 @@
       }
       if (conflictDN != null)
       {
-        Message message = ERR_PLUGIN_UNIQUEATTR_SYNC_NOT_UNIQUE.get(
+        LocalizableMessage message = ERR_PLUGIN_UNIQUEATTR_SYNC_NOT_UNIQUE.get(
                                t.getNameOrOID(),
                                operation.getConnectionID(),
                                operation.getOperationID(),
@@ -577,7 +577,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
 
-      Message message = ERR_PLUGIN_UNIQUEATTR_INTERNAL_ERROR_SYNC.get(
+      LocalizableMessage message = ERR_PLUGIN_UNIQUEATTR_INTERNAL_ERROR_SYNC.get(
                             operation.getConnectionID(),
                             operation.getOperationID(),
                             updatedEntryDN.toString(),
@@ -706,7 +706,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     UniqueAttributePluginCfg cfg = (UniqueAttributePluginCfg) configuration;
     return isConfigurationChangeAcceptable(cfg, unacceptableReasons);
@@ -720,7 +720,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       UniqueAttributePluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -741,7 +741,7 @@
           break;
 
         default:
-          Message message = ERR_PLUGIN_UNIQUEATTR_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_UNIQUEATTR_INVALID_PLUGIN_TYPE.get(
                                  pluginType.toString());
           unacceptableReasons.add(message);
           configAcceptable = false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/profiler/ProfileViewer.java b/opendj3-server-dev/src/server/org/opends/server/plugins/profiler/ProfileViewer.java
index 4b935e4..6621672 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/profiler/ProfileViewer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/profiler/ProfileViewer.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.plugins.profiler;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -106,7 +106,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    Message toolDescription = INFO_PROFILEVIEWER_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_PROFILEVIEWER_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.plugins.profiler.ProfileViewer",
                             toolDescription, false);
@@ -135,7 +135,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message =
+      LocalizableMessage message =
               ERR_PROFILEVIEWER_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       System.err.println(message);
@@ -150,7 +150,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message =
+      LocalizableMessage message =
               ERR_PROFILEVIEWER_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       System.err.println(message);
@@ -177,7 +177,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_PROFILEVIEWER_CANNOT_PROCESS_DATA_FILE.get(filename,
                                     stackTraceToSingleLineString(e));
         System.err.println(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java b/opendj3-server-dev/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java
index 7772459..ade166f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java
+++ b/opendj3-server-dev/src/server/org/opends/server/plugins/profiler/ProfilerPlugin.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.plugins.profiler;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -148,7 +149,7 @@
     // Make sure that this plugin is only registered as a startup plugin.
     if (pluginTypes.isEmpty())
     {
-      Message message = ERR_PLUGIN_PROFILER_NO_PLUGIN_TYPES.get(
+      LocalizableMessage message = ERR_PLUGIN_PROFILER_NO_PLUGIN_TYPES.get(
           String.valueOf(configEntryDN));
       throw new ConfigException(message);
     }
@@ -158,7 +159,7 @@
       {
         if (t != PluginType.STARTUP)
         {
-          Message message = ERR_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE.get(
               String.valueOf(configEntryDN), String.valueOf(t));
           throw new ConfigException(message);
         }
@@ -170,7 +171,7 @@
     File profileDirectory = getFileForPath(configuration.getProfileDirectory());
     if (! (profileDirectory.exists() && profileDirectory.isDirectory()))
     {
-      Message message = WARN_PLUGIN_PROFILER_INVALID_PROFILE_DIR.get(
+      LocalizableMessage message = WARN_PLUGIN_PROFILER_INVALID_PROFILE_DIR.get(
           profileDirectory.getAbsolutePath(), String.valueOf(configEntryDN));
       throw new ConfigException(message);
     }
@@ -207,7 +208,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA.
+          LocalizableMessage message = ERR_PLUGIN_PROFILER_CANNOT_WRITE_PROFILE_DATA.
               get(String.valueOf(configEntryDN), filename,
                   stackTraceToSingleLineString(e));
           ErrorLogger.logError(message);
@@ -243,7 +244,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     ProfilerPluginCfg config = (ProfilerPluginCfg) configuration;
     return isConfigurationChangeAcceptable(config, unacceptableReasons);
@@ -256,7 +257,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       ProfilerPluginCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
     DN cfgEntryDN = configuration.dn();
@@ -264,7 +265,7 @@
     // Make sure that the plugin is only registered as a startup plugin.
     if (configuration.getPluginType().isEmpty())
     {
-      Message message = ERR_PLUGIN_PROFILER_NO_PLUGIN_TYPES.get(
+      LocalizableMessage message = ERR_PLUGIN_PROFILER_NO_PLUGIN_TYPES.get(
               String.valueOf(cfgEntryDN));
       unacceptableReasons.add(message);
       configAcceptable = false;
@@ -275,7 +276,7 @@
       {
         if (t != PluginCfgDefn.PluginType.STARTUP)
         {
-          Message message = ERR_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE.get(
+          LocalizableMessage message = ERR_PLUGIN_PROFILER_INVALID_PLUGIN_TYPE.get(
                   String.valueOf(cfgEntryDN),
                                       String.valueOf(t));
           unacceptableReasons.add(message);
@@ -314,7 +315,7 @@
   {
     ResultCode        resultCode          = ResultCode.SUCCESS;
     boolean           adminActionRequired = false;
-    ArrayList<Message> messages            = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages            = new ArrayList<LocalizableMessage>();
 
     currentConfig = configuration;
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/LDIFConnectionHandler.java b/opendj3-server-dev/src/server/org/opends/server/protocols/LDIFConnectionHandler.java
index 841fd33..b4083c1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/LDIFConnectionHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/LDIFConnectionHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols;
 
@@ -34,8 +35,8 @@
 import java.util.LinkedHashMap;
 import java.util.List;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.ConnectionHandlerCfg;
 import org.opends.server.admin.std.server.LDIFConnectionHandlerCfg;
@@ -179,7 +180,7 @@
    * {@inheritDoc}
    */
   @Override()
-  public void finalizeConnectionHandler(Message finalizeReason)
+  public void finalizeConnectionHandler(LocalizableMessage finalizeReason)
   {
     stopRequested = true;
 
@@ -414,7 +415,7 @@
           errorEncountered = true;
           if (le.canContinueReading())
           {
-            Message m =
+            LocalizableMessage m =
                  ERR_LDIF_CONNHANDLER_CANNOT_READ_CHANGE_RECORD_NONFATAL.get(
                       le.getMessageObject());
             writer.writeComment(m, 78);
@@ -422,7 +423,7 @@
           }
           else
           {
-            Message m =
+            LocalizableMessage m =
                  ERR_LDIF_CONNHANDLER_CANNOT_READ_CHANGE_RECORD_FATAL.get(
                       le.getMessageObject());
             writer.writeComment(m, 78);
@@ -461,7 +462,7 @@
 
         if (operation == null)
         {
-          Message m = INFO_LDIF_CONNHANDLER_UNKNOWN_CHANGETYPE.get(
+          LocalizableMessage m = INFO_LDIF_CONNHANDLER_UNKNOWN_CHANGETYPE.get(
                changeRecord.getChangeOperationType().getLDIFChangeType());
           writer.writeComment(m, 78);
         }
@@ -473,12 +474,12 @@
                              operation.getResultCode().toString());
           }
 
-          Message m = INFO_LDIF_CONNHANDLER_RESULT_CODE.get(
+          LocalizableMessage m = INFO_LDIF_CONNHANDLER_RESULT_CODE.get(
                            operation.getResultCode().getIntValue(),
                            operation.getResultCode().toString());
           writer.writeComment(m, 78);
 
-          MessageBuilder errorMessage = operation.getErrorMessage();
+          LocalizableMessageBuilder errorMessage = operation.getErrorMessage();
           if ((errorMessage != null) && (errorMessage.length() > 0))
           {
             m = INFO_LDIF_CONNHANDLER_ERROR_MESSAGE.get(errorMessage);
@@ -514,7 +515,7 @@
       }
 
       fullyProcessed = false;
-      Message m = ERR_LDIF_CONNHANDLER_IO_ERROR.get(inputPath,
+      LocalizableMessage m = ERR_LDIF_CONNHANDLER_IO_ERROR.get(inputPath,
                                                     getExceptionMessage(ioe));
       logError(m);
       DirectoryConfig.sendAlertNotification(this,
@@ -573,7 +574,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message m = ERR_LDIF_CONNHANDLER_CANNOT_RENAME.get(inputPath,
+        LocalizableMessage m = ERR_LDIF_CONNHANDLER_CANNOT_RENAME.get(inputPath,
                          renamedPath, getExceptionMessage(e));
         logError(m);
         DirectoryConfig.sendAlertNotification(this,
@@ -598,7 +599,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message m = ERR_LDIF_CONNHANDLER_CANNOT_DELETE.get(inputPath,
+        LocalizableMessage m = ERR_LDIF_CONNHANDLER_CANNOT_DELETE.get(inputPath,
                          getExceptionMessage(e));
         logError(m);
         DirectoryConfig.sendAlertNotification(this,
@@ -629,7 +630,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(ConnectionHandlerCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     LDIFConnectionHandlerCfg cfg = (LDIFConnectionHandlerCfg) configuration;
     return isConfigurationChangeAcceptable(cfg, unacceptableReasons);
@@ -642,7 +643,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       LDIFConnectionHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // The configuration should always be acceptable.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1ByteSequenceReader.java b/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1ByteSequenceReader.java
index d6f09cb..e3563b1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1ByteSequenceReader.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1ByteSequenceReader.java
@@ -32,7 +32,7 @@
 import java.util.LinkedList;
 import java.io.IOException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.ldap.ByteSequenceReader;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ByteStringBuilder;
@@ -83,7 +83,7 @@
       // Read just the type.
       if(reader.remaining() <= 0)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ASN1_TRUCATED_TYPE_BYTE.get();
         throw new ASN1Exception(message);
       }
@@ -166,7 +166,7 @@
     {
       if(throwEofException)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ASN1_TRUCATED_TYPE_BYTE.get();
         throw new ASN1Exception(message);
       }
@@ -196,7 +196,7 @@
     {
       if(throwEofException)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ASN1_TRUNCATED_LENGTH_BYTE.get();
         throw new ASN1Exception(message);
       }
@@ -209,7 +209,7 @@
       int lengthBytesNeeded = peekLength;
       if (lengthBytesNeeded > 4)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(lengthBytesNeeded);
         throw new ASN1Exception(message);
       }
@@ -219,7 +219,7 @@
       {
         if(throwEofException)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ASN1_TRUNCATED_LENGTH_BYTES.get(lengthBytesNeeded);
           throw new ASN1Exception(message);
         }
@@ -238,7 +238,7 @@
     // message size.
     if ((maxElementSize > 0) && (peekLength > maxElementSize))
     {
-      Message m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get(
+      LocalizableMessage m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get(
           peekLength, maxElementSize);
       throw new ASN1Exception(m);
     }
@@ -256,14 +256,14 @@
 
     if (peekLength != 1)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_BOOLEAN_INVALID_LENGTH.get(peekLength);
       throw new ASN1Exception(message);
     }
 
     if(reader.remaining() < peekLength)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_BOOLEAN_TRUNCATED_VALUE.get(peekLength);
       throw new ASN1Exception(message);
     }
@@ -283,7 +283,7 @@
 
     if ((peekLength < 1) || (peekLength > 4))
     {
-      Message message = ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength);
+      LocalizableMessage message = ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength);
       throw new ASN1Exception(message);
     }
 
@@ -302,14 +302,14 @@
 
     if ((peekLength < 1) || (peekLength > 8))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength);
       throw new ASN1Exception(message);
     }
 
     if(reader.remaining() < peekLength)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_INTEGER_TRUNCATED_VALUE.get(peekLength);
       throw new ASN1Exception(message);
     }
@@ -358,7 +358,7 @@
     // Make sure that the decoded length is exactly zero byte.
     if (peekLength != 0)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_NULL_INVALID_LENGTH.get(peekLength);
       throw new ASN1Exception(message);
     }
@@ -375,7 +375,7 @@
 
     if(reader.remaining() < peekLength)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_OCTET_STRING_TRUNCATED_VALUE.get(peekLength);
       throw new ASN1Exception(message);
     }
@@ -404,7 +404,7 @@
 
     if(reader.remaining() < peekLength)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_OCTET_STRING_TRUNCATED_VALUE.get(peekLength);
       throw new ASN1Exception(message);
     }
@@ -424,7 +424,7 @@
     // Copy the value.
     if(reader.remaining() < peekLength)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_OCTET_STRING_TRUNCATED_VALUE.get(peekLength);
       throw new ASN1Exception(message);
     }
@@ -443,7 +443,7 @@
 
     if(reader.remaining() < peekLength)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_SEQUENCE_SET_TRUNCATED_VALUE.get(peekLength);
       throw new ASN1Exception(message);
     }
@@ -484,7 +484,7 @@
   {
     if(readerStack.isEmpty())
     {
-      Message message = ERR_ASN1_SEQUENCE_READ_NOT_STARTED.get();
+      LocalizableMessage message = ERR_ASN1_SEQUENCE_READ_NOT_STARTED.get();
       throw new ASN1Exception(message);
     }
 
@@ -530,7 +530,7 @@
 
     if(reader.remaining() < peekLength)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_SKIP_TRUNCATED_VALUE.get(peekLength);
       throw new ASN1Exception(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1Exception.java b/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1Exception.java
index f234a28..71a2cf2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1Exception.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1Exception.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.protocols.asn1;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -62,7 +62,7 @@
    *
    * @param  message    The message that explains the problem that occurred.
    */
-  public ASN1Exception(Message message)
+  public ASN1Exception(LocalizableMessage message)
   {
     super(message);
   }
@@ -76,7 +76,7 @@
    * @param  message    The message that explains the problem that occurred.
    * @param  cause      The exception that was caught to trigger this exception.
    */
-  public ASN1Exception(Message message, Throwable cause)
+  public ASN1Exception(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java b/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java
index be4371f..4fb439c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/ASN1InputStreamReader.java
@@ -34,7 +34,7 @@
 import java.io.InputStream;
 import java.util.LinkedList;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ByteStringBuilder;
@@ -107,7 +107,7 @@
     }
     catch(IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_READ_ERROR.get(ioe.toString());
       throw new ASN1Exception(message, ioe);
     }
@@ -140,7 +140,7 @@
     }
     catch(IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_READ_ERROR.get(ioe.toString());
       throw new ASN1Exception(message, ioe);
     }
@@ -175,7 +175,7 @@
     {
       if(throwEofException)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ASN1_TRUCATED_TYPE_BYTE.get();
         throw new ASN1Exception(message);
       }
@@ -216,7 +216,7 @@
     {
       if(throwEofException)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ASN1_TRUNCATED_LENGTH_BYTE.get();
         throw new ASN1Exception(message);
       }
@@ -228,7 +228,7 @@
       lengthBytesNeeded = peekLength;
       if (lengthBytesNeeded > 4)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ASN1_INVALID_NUM_LENGTH_BYTES.get(lengthBytesNeeded);
         throw new ASN1Exception(message);
       }
@@ -248,7 +248,7 @@
           state = ELEMENT_READ_STATE_NEED_ADDITIONAL_LENGTH_BYTES;
           if(throwEofException)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ASN1_TRUNCATED_LENGTH_BYTES.get(lengthBytesNeeded);
             throw new ASN1Exception(message);
           }
@@ -263,7 +263,7 @@
     // message size.
     if ((maxElementSize > 0) && (peekLength > maxElementSize))
     {
-      Message m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get(
+      LocalizableMessage m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get(
           peekLength, maxElementSize);
       throw new ASN1Exception(m);
     }
@@ -304,7 +304,7 @@
         state = ELEMENT_READ_STATE_NEED_ADDITIONAL_LENGTH_BYTES;
         if(throwEofException)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ASN1_TRUNCATED_LENGTH_BYTES.get(lengthBytesNeeded);
           throw new ASN1Exception(message);
         }
@@ -318,7 +318,7 @@
     // message size.
     if ((maxElementSize > 0) && (peekLength > maxElementSize))
     {
-      Message m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get(
+      LocalizableMessage m = ERR_LDAP_CLIENT_DECODE_MAX_REQUEST_SIZE_EXCEEDED.get(
           peekLength, maxElementSize);
       throw new ASN1Exception(m);
     }
@@ -342,7 +342,7 @@
     }
     catch(IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_READ_ERROR.get(ioe.toString());
       throw new ASN1Exception(message, ioe);
     }
@@ -371,7 +371,7 @@
     }
     catch(IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_READ_ERROR.get(ioe.toString());
       throw new ASN1Exception(message, ioe);
     }
@@ -387,7 +387,7 @@
 
     if (peekLength != 1)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_BOOLEAN_INVALID_LENGTH.get(peekLength);
       throw new ASN1Exception(message);
     }
@@ -397,7 +397,7 @@
       int readByte = in.read();
       if(readByte == -1)
       {
-        Message message = ERR_ASN1_BOOLEAN_TRUNCATED_VALUE.get(peekLength);
+        LocalizableMessage message = ERR_ASN1_BOOLEAN_TRUNCATED_VALUE.get(peekLength);
         throw new ASN1Exception(message);
       }
 
@@ -413,7 +413,7 @@
     }
     catch(IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_READ_ERROR.get(ioe.toString());
       throw new ASN1Exception(message, ioe);
     }
@@ -429,7 +429,7 @@
 
     if ((peekLength < 1) || (peekLength > 4))
     {
-      Message message = ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength);
+      LocalizableMessage message = ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength);
       throw new ASN1Exception(message);
     }
 
@@ -448,7 +448,7 @@
 
     if ((peekLength < 1) || (peekLength > 8))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_INTEGER_INVALID_LENGTH.get(peekLength);
       throw new ASN1Exception(message);
     }
@@ -463,7 +463,7 @@
           int readByte = in.read();
           if(readByte == -1)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ASN1_INTEGER_TRUNCATED_VALUE.get(peekLength);
             throw new ASN1Exception(message);
           }
@@ -485,7 +485,7 @@
           int readByte = in.read();
           if(readByte == -1)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ASN1_INTEGER_TRUNCATED_VALUE.get(peekLength);
             throw new ASN1Exception(message);
           }
@@ -509,7 +509,7 @@
     }
     catch(IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_READ_ERROR.get(ioe.toString());
       throw new ASN1Exception(message, ioe);
     }
@@ -526,7 +526,7 @@
     // Make sure that the decoded length is exactly zero byte.
     if (peekLength != 0)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_NULL_INVALID_LENGTH.get(peekLength);
       throw new ASN1Exception(message);
     }
@@ -565,7 +565,7 @@
         bytesRead = in.read(value, peekLength - bytesNeeded, bytesNeeded);
         if(bytesRead < 0)
         {
-          Message message =
+          LocalizableMessage message =
             ERR_ASN1_OCTET_STRING_TRUNCATED_VALUE.get(peekLength);
           throw new ASN1Exception(message);
         }
@@ -585,7 +585,7 @@
     }
     catch(IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_READ_ERROR.get(ioe.toString());
       throw new ASN1Exception(message, ioe);
     }
@@ -630,7 +630,7 @@
         bytesRead = in.read(buffer, peekLength - bytesNeeded, bytesNeeded);
         if(bytesRead < 0)
         {
-          Message message =
+          LocalizableMessage message =
             ERR_ASN1_OCTET_STRING_TRUNCATED_VALUE.get(peekLength);
           throw new ASN1Exception(message);
         }
@@ -641,7 +641,7 @@
     }
     catch(IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_READ_ERROR.get(ioe.toString());
       throw new ASN1Exception(message, ioe);
     }
@@ -695,7 +695,7 @@
         bytesRead = buffer.append(in, bytesNeeded);
         if(bytesRead < 0)
         {
-          Message message =
+          LocalizableMessage message =
             ERR_ASN1_OCTET_STRING_TRUNCATED_VALUE.get(peekLength);
           throw new ASN1Exception(message);
         }
@@ -713,7 +713,7 @@
     }
     catch(IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_READ_ERROR.get(ioe.toString());
       throw new ASN1Exception(message, ioe);
     }
@@ -771,7 +771,7 @@
   {
     if(streamStack.isEmpty())
     {
-      Message message = ERR_ASN1_SEQUENCE_READ_NOT_STARTED.get();
+      LocalizableMessage message = ERR_ASN1_SEQUENCE_READ_NOT_STARTED.get();
       throw new ASN1Exception(message);
     }
 
@@ -791,7 +791,7 @@
       }
       catch(IOException ioe)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ASN1_READ_ERROR.get(ioe.toString());
         throw new ASN1Exception(message, ioe);
       }
@@ -836,7 +836,7 @@
       long bytesSkipped = in.skip(peekLength);
       if(bytesSkipped != peekLength)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ASN1_SKIP_TRUNCATED_VALUE.get(peekLength);
         throw new ASN1Exception(message);
       }
@@ -844,7 +844,7 @@
     }
     catch(IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ASN1_READ_ERROR.get(ioe.toString());
       throw new ASN1Exception(message, ioe);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/GSERException.java b/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/GSERException.java
index 841cb67..8f9556b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/GSERException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/GSERException.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2013-2014 Manuel Gaupp
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.asn1;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.IdentifiedException;
 
 
@@ -55,7 +56,7 @@
    *
    * @param  message    The message that explains the problem that occurred.
    */
-  public GSERException(Message message)
+  public GSERException(LocalizableMessage message)
   {
     super(message);
   }
@@ -69,7 +70,7 @@
    * @param  message    The message that explains the problem that occurred.
    * @param  cause      The exception that was caught to trigger this exception.
    */
-  public GSERException(Message message, Throwable cause)
+  public GSERException(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/GSERParser.java b/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/GSERParser.java
index 4f4a04e..bf74b8f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/GSERParser.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/asn1/GSERParser.java
@@ -23,6 +23,7 @@
  *
  *      Copyright 2013-2014 Manuel Gaupp
  *      Copyright 2014 ForgeRock AS
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.asn1;
 
@@ -31,7 +32,7 @@
 import java.math.BigInteger;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.ProtocolMessages.*;
 import static org.forgerock.util.Reject.*;
 
@@ -231,7 +232,7 @@
     }
     else
     {
-      Message msg = ERR_GSER_PATTERN_NO_MATCH.get(pattern.pattern(),
+      LocalizableMessage msg = ERR_GSER_PATTERN_NO_MATCH.get(pattern.pattern(),
                       gserValue.substring(pos,length));
       throw new GSERException(msg);
     }
@@ -257,7 +258,7 @@
     }
     else
     {
-      Message msg = ERR_GSER_PATTERN_NO_MATCH.get(pattern.pattern(),
+      LocalizableMessage msg = ERR_GSER_PATTERN_NO_MATCH.get(pattern.pattern(),
                       gserValue.substring(pos,length));
       throw new GSERException(msg);
     }
@@ -345,7 +346,7 @@
   {
     if (!hasNext(GSER_SEP))
     {
-      Message msg = ERR_GSER_NO_VALID_SEPARATOR.get(gserValue
+      LocalizableMessage msg = ERR_GSER_NO_VALID_SEPARATOR.get(gserValue
                       .substring(pos,length));
       throw new GSERException(msg);
     }
@@ -368,7 +369,7 @@
   {
     if (!hasNext(GSER_STRING))
     {
-      Message msg = ERR_GSER_NO_VALID_STRING.get(gserValue
+      LocalizableMessage msg = ERR_GSER_NO_VALID_STRING.get(gserValue
                       .substring(pos,length));
       throw new GSERException(msg);
     }
@@ -392,7 +393,7 @@
   {
     if (!hasNext(GSER_INTEGER))
     {
-      Message msg = ERR_GSER_NO_VALID_INTEGER.get(gserValue
+      LocalizableMessage msg = ERR_GSER_NO_VALID_INTEGER.get(gserValue
                       .substring(pos,length));
       throw new GSERException(msg);
     }
@@ -413,7 +414,7 @@
   {
     if (!hasNext(GSER_INTEGER))
     {
-      Message msg = ERR_GSER_NO_VALID_INTEGER.get(gserValue
+      LocalizableMessage msg = ERR_GSER_NO_VALID_INTEGER.get(gserValue
                       .substring(pos,length));
       throw new GSERException(msg);
     }
@@ -434,14 +435,14 @@
   {
     if (!hasNext(GSER_IDENTIFIER))
     {
-      Message msg = ERR_GSER_NO_VALID_IDENTIFIER.get(gserValue
+      LocalizableMessage msg = ERR_GSER_NO_VALID_IDENTIFIER.get(gserValue
                       .substring(pos,length));
       throw new GSERException(msg);
     }
     String identifier = next(GSER_IDENTIFIER);
     if (!hasNext(GSER_MSP))
     {
-      Message msg = ERR_GSER_SPACE_CHAR_EXPECTED.get(gserValue
+      LocalizableMessage msg = ERR_GSER_SPACE_CHAR_EXPECTED.get(gserValue
                       .substring(pos,length));
       throw new GSERException(msg);
     }
@@ -463,7 +464,7 @@
   {
     if (!hasNext(GSER_CHOICE_IDENTIFIER))
     {
-      Message msg = ERR_GSER_NO_VALID_IDENTIFIEDCHOICE.get(gserValue
+      LocalizableMessage msg = ERR_GSER_NO_VALID_IDENTIFIEDCHOICE.get(gserValue
                       .substring(pos,length));
       throw new GSERException(msg);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/http/CollectClientConnectionsFilter.java b/opendj3-server-dev/src/server/org/opends/server/protocols/http/CollectClientConnectionsFilter.java
index 1e0ead7..e407a51 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/http/CollectClientConnectionsFilter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/http/CollectClientConnectionsFilter.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.protocols.http;
 
@@ -48,7 +48,7 @@
 import org.forgerock.opendj.ldap.responses.SearchResultEntry;
 import org.forgerock.opendj.rest2ldap.Rest2LDAP;
 import org.forgerock.opendj.rest2ldap.servlet.Rest2LDAPContextFactory;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.ConnectionHandlerCfg;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.schema.SchemaConstants;
@@ -359,7 +359,7 @@
 
       sendErrorReponse(ctx.response, ctx.prettyPrint, ex);
 
-      Message message =
+      LocalizableMessage message =
           INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT.get(ctx.clientConnection
               .getClientHostPort(), ctx.clientConnection.getServerHostPort(),
               getExceptionMessage(e));
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPClientConnection.java b/opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPClientConnection.java
index 89a6a0a..413ae61 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPClientConnection.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/http/HTTPClientConnection.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.protocols.http;
 
@@ -45,8 +45,8 @@
 import org.forgerock.opendj.ldap.ResultHandler;
 import org.forgerock.opendj.ldap.SearchResultHandler;
 import org.forgerock.opendj.ldap.responses.Result;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.core.AddOperation;
 import org.opends.server.core.BindOperation;
@@ -537,7 +537,7 @@
    */
   @Override
   public void disconnect(DisconnectReason disconnectReason,
-      boolean sendNotification, Message message)
+      boolean sendNotification, LocalizableMessage message)
   {
     // Set a flag indicating that the connection is being terminated so
     // that no new requests will be accepted. Also cancel all operations
@@ -569,7 +569,7 @@
 
     if (message != null)
     {
-      MessageBuilder msgBuilder = new MessageBuilder();
+      LocalizableMessageBuilder msgBuilder = new LocalizableMessageBuilder();
       msgBuilder.append(disconnectReason.getClosureMessage());
       msgBuilder.append(": ");
       msgBuilder.append(message);
@@ -662,7 +662,7 @@
       // then reject the operation.
       if (disconnectRequested)
       {
-        Message message = WARN_CLIENT_DISCONNECT_IN_PROGRESS.get();
+        LocalizableMessage message = WARN_CLIENT_DISCONNECT_IN_PROGRESS.get();
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
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 93b6eb8..2fe3bfb 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
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.http;
@@ -67,7 +67,7 @@
 import org.glassfish.grizzly.ssl.SSLEngineConfigurator;
 import org.glassfish.grizzly.strategies.SameThreadIOStrategy;
 import org.glassfish.grizzly.utils.Charsets;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.ConnectionHandlerCfg;
 import org.opends.server.admin.std.server.HTTPConnectionHandlerCfg;
@@ -215,7 +215,7 @@
   {
     // Create variables to include in the response.
     boolean adminActionRequired = false;
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     if (anyChangeRequiresRestart(config))
     {
@@ -327,7 +327,7 @@
 
   /** {@inheritDoc} */
   @Override
-  public void finalizeConnectionHandler(Message finalizeReason)
+  public void finalizeConnectionHandler(LocalizableMessage finalizeReason)
   {
     shutdownRequested = true;
     // Unregister this as a change listener.
@@ -534,7 +534,7 @@
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationAcceptable(ConnectionHandlerCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     HTTPConnectionHandlerCfg config = (HTTPConnectionHandlerCfg) configuration;
 
@@ -542,7 +542,7 @@
     {
       // Attempt to bind to the listen port on all configured addresses to
       // verify whether the connection handler will be able to start.
-      Message errorMessage =
+      LocalizableMessage errorMessage =
           checkAnyListenAddressInUse(config.getListenAddress(), config
               .getListenPort(), config.isAllowTCPReuseAddress(), config.dn());
       if (errorMessage != null)
@@ -592,7 +592,7 @@
    * @return an error message if at least one of the address is already in use,
    *         null otherwise.
    */
-  private Message checkAnyListenAddressInUse(
+  private LocalizableMessage checkAnyListenAddressInUse(
       Collection<InetAddress> listenAddresses, int listenPort,
       boolean allowReuseAddress, DN configEntryDN)
   {
@@ -622,7 +622,7 @@
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationChangeAcceptable(
-      HTTPConnectionHandlerCfg configuration, List<Message> unacceptableReasons)
+      HTTPConnectionHandlerCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigurationAcceptable(configuration, unacceptableReasons);
   }
@@ -640,7 +640,7 @@
 
   /** {@inheritDoc} */
   @Override
-  public void processServerShutdown(Message reason)
+  public void processServerShutdown(LocalizableMessage reason)
   {
     shutdownRequested = true;
   }
@@ -750,7 +750,7 @@
           // encountered a failure. Rather than enter a potential
           // infinite loop of failures, disable this acceptor and
           // log an error.
-          Message message =
+          LocalizableMessage message =
               ERR_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES.get(friendlyName,
                   String.valueOf(currentConfig.dn()),
                   stackTraceToSingleLineString(e));
@@ -1025,7 +1025,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       ResultCode resCode = DirectoryServer.getServerErrorResultCode();
-      Message message =
+      LocalizableMessage message =
           ERR_CONNHANDLER_SSL_CANNOT_INITIALIZE.get(getExceptionMessage(e));
       throw new DirectoryException(resCode, message, e);
     }
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 3434b0b..c76f8ff 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
@@ -31,7 +31,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.ConnectionHandler;
 import org.opends.server.core.*;
@@ -296,7 +296,7 @@
     Entry userEntry = DirectoryServer.getEntry(userDN);
     if (userEntry == null)
     {
-      Message m =
+      LocalizableMessage m =
            ERR_INTERNALCONN_NO_SUCH_USER.get(String.valueOf(userDN));
       throw new DirectoryException(ResultCode.NO_SUCH_OBJECT, m);
     }
@@ -2595,7 +2595,7 @@
   @Override()
   public void disconnect(DisconnectReason disconnectReason,
                          boolean sendNotification,
-                         Message message)
+                         LocalizableMessage message)
   {
     // No implementation is required since there is nothing to
     // disconnect.  Further, since there is no real disconnect, we can
@@ -2700,7 +2700,7 @@
     // Internal operations cannot be cancelled.
     // TODO: i18n
     return new CancelResult(ResultCode.CANNOT_CANCEL,
-        Message.raw("Internal operations cannot be cancelled"));
+        LocalizableMessage.raw("Internal operations cannot be cancelled"));
   }
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalConnectionHandler.java b/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalConnectionHandler.java
index 67e2bb8..a1ad6b8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalConnectionHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalConnectionHandler.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.internal;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -136,7 +137,7 @@
    * {@inheritDoc}
    */
   @Override()
-  public void finalizeConnectionHandler(Message finalizeReason)
+  public void finalizeConnectionHandler(LocalizableMessage finalizeReason)
   {
     // No implementation is required.
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalLDAPOutputStream.java b/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalLDAPOutputStream.java
index 8138db3..1628b4e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalLDAPOutputStream.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/internal/InternalLDAPOutputStream.java
@@ -33,7 +33,7 @@
 import java.io.InputStream;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.*;
 import org.opends.server.protocols.asn1.ASN1;
 import org.opends.server.protocols.asn1.ASN1Reader;
@@ -295,7 +295,7 @@
   {
     if (closed)
     {
-      Message m = ERR_INTERNALOS_CLOSED.get();
+      LocalizableMessage m = ERR_INTERNALOS_CLOSED.get();
       throw new IOException(m.toString());
     }
 
@@ -416,7 +416,7 @@
 
 
       default:
-        Message m = ERR_INTERNALOS_INVALID_REQUEST.get(
+        LocalizableMessage m = ERR_INTERNALOS_INVALID_REQUEST.get(
                          message.getProtocolElementName());
         throw new IOException(m.toString());
     }
@@ -480,7 +480,7 @@
 
     if (request.getAuthenticationType() == AuthenticationType.SASL)
     {
-      Message m = ERR_INTERNALOS_SASL_BIND_NOT_SUPPORTED.get();
+      LocalizableMessage m = ERR_INTERNALOS_SASL_BIND_NOT_SUPPORTED.get();
       BindResponseProtocolOp bindResponse =
            new BindResponseProtocolOp(
                     LDAPResultCode.UNWILLING_TO_PERFORM, m);
@@ -612,7 +612,7 @@
          message.getExtendedRequestProtocolOp();
     if (request.getOID().equals(OID_START_TLS_REQUEST))
     {
-      Message m = ERR_INTERNALOS_STARTTLS_NOT_SUPPORTED.get();
+      LocalizableMessage m = ERR_INTERNALOS_STARTTLS_NOT_SUPPORTED.get();
       ExtendedResponseProtocolOp extendedResponse =
            new ExtendedResponseProtocolOp(
                     LDAPResultCode.UNWILLING_TO_PERFORM, m);
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java b/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java
index 9481a04..845608d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java
@@ -34,8 +34,8 @@
 import javax.management.NotificationListener;
 import javax.management.remote.JMXConnectionNotification;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.*;
 import org.opends.server.core.*;
 import org.opends.server.core.networkgroups.NetworkGroup;
@@ -427,8 +427,8 @@
     // Check if we have enough privilege
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      Message message = ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES.get();
-      addOperation.setErrorMessage(new MessageBuilder(message));
+      LocalizableMessage message = ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES.get();
+      addOperation.setErrorMessage(new LocalizableMessageBuilder(message));
       addOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -470,8 +470,8 @@
     // Check if we have enough privilege
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      Message message = ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES.get();
-      addOperation.setErrorMessage(new MessageBuilder(message));
+      LocalizableMessage message = ERR_JMX_ADD_INSUFFICIENT_PRIVILEGES.get();
+      addOperation.setErrorMessage(new LocalizableMessageBuilder(message));
       addOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -500,8 +500,8 @@
     // Check if we have enough privilege
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      Message message = ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES.get();
-      deleteOperation.setErrorMessage(new MessageBuilder(message));
+      LocalizableMessage message = ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES.get();
+      deleteOperation.setErrorMessage(new LocalizableMessageBuilder(message));
       deleteOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -534,8 +534,8 @@
     // Check if we have enough privilege
     if (! hasPrivilege(Privilege.JMX_READ, null))
     {
-      Message message = ERR_JMX_SEARCH_INSUFFICIENT_PRIVILEGES.get();
-      compareOperation.setErrorMessage(new MessageBuilder(message));
+      LocalizableMessage message = ERR_JMX_SEARCH_INSUFFICIENT_PRIVILEGES.get();
+      compareOperation.setErrorMessage(new LocalizableMessageBuilder(message));
       compareOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -564,8 +564,8 @@
     // Check if we have enough privilege
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      Message message = ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES.get();
-      deleteOperation.setErrorMessage(new MessageBuilder(message));
+      LocalizableMessage message = ERR_JMX_DELETE_INSUFFICIENT_PRIVILEGES.get();
+      deleteOperation.setErrorMessage(new LocalizableMessageBuilder(message));
       deleteOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -621,8 +621,8 @@
 
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      Message message = ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES.get();
-      modifyOperation.setErrorMessage(new MessageBuilder(message));
+      LocalizableMessage message = ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES.get();
+      modifyOperation.setErrorMessage(new LocalizableMessageBuilder(message));
       modifyOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -655,8 +655,8 @@
                              modifications);
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      Message message = ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES.get();
-      modifyOperation.setErrorMessage(new MessageBuilder(message));
+      LocalizableMessage message = ERR_JMX_MODIFY_INSUFFICIENT_PRIVILEGES.get();
+      modifyOperation.setErrorMessage(new LocalizableMessageBuilder(message));
       modifyOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -712,8 +712,8 @@
 
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      Message message = ERR_JMX_MODDN_INSUFFICIENT_PRIVILEGES.get();
-      modifyDNOperation.setErrorMessage(new MessageBuilder(message));
+      LocalizableMessage message = ERR_JMX_MODDN_INSUFFICIENT_PRIVILEGES.get();
+      modifyDNOperation.setErrorMessage(new LocalizableMessageBuilder(message));
       modifyDNOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -751,8 +751,8 @@
 
     if (! hasPrivilege(Privilege.JMX_WRITE, null))
     {
-      Message message = ERR_JMX_MODDN_INSUFFICIENT_PRIVILEGES.get();
-      modifyDNOperation.setErrorMessage(new MessageBuilder(message));
+      LocalizableMessage message = ERR_JMX_MODDN_INSUFFICIENT_PRIVILEGES.get();
+      modifyDNOperation.setErrorMessage(new LocalizableMessageBuilder(message));
       modifyDNOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -816,8 +816,8 @@
 
     if (! hasPrivilege(Privilege.JMX_READ, null))
     {
-      Message message = ERR_JMX_SEARCH_INSUFFICIENT_PRIVILEGES.get();
-      searchOperation.setErrorMessage(new MessageBuilder(message));
+      LocalizableMessage message = ERR_JMX_SEARCH_INSUFFICIENT_PRIVILEGES.get();
+      searchOperation.setErrorMessage(new LocalizableMessageBuilder(message));
       searchOperation.setResultCode(ResultCode.INSUFFICIENT_ACCESS_RIGHTS) ;
     }
     else
@@ -955,7 +955,7 @@
   @Override
   public void disconnect(DisconnectReason disconnectReason,
                          boolean sendNotification,
-                         Message message)
+                         LocalizableMessage message)
   {
     // we are already performing a disconnect
     if (disconnectStarted)
@@ -1073,7 +1073,7 @@
     // Jmx operations cannot be cancelled.
     // TODO: i18n
     return new CancelResult(ResultCode.CANNOT_CANCEL,
-        Message.raw("Jmx operations cannot be cancelled"));
+        LocalizableMessage.raw("Jmx operations cannot be cancelled"));
   }
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java b/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java
index 8da12b9..3ede31f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxConnectionHandler.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2013-2014 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.protocols.jmx;
 
@@ -31,7 +31,7 @@
 import java.util.*;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.ConnectionHandlerCfg;
 import org.opends.server.admin.std.server.JMXConnectionHandlerCfg;
@@ -110,7 +110,7 @@
       JMXConnectionHandlerCfg config) {
     // Create variables to include in the response.
     ResultCode resultCode = ResultCode.SUCCESS;
-    final List<Message> messages = new ArrayList<Message>();
+    final List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // Determine whether or not the RMI connection needs restarting.
     boolean rmiConnectorRestart = false;
@@ -160,7 +160,7 @@
       catch (RuntimeException e)
       {
         resultCode = DirectoryServer.getServerErrorResultCode();
-        messages.add(Message.raw(e.getMessage()));
+        messages.add(LocalizableMessage.raw(e.getMessage()));
       }
     }
 
@@ -184,7 +184,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void finalizeConnectionHandler(Message finalizeReason) {
+  public void finalizeConnectionHandler(LocalizableMessage finalizeReason) {
     // Make sure that we don't get notified of any more changes.
     currentConfig.removeJMXChangeListener(this);
 
@@ -301,11 +301,11 @@
     // Configuration is ok.
     currentConfig = config;
 
-    final List<Message> reasons = new LinkedList<Message>();
+    final List<LocalizableMessage> reasons = new LinkedList<LocalizableMessage>();
     if (!isPortConfigurationAcceptable(String.valueOf(config.dn()),
         config.getListenPort(), reasons))
     {
-      Message message = reasons.get(0);
+      LocalizableMessage message = reasons.get(0);
       logError(message);
       throw new InitializationException(message);
     }
@@ -368,7 +368,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(ConnectionHandlerCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     JMXConnectionHandlerCfg config = (JMXConnectionHandlerCfg) configuration;
 
@@ -400,14 +400,14 @@
    * @return true is the port is free to use, false otherwise.
    */
   private boolean isPortConfigurationAcceptable(String configDN,
-                      int newPort, List<Message> unacceptableReasons) {
+                      int newPort, List<LocalizableMessage> unacceptableReasons) {
     try {
       if (StaticUtils.isAddressInUse(
           new InetSocketAddress(newPort).getAddress(), newPort, true)) {
         throw new IOException(ERR_CONNHANDLER_ADDRESS_INUSE.get().toString());
       }
     } catch (Exception e) {
-      Message message = ERR_CONNHANDLER_CANNOT_BIND.get("JMX", configDN,
+      LocalizableMessage message = ERR_CONNHANDLER_CANNOT_BIND.get("JMX", configDN,
               WILDCARD_ADDRESS, newPort, getExceptionMessage(e));
       unacceptableReasons.add(message);
       return false;
@@ -421,7 +421,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       JMXConnectionHandlerCfg config,
-      List<Message> unacceptableReasons) {
+      List<LocalizableMessage> unacceptableReasons) {
     // All validation is performed by the admin framework.
     return true;
   }
@@ -445,7 +445,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void processServerShutdown(Message reason) {
+  public void processServerShutdown(LocalizableMessage reason) {
     // We should also close the RMI registry.
     rmiConnector.finalizeConnectionHandler(true);
   }
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 fdc716a..b7aa3a3 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.jmx;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.*;
 
@@ -289,7 +289,7 @@
       // Check JMX_READ privilege.
       if (! jmxClientConnection.hasPrivilege(Privilege.JMX_READ, null))
       {
-        Message message = ERR_JMX_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_JMX_INSUFFICIENT_PRIVILEGES.get();
 
         jmxClientConnection.disconnect(DisconnectReason.CONNECTION_REJECTED,
             false, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/AddResponseProtocolOp.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/AddResponseProtocolOp.java
index 6fc8f36..82e1235 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/AddResponseProtocolOp.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/AddResponseProtocolOp.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.Iterator;
@@ -64,7 +65,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private Message errorMessage;
+  private LocalizableMessage errorMessage;
 
 
 
@@ -91,7 +92,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public AddResponseProtocolOp(int resultCode, Message errorMessage)
+  public AddResponseProtocolOp(int resultCode, LocalizableMessage errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -110,7 +111,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public AddResponseProtocolOp(int resultCode, Message errorMessage,
+  public AddResponseProtocolOp(int resultCode, LocalizableMessage errorMessage,
                                DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -139,7 +140,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return errorMessage;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/BindResponseProtocolOp.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/BindResponseProtocolOp.java
index 00a9475..50c85be 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/BindResponseProtocolOp.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/BindResponseProtocolOp.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.Iterator;
@@ -69,7 +69,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private Message errorMessage;
+  private LocalizableMessage errorMessage;
 
 
 
@@ -97,7 +97,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public BindResponseProtocolOp(int resultCode, Message errorMessage)
+  public BindResponseProtocolOp(int resultCode, LocalizableMessage errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -117,7 +117,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public BindResponseProtocolOp(int resultCode, Message errorMessage,
+  public BindResponseProtocolOp(int resultCode, LocalizableMessage errorMessage,
                                 DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -139,7 +139,7 @@
    * @param  referralURLs           The referral URLs for this response.
    * @param  serverSASLCredentials  The server SASL credentials for this
    */
-  public BindResponseProtocolOp(int resultCode, Message errorMessage,
+  public BindResponseProtocolOp(int resultCode, LocalizableMessage errorMessage,
                                 DN matchedDN, List<String> referralURLs,
                                 ByteString serverSASLCredentials)
   {
@@ -170,7 +170,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return errorMessage;
   }
@@ -366,7 +366,7 @@
     if (errorMessage != null)
     {
       buffer.append(indentBuf);
-      buffer.append("  Error Message:  ");
+      buffer.append("  Error LocalizableMessage:  ");
       buffer.append(errorMessage);
       buffer.append(EOL);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/CompareResponseProtocolOp.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/CompareResponseProtocolOp.java
index 16fcc43..34fa0a0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/CompareResponseProtocolOp.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/CompareResponseProtocolOp.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.Iterator;
@@ -64,7 +65,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private Message errorMessage;
+  private LocalizableMessage errorMessage;
 
 
 
@@ -91,7 +92,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public CompareResponseProtocolOp(int resultCode, Message errorMessage)
+  public CompareResponseProtocolOp(int resultCode, LocalizableMessage errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -110,7 +111,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public CompareResponseProtocolOp(int resultCode, Message errorMessage,
+  public CompareResponseProtocolOp(int resultCode, LocalizableMessage errorMessage,
                                    DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -139,7 +140,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return errorMessage;
   }
@@ -310,7 +311,7 @@
     if (errorMessage != null)
     {
       buffer.append(indentBuf);
-      buffer.append("  Error Message:  ");
+      buffer.append("  Error LocalizableMessage:  ");
       buffer.append(errorMessage);
       buffer.append(EOL);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/DeleteResponseProtocolOp.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/DeleteResponseProtocolOp.java
index fd40fe4..8c091eb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/DeleteResponseProtocolOp.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/DeleteResponseProtocolOp.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.Iterator;
@@ -67,7 +68,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private Message errorMessage;
+  private LocalizableMessage errorMessage;
 
 
 
@@ -94,7 +95,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public DeleteResponseProtocolOp(int resultCode, Message errorMessage)
+  public DeleteResponseProtocolOp(int resultCode, LocalizableMessage errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -113,7 +114,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public DeleteResponseProtocolOp(int resultCode, Message errorMessage,
+  public DeleteResponseProtocolOp(int resultCode, LocalizableMessage errorMessage,
                                   DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -142,7 +143,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return errorMessage;
   }
@@ -313,7 +314,7 @@
     if (errorMessage != null)
     {
       buffer.append(indentBuf);
-      buffer.append("  Error Message:  ");
+      buffer.append("  Error LocalizableMessage:  ");
       buffer.append(errorMessage);
       buffer.append(EOL);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ExtendedResponseProtocolOp.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ExtendedResponseProtocolOp.java
index 34ced77..2d1ee55 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ExtendedResponseProtocolOp.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ExtendedResponseProtocolOp.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.Iterator;
@@ -69,7 +69,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private Message errorMessage;
+  private LocalizableMessage errorMessage;
 
   // The OID for this extended response.
   private String oid;
@@ -101,7 +101,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public ExtendedResponseProtocolOp(int resultCode, Message errorMessage)
+  public ExtendedResponseProtocolOp(int resultCode, LocalizableMessage errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -122,7 +122,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public ExtendedResponseProtocolOp(int resultCode, Message errorMessage,
+  public ExtendedResponseProtocolOp(int resultCode, LocalizableMessage errorMessage,
                                     DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -146,7 +146,7 @@
    * @param  oid           The OID for this extended response.
    * @param  value         The value for this extended response.
    */
-  public ExtendedResponseProtocolOp(int resultCode, Message errorMessage,
+  public ExtendedResponseProtocolOp(int resultCode, LocalizableMessage errorMessage,
                                     DN matchedDN, List<String> referralURLs,
                                     String oid, ByteString value)
   {
@@ -178,7 +178,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return errorMessage;
   }
@@ -396,7 +396,7 @@
     if (errorMessage != null)
     {
       buffer.append(indentBuf);
-      buffer.append("  Error Message:  ");
+      buffer.append("  Error LocalizableMessage:  ");
       buffer.append(errorMessage);
       buffer.append(EOL);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPAttribute.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPAttribute.java
index 1308adf..eea04d8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPAttribute.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPAttribute.java
@@ -33,7 +33,7 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
 
@@ -267,7 +267,7 @@
       if (!builder.add(
           AttributeValues.create(attrType, value)))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAP_ATTRIBUTE_DUPLICATE_VALUES.get(attributeType);
         throw new LDAPException(
                 LDAPResultCode.ATTRIBUTE_OR_VALUE_EXISTS, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
index e0ebed6..036f48e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPClientConnection.java
@@ -54,8 +54,8 @@
 
 import javax.net.ssl.SSLException;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.ConnectionHandler;
 import org.opends.server.core.*;
@@ -769,7 +769,7 @@
       resultCode = DirectoryServer.getServerErrorResultCode();
     }
 
-    MessageBuilder errorMessage = operation.getErrorMessage();
+    LocalizableMessageBuilder errorMessage = operation.getErrorMessage();
     DN matchedDN = operation.getMatchedDN();
 
     // Referrals are not allowed for LDAPv2 clients.
@@ -933,7 +933,7 @@
     // any more referrals to this client for the rest of the operation.
     if (ldapVersion == 2)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPV2_SKIPPING_SEARCH_REFERENCE.get(getConnectionID(),
               searchOperation.getOperationID(), String
                   .valueOf(searchReference));
@@ -1048,7 +1048,7 @@
    */
   @Override
   public void disconnect(DisconnectReason disconnectReason,
-      boolean sendNotification, Message message)
+      boolean sendNotification, LocalizableMessage message)
   {
     // Set a flag indicating that the connection is being terminated so
     // that no new requests will be accepted. Also cancel all operations
@@ -1080,7 +1080,7 @@
 
     if (message != null)
     {
-      MessageBuilder msgBuilder = new MessageBuilder();
+      LocalizableMessageBuilder msgBuilder = new LocalizableMessageBuilder();
       msgBuilder.append(disconnectReason.getClosureMessage());
       msgBuilder.append(": ");
       msgBuilder.append(message);
@@ -1136,7 +1136,7 @@
           break;
         }
 
-        Message errMsg;
+        LocalizableMessage errMsg;
         if (message == null)
         {
           errMsg =
@@ -1251,7 +1251,7 @@
         // then reject the operation.
         if (disconnectRequested)
         {
-          Message message = WARN_CLIENT_DISCONNECT_IN_PROGRESS.get();
+          LocalizableMessage message = WARN_CLIENT_DISCONNECT_IN_PROGRESS.get();
           throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
               message);
         }
@@ -1264,7 +1264,7 @@
         // same message ID. If so, then we can't allow it.
         if (op != null)
         {
-          Message message =
+          LocalizableMessage message =
             WARN_LDAP_CLIENT_DUPLICATE_MESSAGE_ID.get(messageID);
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
               message);
@@ -1296,7 +1296,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
         WARN_LDAP_CLIENT_CANNOT_ENQUEUE.get(getExceptionMessage(e));
       throw new DirectoryException(DirectoryServer
           .getServerErrorResultCode(), message, e);
@@ -1631,7 +1631,7 @@
       {
         // The connection failed, but there was an unread partial message so
         // interpret this as an IO error.
-        Message m = ERR_LDAP_CLIENT_IO_ERROR_DURING_READ.get(String
+        LocalizableMessage m = ERR_LDAP_CLIENT_IO_ERROR_DURING_READ.get(String
             .valueOf(e));
         disconnect(DisconnectReason.IO_ERROR, true, m);
       }
@@ -1641,7 +1641,7 @@
         // as indicating that the client aborted (reset) the connection. This
         // happens when a client configures closes a connection which has been
         // configured with SO_LINGER set to 0.
-        Message m = ERR_LDAP_CLIENT_IO_ERROR_BEFORE_READ.get();
+        LocalizableMessage m = ERR_LDAP_CLIENT_IO_ERROR_BEFORE_READ.get();
         disconnect(DisconnectReason.CLIENT_DISCONNECT, true, m);
       }
 
@@ -1755,7 +1755,7 @@
         result = processUnbindRequest(message, opControls);
         return result;
       default:
-        Message msg =
+        LocalizableMessage msg =
             ERR_LDAP_DISCONNECT_DUE_TO_INVALID_REQUEST_TYPE.get(message
                 .getProtocolOpName(), message.getMessageID());
         disconnect(DisconnectReason.PROTOCOL_ERROR, true, msg);
@@ -1769,7 +1769,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message msg =
+      LocalizableMessage msg =
           ERR_LDAP_DISCONNECT_DUE_TO_PROCESSING_FAILURE.get(message
               .getProtocolOpName(), message.getMessageID(), String
               .valueOf(e));
@@ -1988,7 +1988,7 @@
       // This is an invalid authentication type, and therefore a
       // protocol error. As per RFC 2251, a protocol error in a bind
       // request must result in terminating the connection.
-      Message msg =
+      LocalizableMessage msg =
           ERR_LDAP_INVALID_BIND_AUTH_TYPE.get(message.getMessageID(),
               String.valueOf(protocolOp.getAuthenticationType()));
       disconnect(DisconnectReason.PROTOCOL_ERROR, true, msg);
@@ -2018,7 +2018,7 @@
       // If it was a protocol error, then terminate the connection.
       if (de.getResultCode() == ResultCode.PROTOCOL_ERROR)
       {
-        Message msg =
+        LocalizableMessage msg =
             ERR_LDAP_DISCONNECT_DUE_TO_BIND_PROTOCOL_ERROR.get(message
                 .getMessageID(), de.getMessageObject());
         disconnect(DisconnectReason.PROTOCOL_ERROR, true, msg);
@@ -2181,7 +2181,7 @@
     // close the connection.
     if (ldapVersion == 2)
     {
-      Message msg =
+      LocalizableMessage msg =
           ERR_LDAPV2_EXTENDED_REQUEST_NOT_ALLOWED.get(
               getConnectionID(), message.getMessageID());
       logError(msg);
@@ -2540,7 +2540,7 @@
    * {@inheritDoc}
    */
   @Override
-  public boolean prepareTLS(MessageBuilder unavailableReason)
+  public boolean prepareTLS(LocalizableMessageBuilder unavailableReason)
   {
     if (tlsActiveProvider != null)
     {
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 43c0faf..e94515c 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
@@ -46,8 +46,8 @@
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.SSLEngine;
 
+import org.forgerock.i18n.LocalizableMessage;
 import org.forgerock.opendj.ldap.AddressMask;
-import org.opends.messages.Message;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.ConnectionHandlerCfg;
 import org.opends.server.admin.std.server.LDAPConnectionHandlerCfg;
@@ -316,7 +316,7 @@
     // Create variables to include in the response.
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     // Note that the following properties cannot be modified:
     //
@@ -392,7 +392,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void finalizeConnectionHandler(Message finalizeReason)
+  public void finalizeConnectionHandler(LocalizableMessage finalizeReason)
   {
     shutdownRequested = true;
     currentConfig.removeLDAPChangeListener(this);
@@ -697,7 +697,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED.get(
+      LocalizableMessage message = ERR_LDAP_CONNHANDLER_OPEN_SELECTOR_FAILED.get(
           String.valueOf(config.dn()), stackTraceToSingleLineString(e));
       throw new InitializationException(message, e);
     }
@@ -748,7 +748,7 @@
 
     // Attempt to bind to the listen port on all configured addresses to
     // verify whether the connection handler will be able to start.
-    Message errorMessage =
+    LocalizableMessage errorMessage =
         checkAnyListenAddressInUse(listenAddresses, listenPort,
             allowReuseAddress, config.dn());
     if (errorMessage != null)
@@ -810,7 +810,7 @@
    */
   @Override()
   public boolean isConfigurationAcceptable(ConnectionHandlerCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     LDAPConnectionHandlerCfg config = (LDAPConnectionHandlerCfg) configuration;
 
@@ -819,7 +819,7 @@
     {
       // Attempt to bind to the listen port on all configured addresses to
       // verify whether the connection handler will be able to start.
-      Message errorMessage =
+      LocalizableMessage errorMessage =
           checkAnyListenAddressInUse(config.getListenAddress(), config
               .getListenPort(), config.isAllowTCPReuseAddress(), config.dn());
       if (errorMessage != null)
@@ -870,7 +870,7 @@
    * @return an error message if at least one of the address is already in use,
    *         null otherwise.
    */
-  private Message checkAnyListenAddressInUse(
+  private LocalizableMessage checkAnyListenAddressInUse(
       Collection<InetAddress> listenAddresses, int listenPort,
       boolean allowReuseAddress, DN configEntryDN)
   {
@@ -903,7 +903,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(
-      LDAPConnectionHandlerCfg config, List<Message> unacceptableReasons)
+      LDAPConnectionHandlerCfg config, List<LocalizableMessage> unacceptableReasons)
   {
     return isConfigurationAcceptable(config, unacceptableReasons);
   }
@@ -927,7 +927,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void processServerShutdown(Message reason)
+  public void processServerShutdown(LocalizableMessage reason)
   {
     shutdownRequested = true;
 
@@ -1066,7 +1066,7 @@
               // encountered a failure. Rather than enter a potential
               // infinite loop of failures, disable this acceptor and
               // log an error.
-              Message message = ERR_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES
+              LocalizableMessage message = ERR_CONNHANDLER_CONSECUTIVE_ACCEPT_FAILURES
                   .get(friendlyName, String.valueOf(currentConfig.dn()),
                       stackTraceToSingleLineString(e));
               logError(message);
@@ -1105,7 +1105,7 @@
         // only thing we can do here is log a message, send an alert,
         // and disable the selector until an administrator can figure
         // out what's going on.
-        Message message = ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR
+        LocalizableMessage message = ERR_LDAP_CONNHANDLER_UNCAUGHT_ERROR
             .get(String.valueOf(currentConfig.dn()),
                 stackTraceToSingleLineString(e));
         logError(message);
@@ -1290,7 +1290,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           INFO_CONNHANDLER_UNABLE_TO_REGISTER_CLIENT.get(clientConnection
               .getClientHostPort(), clientConnection.getServerHostPort(),
               getExceptionMessage(e));
@@ -1455,7 +1455,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       ResultCode resCode = DirectoryServer.getServerErrorResultCode();
-      Message message = ERR_CONNHANDLER_SSL_CANNOT_INITIALIZE
+      LocalizableMessage message = ERR_CONNHANDLER_SSL_CANNOT_INITIALIZE
           .get(getExceptionMessage(e));
       throw new DirectoryException(resCode, message, e);
     }
@@ -1508,7 +1508,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
       ResultCode resCode = DirectoryServer.getServerErrorResultCode();
-      Message message = ERR_CONNHANDLER_SSL_CANNOT_INITIALIZE
+      LocalizableMessage message = ERR_CONNHANDLER_SSL_CANNOT_INITIALIZE
           .get(getExceptionMessage(e));
       throw new DirectoryException(resCode, message, e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPFilter.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPFilter.java
index e611815..92d5ef6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPFilter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPFilter.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.ArrayList;
@@ -290,7 +290,7 @@
   {
     if (filterString == null)
     {
-      Message message = ERR_LDAP_FILTER_STRING_NULL.get();
+      LocalizableMessage message = ERR_LDAP_FILTER_STRING_NULL.get();
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
@@ -315,7 +315,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_UNCAUGHT_EXCEPTION.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_UNCAUGHT_EXCEPTION.get(
           filterString, String.valueOf(e));
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message, e);
     }
@@ -346,7 +346,7 @@
     int length = endPos - startPos;
     if (length <= 0)
     {
-      Message message = ERR_LDAP_FILTER_STRING_NULL.get();
+      LocalizableMessage message = ERR_LDAP_FILTER_STRING_NULL.get();
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
@@ -355,7 +355,7 @@
     if (1 < filterString.length()
          && filterString.startsWith("'") && filterString.endsWith("'"))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_FILTER_ENCLOSED_IN_APOSTROPHES.get(filterString);
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
@@ -371,7 +371,7 @@
       }
       else
       {
-        Message message = ERR_LDAP_FILTER_MISMATCHED_PARENTHESES.get(
+        LocalizableMessage message = ERR_LDAP_FILTER_MISMATCHED_PARENTHESES.get(
             filterString, startPos, endPos);
         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
@@ -413,7 +413,7 @@
 
     if (equalPos <= startPos)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_FILTER_NO_EQUAL_SIGN.get(filterString, startPos, endPos);
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
@@ -545,7 +545,7 @@
           // switch statement more efficient.  We'll fall through to the default
           // clause to reject them.
         default:
-          Message message = ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE.get(
+          LocalizableMessage message = ERR_LDAP_FILTER_INVALID_CHAR_IN_ATTR_TYPE.get(
               attrType, String.valueOf(attrType.charAt(i)), i);
           throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
@@ -595,7 +595,7 @@
             // binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+              LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                   filterString, equalPos+i+1);
               throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -657,7 +657,7 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                     filterString, equalPos+i+1);
                 throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -718,7 +718,7 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                     filterString, equalPos+i+1);
                 throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -777,7 +777,7 @@
     {
       if (filterType == FilterType.NOT)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAP_FILTER_NOT_EXACTLY_ONE.get(filterString, startPos, endPos);
         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
@@ -795,7 +795,7 @@
     if ((filterString.charAt(startPos) != '(') ||
         (filterString.charAt(endPos-1) != ')'))
     {
-      Message message = ERR_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES.get(
           filterString, startPos, endPos);
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
@@ -828,14 +828,14 @@
         }
         else if (pendingOpens < 0)
         {
-          Message message = ERR_LDAP_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS.
+          LocalizableMessage message = ERR_LDAP_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS.
               get(filterString, i);
           throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
       }
       else if (pendingOpens <= 0)
       {
-        Message message = ERR_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES.get(
+        LocalizableMessage message = ERR_LDAP_FILTER_COMPOUND_MISSING_PARENTHESES.get(
             filterString, startPos, endPos);
         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
@@ -846,7 +846,7 @@
     // list of open parenthesis positions must be empty.
     if (pendingOpens != 0)
     {
-      Message message = ERR_LDAP_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS.get(
           filterString, openPos);
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
@@ -857,7 +857,7 @@
     {
       if (filterComponents.size() != 1)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAP_FILTER_NOT_EXACTLY_ONE.get(filterString, startPos, endPos);
         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
@@ -922,7 +922,7 @@
     // If there were no asterisks, then this isn't a substring filter.
     if (asteriskPositions.isEmpty())
     {
-      Message message = ERR_LDAP_FILTER_SUBSTRING_NO_ASTERISKS.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_SUBSTRING_NO_ASTERISKS.get(
           filterString, equalPos+1, endPos);
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
@@ -949,7 +949,7 @@
             // binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+              LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                   filterString, equalPos+i+1);
               throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -1011,7 +1011,7 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                     filterString, equalPos+i+1);
                 throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -1072,7 +1072,7 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                     filterString, equalPos+i+1);
                 throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -1111,7 +1111,7 @@
             // binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+              LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                   filterString, equalPos+i+1);
               throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -1173,7 +1173,7 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                     filterString, equalPos+i+1);
                 throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -1234,7 +1234,7 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                     filterString, equalPos+i+1);
                 throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -1282,7 +1282,7 @@
             // binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+              LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                   filterString, equalPos+i+1);
               throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -1344,7 +1344,7 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                     filterString, equalPos+i+1);
                 throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -1405,7 +1405,7 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+                LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                     filterString, equalPos+i+1);
                 throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
             }
@@ -1490,7 +1490,7 @@
       int colonPos = filterString.indexOf(':',startPos);
       if (colonPos < 0)
       {
-        Message message = ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_COLON.get(
+        LocalizableMessage message = ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_COLON.get(
             filterString, startPos);
         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
       }
@@ -1544,7 +1544,7 @@
           // binary value.
           if ((i + 2) >= valueBytes.length)
           {
-            Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+            LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                 filterString, equalPos+i+1);
             throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
@@ -1606,7 +1606,7 @@
               byteValue = (byte) 0xF0;
               break;
             default:
-              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+              LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                   filterString, equalPos+i+1);
               throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
@@ -1667,7 +1667,7 @@
               byteValue |= (byte) 0x0F;
               break;
             default:
-              Message message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
+              LocalizableMessage message = ERR_LDAP_FILTER_INVALID_ESCAPED_BYTE.get(
                   filterString, equalPos+i+1);
               throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
           }
@@ -1692,7 +1692,7 @@
     // and/or a matching rule ID.
     if ((attributeType == null) && (matchingRuleID == null))
     {
-      Message message = ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR.get(
           filterString, startPos);
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
@@ -1949,7 +1949,7 @@
     {
       if (matchingRuleID == null)
       {
-        Message message = ERR_LDAP_FILTER_VALUE_WITH_NO_ATTR_OR_MR.get();
+        LocalizableMessage message = ERR_LDAP_FILTER_VALUE_WITH_NO_ATTR_OR_MR.get();
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
       }
       else
@@ -1958,7 +1958,7 @@
              DirectoryServer.getMatchingRule(toLowerCase(matchingRuleID));
         if (mr == null)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_FILTER_UNKNOWN_MATCHING_RULE.get(matchingRuleID);
           throw new DirectoryException(ResultCode.INAPPROPRIATE_MATCHING,
                                        message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPMessage.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPMessage.java
index d3fd2d1..7330500 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPMessage.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPMessage.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
 
@@ -626,11 +627,11 @@
     }
 
     buffer.append(indentBuf);
-    buffer.append("LDAP Message");
+    buffer.append("LDAP LocalizableMessage");
     buffer.append(EOL);
 
     buffer.append(indentBuf);
-    buffer.append("  Message ID:  ");
+    buffer.append("  LocalizableMessage ID:  ");
     buffer.append(messageID);
     buffer.append(EOL);
 
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 5b9775e..ab200cb 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
@@ -31,7 +31,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
 import org.opends.server.loggers.debug.DebugTracer;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.ProtocolMessages.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
@@ -75,7 +75,7 @@
     }
     catch(Exception e)
     {
-      Message message = ERR_LDAP_MESSAGE_DECODE_NULL.get();
+      LocalizableMessage message = ERR_LDAP_MESSAGE_DECODE_NULL.get();
       throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
@@ -91,7 +91,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MESSAGE_DECODE_MESSAGE_ID.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -108,7 +108,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MESSAGE_DECODE_PROTOCOL_OP.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -128,7 +128,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MESSAGE_DECODE_CONTROLS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -139,7 +139,7 @@
     }
     catch(Exception e)
     {
-      Message message = ERR_LDAP_MESSAGE_DECODE_NULL.get();
+      LocalizableMessage message = ERR_LDAP_MESSAGE_DECODE_NULL.get();
       throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
@@ -167,7 +167,7 @@
     }
     catch(Exception e)
     {
-      Message message = ERR_LDAP_PROTOCOL_OP_DECODE_NULL.get();
+      LocalizableMessage message = ERR_LDAP_PROTOCOL_OP_DECODE_NULL.get();
       throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
@@ -182,7 +182,7 @@
       case 0x47:                                                         // 0x47
       case 0x48:                                                         // 0x48
       case 0x49:                                                         // 0x49
-        Message message =
+        LocalizableMessage message =
             ERR_LDAP_PROTOCOL_OP_DECODE_INVALID_TYPE.get(type);
         throw new LDAPException(PROTOCOL_ERROR, message);
       case OP_TYPE_DELETE_REQUEST:                                       // 0x4A
@@ -306,7 +306,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_ABANDON_REQUEST_DECODE_ID.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -339,7 +339,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_ADD_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -357,7 +357,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_ADD_REQUEST_DECODE_DN.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_ADD_REQUEST_DECODE_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -381,7 +381,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_ADD_REQUEST_DECODE_ATTRS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -397,7 +397,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_ADD_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -431,7 +431,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -447,7 +447,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -473,16 +473,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    Message errorMessage;
+    LocalizableMessage errorMessage;
     try
     {
-      errorMessage = Message.raw(reader.readOctetStringAsString());
+      errorMessage = LocalizableMessage.raw(reader.readOctetStringAsString());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -495,7 +495,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -523,7 +523,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -539,7 +539,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -572,7 +572,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_BIND_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -589,7 +589,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_BIND_REQUEST_DECODE_VERSION.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -607,7 +607,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_BIND_REQUEST_DECODE_DN.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_BIND_REQUEST_DECODE_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -624,7 +624,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_BIND_REQUEST_DECODE_CREDENTIALS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -642,7 +642,7 @@
         }
         catch (Exception e)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_BIND_REQUEST_DECODE_PASSWORD.get(String.valueOf(e));
           throw new LDAPException(PROTOCOL_ERROR, message, e);
         }
@@ -661,13 +661,13 @@
         }
         catch (Exception e)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_BIND_REQUEST_DECODE_SASL_INFO.get(String.valueOf(e));
           throw new LDAPException(PROTOCOL_ERROR, message, e);
         }
         break;
       default:
-        Message message = ERR_LDAP_BIND_REQUEST_DECODE_INVALID_CRED_TYPE.get(
+        LocalizableMessage message = ERR_LDAP_BIND_REQUEST_DECODE_INVALID_CRED_TYPE.get(
             type);
         throw new LDAPException(AUTH_METHOD_NOT_SUPPORTED, message);
     }
@@ -683,7 +683,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_BIND_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -723,7 +723,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -739,7 +739,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -765,16 +765,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    Message errorMessage;
+    LocalizableMessage errorMessage;
     try
     {
-      errorMessage = Message.raw(reader.readOctetStringAsString());
+      errorMessage = LocalizableMessage.raw(reader.readOctetStringAsString());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -787,7 +787,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -820,7 +820,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
           throw new LDAPException(PROTOCOL_ERROR, message, e);
         }
@@ -840,7 +840,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_BIND_RESULT_DECODE_SERVER_SASL_CREDENTIALS.
                   get(String.valueOf(e));
           throw new LDAPException(PROTOCOL_ERROR, message, e);
@@ -866,7 +866,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -899,7 +899,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_COMPARE_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -917,7 +917,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_COMPARE_REQUEST_DECODE_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -933,7 +933,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_COMPARE_REQUEST_DECODE_AVA.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -950,7 +950,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_COMPARE_REQUEST_DECODE_TYPE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -968,7 +968,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_COMPARE_REQUEST_DECODE_VALUE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -984,7 +984,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_COMPARE_REQUEST_DECODE_AVA.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1000,7 +1000,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_COMPARE_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1034,7 +1034,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -1050,7 +1050,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1076,16 +1076,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    Message errorMessage;
+    LocalizableMessage errorMessage;
     try
     {
-      errorMessage = Message.raw(reader.readOctetStringAsString());
+      errorMessage = LocalizableMessage.raw(reader.readOctetStringAsString());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -1098,7 +1098,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1126,7 +1126,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1142,7 +1142,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -1175,7 +1175,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_DELETE_REQUEST_DECODE_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1205,7 +1205,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -1221,7 +1221,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1247,16 +1247,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    Message errorMessage;
+    LocalizableMessage errorMessage;
     try
     {
-      errorMessage = Message.raw(reader.readOctetStringAsString());
+      errorMessage = LocalizableMessage.raw(reader.readOctetStringAsString());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -1269,7 +1269,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1297,7 +1297,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1313,7 +1313,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -1349,7 +1349,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_EXTENDED_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1367,7 +1367,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_EXTENDED_REQUEST_DECODE_OID.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1388,7 +1388,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_EXTENDED_REQUEST_DECODE_VALUE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1404,7 +1404,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_EXTENDED_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1438,7 +1438,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -1454,7 +1454,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1480,16 +1480,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    Message errorMessage;
+    LocalizableMessage errorMessage;
     try
     {
-      errorMessage = Message.raw(reader.readOctetStringAsString());
+      errorMessage = LocalizableMessage.raw(reader.readOctetStringAsString());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -1502,7 +1502,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1534,7 +1534,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
           throw new LDAPException(PROTOCOL_ERROR, message, e);
         }
@@ -1553,7 +1553,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_EXTENDED_RESULT_DECODE_OID.get(String.valueOf(e));
           throw new LDAPException(PROTOCOL_ERROR, message, e);
         }
@@ -1572,7 +1572,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_EXTENDED_RESULT_DECODE_VALUE.get(String.valueOf(e));
           throw new LDAPException(PROTOCOL_ERROR, message, e);
         }
@@ -1597,7 +1597,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -1632,7 +1632,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_INTERMEDIATE_RESPONSE_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1659,7 +1659,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_OID.get(
                   e.getMessage());
           throw new LDAPException(PROTOCOL_ERROR, message);
@@ -1679,7 +1679,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_INTERMEDIATE_RESPONSE_CANNOT_DECODE_VALUE.
                   get(e.getMessage());
           throw new LDAPException(PROTOCOL_ERROR, message);
@@ -1705,7 +1705,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_INTERMEDIATE_RESPONSE_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1740,7 +1740,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MODIFY_DN_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1758,7 +1758,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MODIFY_DN_REQUEST_DECODE_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1776,7 +1776,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_RDN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1794,7 +1794,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_MODIFY_DN_REQUEST_DECODE_DELETE_OLD_RDN.get(
+      LocalizableMessage message = ERR_LDAP_MODIFY_DN_REQUEST_DECODE_DELETE_OLD_RDN.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1815,7 +1815,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_SUPERIOR.get(
+      LocalizableMessage message = ERR_LDAP_MODIFY_DN_REQUEST_DECODE_NEW_SUPERIOR.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1831,7 +1831,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MODIFY_DN_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1866,7 +1866,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -1882,7 +1882,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1908,16 +1908,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    Message errorMessage;
+    LocalizableMessage errorMessage;
     try
     {
-      errorMessage = Message.raw(reader.readOctetStringAsString());
+      errorMessage = LocalizableMessage.raw(reader.readOctetStringAsString());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -1930,7 +1930,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1958,7 +1958,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1974,7 +1974,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -2008,7 +2008,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MODIFY_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2025,7 +2025,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MODIFY_REQUEST_DECODE_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2050,7 +2050,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MODIFY_REQUEST_DECODE_MODS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2066,7 +2066,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MODIFY_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2101,7 +2101,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -2117,7 +2117,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2143,16 +2143,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    Message errorMessage;
+    LocalizableMessage errorMessage;
     try
     {
-      errorMessage = Message.raw(reader.readOctetStringAsString());
+      errorMessage = LocalizableMessage.raw(reader.readOctetStringAsString());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -2165,7 +2165,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2193,7 +2193,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2209,7 +2209,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -2243,7 +2243,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2260,7 +2260,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REQUEST_DECODE_BASE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2285,7 +2285,7 @@
           scope = SearchScope.SUBORDINATE_SUBTREE;
           break;
         default:
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_SEARCH_REQUEST_DECODE_INVALID_SCOPE.get(scopeValue);
           throw new LDAPException(PROTOCOL_ERROR, message);
       }
@@ -2301,7 +2301,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REQUEST_DECODE_SCOPE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2326,7 +2326,7 @@
           dereferencePolicy = DereferencePolicy.DEREF_ALWAYS;
           break;
         default:
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_SEARCH_REQUEST_DECODE_INVALID_DEREF.get(derefValue);
           throw new LDAPException(PROTOCOL_ERROR, message);
       }
@@ -2342,7 +2342,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REQUEST_DECODE_DEREF.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2360,7 +2360,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REQUEST_DECODE_SIZE_LIMIT.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2378,7 +2378,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REQUEST_DECODE_TIME_LIMIT.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2396,7 +2396,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REQUEST_DECODE_TYPES_ONLY.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2413,7 +2413,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REQUEST_DECODE_FILTER.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2437,7 +2437,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REQUEST_DECODE_ATTRIBUTES.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2453,7 +2453,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REQUEST_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2489,7 +2489,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -2505,7 +2505,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_RESULT_CODE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2531,16 +2531,16 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_MATCHED_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
 
-    Message errorMessage;
+    LocalizableMessage errorMessage;
     try
     {
-      errorMessage = Message.raw(reader.readOctetStringAsString());
+      errorMessage = LocalizableMessage.raw(reader.readOctetStringAsString());
       if (errorMessage.length() == 0)
       {
         errorMessage = null;
@@ -2553,7 +2553,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_ERROR_MESSAGE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2581,7 +2581,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_RESULT_DECODE_REFERRALS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2597,7 +2597,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_RESULT_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -2632,7 +2632,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_ENTRY_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2650,7 +2650,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_SEARCH_ENTRY_DECODE_DN.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_SEARCH_ENTRY_DECODE_DN.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -2674,7 +2674,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_ENTRY_DECODE_ATTRS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2690,7 +2690,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_ENTRY_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2726,7 +2726,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REFERENCE_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2749,7 +2749,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REFERENCE_DECODE_URLS.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2765,7 +2765,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_SEARCH_REFERENCE_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2799,7 +2799,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_UNBIND_DECODE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_UNBIND_DECODE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
   }
@@ -2832,7 +2832,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_CONTROL_DECODE_CONTROLS_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -2862,7 +2862,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_CONTROL_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_CONTROL_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -2879,7 +2879,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_CONTROL_DECODE_OID.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_CONTROL_DECODE_OID.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
@@ -2901,7 +2901,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e2);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_CONTROL_DECODE_CRITICALITY.get(String.valueOf(e2));
           throw new LDAPException(PROTOCOL_ERROR, message, e2);
         }
@@ -2920,7 +2920,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e2);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_CONTROL_DECODE_VALUE.get(String.valueOf(e2));
           throw new LDAPException(PROTOCOL_ERROR, message, e2);
         }
@@ -2945,7 +2945,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_CONTROL_DECODE_SEQUENCE.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDAP_CONTROL_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java
index 7713479..1f82d36 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPRequestHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
 
@@ -43,7 +44,7 @@
 
 import java.util.LinkedList;
 import java.util.List;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.api.ServerShutdownListener;
 import org.opends.server.core.DirectoryServer;
@@ -134,7 +135,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_REQHANDLER_OPEN_SELECTOR_FAILED.get(
+      LocalizableMessage message = ERR_LDAP_REQHANDLER_OPEN_SELECTOR_FAILED.get(
           handlerName, String.valueOf(e));
       throw new InitializationException(message, e);
     }
@@ -156,7 +157,7 @@
             (ste.getMethodName().indexOf("poll") >= 0) &&
             ioe.getMessage().equalsIgnoreCase("Invalid argument"))
         {
-          Message message = ERR_LDAP_REQHANDLER_DETECTED_JVM_ISSUE_CR6322825.
+          LocalizableMessage message = ERR_LDAP_REQHANDLER_DETECTED_JVM_ISSUE_CR6322825.
               get(String.valueOf(ioe));
           throw new InitializationException(message, ioe);
         }
@@ -240,7 +241,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
           readyConnection.disconnect(DisconnectReason.PROTOCOL_ERROR, true,
-            Message.raw(e.toString()));
+            LocalizableMessage.raw(e.toString()));
         }
       }
 
@@ -396,7 +397,7 @@
 
             // This should not happen, and it would have caused our reader
             // thread to die.  Log a severe error.
-            Message message = ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION.
+            LocalizableMessage message = ERR_LDAP_REQHANDLER_UNEXPECTED_SELECT_EXCEPTION.
                 get(getName(), getExceptionMessage(e));
             ErrorLogger.logError(message);
           }
@@ -580,7 +581,7 @@
    *
    * @param  reason  The human-readable reason for the shutdown.
    */
-  public void processServerShutdown(Message reason)
+  public void processServerShutdown(LocalizableMessage reason)
   {
     shutdownRequested = true;
     selector.wakeup();
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPResultCode.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPResultCode.java
index 379e85f..8607c56 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPResultCode.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPResultCode.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -602,7 +603,7 @@
    */
   public static String toString(int resultCode)
   {
-    Message message;
+    LocalizableMessage message;
 
     switch (resultCode)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
index de5f35a..11df00b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPStatistics.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/LDAPStatistics.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.protocols.ldap;
@@ -37,7 +37,7 @@
 import java.util.List;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.MonitorProvider;
 import org.opends.server.config.ConfigException;
@@ -155,7 +155,7 @@
     // dynamically loaded from the configuration. Rather, it should be
     // explicitly created and registered by the LDAP connection handler
     // or an LDAP client connection.
-    Message message =
+    LocalizableMessage message =
         ERR_LDAP_STATS_INVALID_MONITOR_INITIALIZATION.get(String
             .valueOf(configuration.dn()));
     throw new ConfigException(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ModifyDNResponseProtocolOp.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ModifyDNResponseProtocolOp.java
index 57c4da3..4a1411d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ModifyDNResponseProtocolOp.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ModifyDNResponseProtocolOp.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.Iterator;
@@ -64,7 +65,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private Message errorMessage;
+  private LocalizableMessage errorMessage;
 
 
 
@@ -91,7 +92,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public ModifyDNResponseProtocolOp(int resultCode, Message errorMessage)
+  public ModifyDNResponseProtocolOp(int resultCode, LocalizableMessage errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -110,7 +111,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public ModifyDNResponseProtocolOp(int resultCode, Message errorMessage,
+  public ModifyDNResponseProtocolOp(int resultCode, LocalizableMessage errorMessage,
                                     DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -138,7 +139,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return errorMessage;
   }
@@ -309,7 +310,7 @@
     if (errorMessage != null)
     {
       buffer.append(indentBuf);
-      buffer.append("  Error Message:  ");
+      buffer.append("  Error LocalizableMessage:  ");
       buffer.append(errorMessage);
       buffer.append(EOL);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ModifyResponseProtocolOp.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ModifyResponseProtocolOp.java
index 2196d97..7d9ddc9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ModifyResponseProtocolOp.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/ModifyResponseProtocolOp.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.Iterator;
@@ -64,7 +65,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private Message errorMessage;
+  private LocalizableMessage errorMessage;
 
 
 
@@ -91,7 +92,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public ModifyResponseProtocolOp(int resultCode, Message errorMessage)
+  public ModifyResponseProtocolOp(int resultCode, LocalizableMessage errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -110,7 +111,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public ModifyResponseProtocolOp(int resultCode, Message errorMessage,
+  public ModifyResponseProtocolOp(int resultCode, LocalizableMessage errorMessage,
                                   DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -138,7 +139,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return errorMessage;
   }
@@ -307,7 +308,7 @@
     if (errorMessage != null)
     {
       buffer.append(indentBuf);
-      buffer.append("  Error Message:  ");
+      buffer.append("  Error LocalizableMessage:  ");
       buffer.append(errorMessage);
       buffer.append(EOL);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/SearchResultDoneProtocolOp.java b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/SearchResultDoneProtocolOp.java
index 93e9345..b5e7c9b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/SearchResultDoneProtocolOp.java
+++ b/opendj3-server-dev/src/server/org/opends/server/protocols/ldap/SearchResultDoneProtocolOp.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.protocols.ldap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.Iterator;
@@ -64,7 +65,7 @@
   private List<String> referralURLs;
 
   // The error message for this response.
-  private Message errorMessage;
+  private LocalizableMessage errorMessage;
 
 
 
@@ -91,7 +92,7 @@
    * @param  resultCode    The result code for this response.
    * @param  errorMessage  The error message for this response.
    */
-  public SearchResultDoneProtocolOp(int resultCode, Message errorMessage)
+  public SearchResultDoneProtocolOp(int resultCode, LocalizableMessage errorMessage)
   {
     this.resultCode   = resultCode;
     this.errorMessage = errorMessage;
@@ -110,7 +111,7 @@
    * @param  matchedDN     The matched DN for this response.
    * @param  referralURLs  The referral URLs for this response.
    */
-  public SearchResultDoneProtocolOp(int resultCode, Message errorMessage,
+  public SearchResultDoneProtocolOp(int resultCode, LocalizableMessage errorMessage,
                                     DN matchedDN, List<String> referralURLs)
   {
     this.resultCode   = resultCode;
@@ -139,7 +140,7 @@
    * @return  The error message for this response, or <CODE>null</CODE> if none
    *          is available.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return errorMessage;
   }
@@ -310,7 +311,7 @@
     if (errorMessage != null)
     {
       buffer.append(indentBuf);
-      buffer.append("  Error Message:  ");
+      buffer.append("  Error LocalizableMessage:  ");
       buffer.append(errorMessage);
       buffer.append(EOL);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java b/opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
index d03e4a4..1b6745c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/common/ChangelogBaseDNVirtualAttributeProvider.java
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -100,7 +100,7 @@
                             SearchOperation searchOperation)
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-    final Message message = ERR_CHANGELOGBASEDN_VATTR_NOT_SEARCHABLE.get(
+    final LocalizableMessage message = ERR_CHANGELOGBASEDN_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
@@ -109,7 +109,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       UserDefinedVirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return false;
   }
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 c7e9bdd..2a195d4 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
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -126,7 +126,7 @@
                             SearchOperation searchOperation)
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-    final Message message = ERR_FIRSTCHANGENUMBER_VATTR_NOT_SEARCHABLE.get(
+    final LocalizableMessage message = ERR_FIRSTCHANGENUMBER_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
@@ -135,7 +135,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       UserDefinedVirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return false;
   }
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 11fcadd..3616f98 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
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -126,7 +126,7 @@
                             SearchOperation searchOperation)
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-    final Message message = ERR_LASTCHANGENUMBER_VATTR_NOT_SEARCHABLE.get(
+    final LocalizableMessage message = ERR_LASTCHANGENUMBER_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
@@ -135,7 +135,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       UserDefinedVirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return false;
   }
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 014133c..de7a3dc 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
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.server.UserDefinedVirtualAttributeCfg;
 import org.opends.server.api.VirtualAttributeProvider;
@@ -134,7 +134,7 @@
                             SearchOperation searchOperation)
   {
     searchOperation.setResultCode(ResultCode.UNWILLING_TO_PERFORM);
-    final Message message = ERR_LASTCOOKIE_VATTR_NOT_SEARCHABLE.get(
+    final LocalizableMessage message = ERR_LASTCOOKIE_VATTR_NOT_SEARCHABLE.get(
             rule.getAttributeType().getNameOrOID());
     searchOperation.appendErrorMessage(message);
   }
@@ -143,7 +143,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
                       UserDefinedVirtualAttributeCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return false;
   }
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 b0b834d..e3e40e6 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
@@ -33,9 +33,7 @@
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ConcurrentSkipListMap;
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
-import org.opends.messages.Severity;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.ResultCode;
@@ -360,8 +358,7 @@
       {
         throw new DirectoryException(
             ResultCode.PROTOCOL_ERROR,
-            Message.raw(Category.SYNC, Severity.INFORMATION,
-            "Exception raised: " + e),
+            LocalizableMessage.raw("Exception raised: " + e),
             e);
       }
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/EntryHistorical.java b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/EntryHistorical.java
index 23a97f4..4d77f0f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/EntryHistorical.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/EntryHistorical.java
@@ -28,7 +28,7 @@
 
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.common.CSN;
@@ -689,7 +689,7 @@
                * historical information is going to be kept.
                * Log information for the repair tool.
                */
-              Message message = ERR_UNKNOWN_ATTRIBUTE_IN_HISTORICAL.get(
+              LocalizableMessage message = ERR_UNKNOWN_ATTRIBUTE_IN_HISTORICAL.get(
                   entry.getName().toNormalizedString(),
                   histVal.getAttrString());
               logError(message);
@@ -734,7 +734,7 @@
       // Any exception happening here means that the coding of the historical
       // information was wrong.
       // Log an error and continue with an empty historical.
-      Message message = ERR_BAD_HISTORICAL.get(entry.getName().toString());
+      LocalizableMessage message = ERR_BAD_HISTORICAL.get(entry.getName().toString());
       logError(message);
     }
 
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 ebc82eb..864c3a7 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
@@ -28,7 +28,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
@@ -135,7 +135,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       ExternalChangelogDomainCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -144,7 +144,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       ExternalChangelogDomainCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -155,7 +155,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       ExternalChangelogDomainCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
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 b90eeeb..221a68f 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
@@ -28,7 +28,7 @@
 
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ServerManagementContext;
 import org.opends.server.admin.std.server.*;
@@ -143,7 +143,7 @@
           break;
 
         default:
-          Message message =
+          LocalizableMessage message =
             ERR_PLUGIN_FRACTIONAL_LDIF_IMPORT_INVALID_PLUGIN_TYPE.get(
             t.toString());
           throw new ConfigException(message);
@@ -282,7 +282,7 @@
                 getStaticReplicationDomainFractionalConfig(entry);
             } catch (Exception ex)
             {
-              Message message = ERR_FRACTIONAL_COULD_NOT_RETRIEVE_CONFIG.get(
+              LocalizableMessage message = ERR_FRACTIONAL_COULD_NOT_RETRIEVE_CONFIG.get(
                 entry.toString());
               return PluginResult.ImportLDIF.stopEntryProcessing(message);
             }
@@ -363,7 +363,7 @@
             return PluginResult.ImportLDIF.stopEntryProcessing(null);
           }
 
-          Message message = NOTE_ERR_LDIF_IMPORT_FRACTIONAL_BAD_DATA_SET
+          LocalizableMessage message = NOTE_ERR_LDIF_IMPORT_FRACTIONAL_BAD_DATA_SET
               .get(replicatedDomainBaseDn.toString());
           return PluginResult.ImportLDIF.stopEntryProcessing(message);
         }
@@ -385,7 +385,7 @@
           return PluginResult.ImportLDIF.stopEntryProcessing(null);
         }
 
-        Message message = NOTE_ERR_LDIF_IMPORT_FRACTIONAL_DATA_SET_IS_FRACTIONAL
+        LocalizableMessage message = NOTE_ERR_LDIF_IMPORT_FRACTIONAL_DATA_SET_IS_FRACTIONAL
             .get(replicatedDomainBaseDn.toString());
         return PluginResult.ImportLDIF.stopEntryProcessing(message);
       }
@@ -484,7 +484,7 @@
   /** {@inheritDoc} */
   @Override()
   public boolean isConfigurationAcceptable(PluginCfg configuration,
-    List<Message> unacceptableReasons)
+    List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -493,7 +493,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
     FractionalLDIFImportPluginCfg configuration,
-    List<Message> unacceptableReasons)
+    List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
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 efbbc3d..0adf000 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
@@ -36,10 +36,8 @@
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.zip.DataFormatException;
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.Severity;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.ReplicationDomainCfgDefn.*;
 import org.opends.server.admin.std.server.ExternalChangelogDomainCfg;
@@ -291,11 +289,11 @@
    */
   private int importErrorMessageId = -1;
   /**
-   * Message type for ERR_FULL_UPDATE_IMPORT_FRACTIONAL_BAD_REMOTE.
+   * LocalizableMessage type for ERR_FULL_UPDATE_IMPORT_FRACTIONAL_BAD_REMOTE.
    */
   public static final int IMPORT_ERROR_MESSAGE_BAD_REMOTE = 1;
   /**
-   * Message type for ERR_FULL_UPDATE_IMPORT_FRACTIONAL_REMOTE_IS_FRACTIONAL.
+   * LocalizableMessage type for ERR_FULL_UPDATE_IMPORT_FRACTIONAL_REMOTE_IS_FRACTIONAL.
    */
   public static final int IMPORT_ERROR_MESSAGE_REMOTE_IS_FRACTIONAL = 2;
 
@@ -1502,7 +1500,7 @@
     // This is an error termination during the import
     // The error is stored and the import is ended by returning null
     final IEContext ieCtx = getImportExportContext();
-    Message msg = null;
+    LocalizableMessage msg = null;
     switch (importErrorMessageId)
     {
     case IMPORT_ERROR_MESSAGE_BAD_REMOTE:
@@ -1532,7 +1530,7 @@
   {
     if (target == RoutableMsg.ALL_SERVERS && fractionalConfig.isFractional())
     {
-      Message msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_FULL_UPDATE_FRACTIONAL.get(
+      LocalizableMessage msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_FULL_UPDATE_FRACTIONAL.get(
             getBaseDNString(), Integer.toString(getServerId()));
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, msg);
     }
@@ -1554,7 +1552,7 @@
   {
     if (!deleteOperation.isSynchronizationOperation() && !brokerIsConnected())
     {
-      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
+      LocalizableMessage msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
       return new SynchronizationProviderResult.StopProcessing(
           ResultCode.UNWILLING_TO_PERFORM, msg);
     }
@@ -1626,7 +1624,7 @@
   {
     if (!addOperation.isSynchronizationOperation() && !brokerIsConnected())
     {
-      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
+      LocalizableMessage msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
       return new SynchronizationProviderResult.StopProcessing(
           ResultCode.UNWILLING_TO_PERFORM, msg);
     }
@@ -1653,7 +1651,7 @@
          */
         if (fractionalFilterOperation(addOperation, false))
         {
-          Message msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_OPERATION.get(
+          LocalizableMessage msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_OPERATION.get(
             getBaseDNString(), addOperation.toString());
           return new SynchronizationProviderResult.StopProcessing(
             ResultCode.UNWILLING_TO_PERFORM, msg);
@@ -1756,7 +1754,7 @@
   {
     if (!modifyDNOperation.isSynchronizationOperation() && !brokerIsConnected())
     {
-      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
+      LocalizableMessage msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
       return new SynchronizationProviderResult.StopProcessing(
           ResultCode.UNWILLING_TO_PERFORM, msg);
     }
@@ -1781,7 +1779,7 @@
          */
         if (fractionalFilterOperation(modifyDNOperation, false))
         {
-          Message msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_OPERATION.get(
+          LocalizableMessage msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_OPERATION.get(
             getBaseDNString(), modifyDNOperation.toString());
           return new SynchronizationProviderResult.StopProcessing(
             ResultCode.UNWILLING_TO_PERFORM, msg);
@@ -1874,7 +1872,7 @@
   {
     if (!modifyOperation.isSynchronizationOperation() && !brokerIsConnected())
     {
-      Message msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
+      LocalizableMessage msg = ERR_REPLICATION_COULD_NOT_CONNECT.get(getBaseDNString());
       return new SynchronizationProviderResult.StopProcessing(
           ResultCode.UNWILLING_TO_PERFORM, msg);
     }
@@ -1914,7 +1912,7 @@
           case FRACTIONAL_HAS_FRACTIONAL_FILTERED_ATTRIBUTES:
             // Some attributes not compliant with fractional configuration :
             // forbid the operation
-            Message msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_OPERATION.get(
+            LocalizableMessage msg = NOTE_ERR_FRACTIONAL_FORBIDDEN_OPERATION.get(
               getBaseDNString(), modifyOperation.toString());
             return new SynchronizationProviderResult.StopProcessing(
               ResultCode.UNWILLING_TO_PERFORM, msg);
@@ -2449,7 +2447,7 @@
           // Continue with the next change but the servers could now become
           // inconsistent.
           // Let the repair tool know about this.
-          Message message = ERR_LOOP_REPLAYING_OPERATION.get(op.toString(),
+          LocalizableMessage message = ERR_LOOP_REPLAYING_OPERATION.get(op.toString(),
             op.getErrorMessage().toString());
           logError(message);
           numUnresolvedNamingConflicts.incrementAndGet();
@@ -2475,7 +2473,7 @@
            * to be inconsistent.
            * Let the repair tool know about this.
            */
-          Message message = ERR_EXCEPTION_REPLAYING_OPERATION.get(
+          LocalizableMessage message = ERR_EXCEPTION_REPLAYING_OPERATION.get(
             stackTraceToSingleLineString(e), op.toString());
           logError(message);
           replayErrorMsg = message.toString();
@@ -2501,7 +2499,7 @@
 
   private String logDecodingOperationError(LDAPUpdateMsg msg, Exception e)
   {
-    Message message = ERR_EXCEPTION_DECODING_OPERATION.get(
+    LocalizableMessage message = ERR_EXCEPTION_DECODING_OPERATION.get(
         String.valueOf(msg) + " " + stackTraceToSingleLineString(e));
     logError(message);
     return message.toString();
@@ -3051,7 +3049,7 @@
       else
       {
         // log error and information for the REPAIR tool.
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         mb.append(ERR_CANNOT_RENAME_CONFLICT_ENTRY.get());
         mb.append(String.valueOf(entryDN));
         mb.append(" ");
@@ -3063,7 +3061,7 @@
     } catch (DirectoryException e)
     {
       // log error and information for the REPAIR tool.
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(ERR_EXCEPTION_RENAME_CONFLICT_ENTRY.get());
       mb.append(String.valueOf(entryDN));
       mb.append(" ");
@@ -3088,7 +3086,7 @@
   private void renameConflictEntry(Operation conflictOp, DN dn,
       String entryUUID)
   {
-    Message alertMessage = NOTE_UNRESOLVED_CONFLICT.get(dn.toString());
+    LocalizableMessage alertMessage = NOTE_UNRESOLVED_CONFLICT.get(dn.toString());
     DirectoryServer.sendAlertNotification(this,
         ALERT_TYPE_REPLICATION_UNRESOLVED_CONFLICT, alertMessage);
 
@@ -3098,7 +3096,7 @@
     if (newOp.getResultCode() != ResultCode.SUCCESS)
     {
       // log information for the repair tool.
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(ERR_CANNOT_RENAME_CONFLICT_ENTRY.get());
       mb.append(String.valueOf(dn));
       mb.append(" ");
@@ -3137,7 +3135,7 @@
     if (newOp.getResultCode() != ResultCode.SUCCESS)
     {
       // Log information for the repair tool.
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(ERR_CANNOT_ADD_CONFLICT_ATTRIBUTE.get());
       mb.append(String.valueOf(op));
       mb.append(" ");
@@ -3147,7 +3145,7 @@
 
     // Generate an alert to let the administration know that some
     // conflict could not be solved.
-    Message alertMessage = NOTE_UNRESOLVED_CONFLICT.get(conflictDN.toString());
+    LocalizableMessage alertMessage = NOTE_UNRESOLVED_CONFLICT.get(conflictDN.toString());
     DirectoryServer.sendAlertNotification(this,
         ALERT_TYPE_REPLICATION_UNRESOLVED_CONFLICT, alertMessage);
   }
@@ -3167,7 +3165,7 @@
 
     // Generate an alert to let the administrator know that some
     // conflict could not be solved.
-    Message alertMessage = NOTE_UNRESOLVED_CONFLICT.get(normalizedDN);
+    LocalizableMessage alertMessage = NOTE_UNRESOLVED_CONFLICT.get(normalizedDN);
     DirectoryServer.sendAlertNotification(this,
         ALERT_TYPE_REPLICATION_UNRESOLVED_CONFLICT, alertMessage);
 
@@ -3555,7 +3553,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
         throw new DirectoryException(ResultCode.OTHER, message);
@@ -3563,7 +3561,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
           backend.getBackendID(), stackTraceToSingleLineString(e));
       logError(message);
       throw new DirectoryException(ResultCode.OTHER, message);
@@ -3626,7 +3624,7 @@
       if (ros == null ||
           ros.getNumExportedEntries() < entryCount)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(de.getMessageObject());
         logError(message);
         throw new DirectoryException(ResultCode.OTHER, message);
@@ -3634,7 +3632,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(
+      LocalizableMessage message = ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(
           stackTraceToSingleLineString(e));
       logError(message);
       throw new DirectoryException(ResultCode.OTHER, message);
@@ -3657,7 +3655,7 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-          Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+          LocalizableMessage message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
               backend.getBackendID(), String.valueOf(failureReason));
           logError(message);
           throw new DirectoryException(ResultCode.OTHER, message);
@@ -3665,7 +3663,7 @@
       }
       catch (Exception e)
       {
-        Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
             backend.getBackendID(), stackTraceToSingleLineString(e));
         logError(message);
         throw new DirectoryException(ResultCode.OTHER, message);
@@ -3695,7 +3693,7 @@
     StringBuilder failureReason = new StringBuilder();
     if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
     {
-      Message message = ERR_INIT_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_INIT_CANNOT_LOCK_BACKEND.get(
                           backend.getBackendID(),
                           String.valueOf(failureReason));
       logError(message);
@@ -3810,7 +3808,7 @@
     // Release lock
     if (!LockFileManager.releaseLock(lockFile, failureReason))
     {
-      Message message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
+      LocalizableMessage message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
           backend.getBackendID(), String.valueOf(failureReason));
       logError(message);
       throw new DirectoryException(ResultCode.OTHER, message);
@@ -3838,7 +3836,7 @@
     {
       if (!(provider instanceof MultimasterReplication))
       {
-        Message message = ERR_INVALID_PROVIDER.get();
+        LocalizableMessage message = ERR_INVALID_PROVIDER.get();
         throw new DirectoryException(ResultCode.OTHER, message);
       }
 
@@ -3852,7 +3850,7 @@
       if (replicationDomain != null)
       {
         // Should never happen
-        Message message = ERR_MULTIPLE_MATCHING_DOMAIN.get();
+        LocalizableMessage message = ERR_MULTIPLE_MATCHING_DOMAIN.get();
         throw new DirectoryException(ResultCode.OTHER, message);
       }
       replicationDomain = domain;
@@ -3917,7 +3915,7 @@
    * @return true if the configuration is acceptable, false other wise.
    */
   public static boolean isConfigurationAcceptable(
-      ReplicationDomainCfg configuration, List<Message> unacceptableReasons)
+      ReplicationDomainCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     // Check that there is not already a domain with the same DN
     final DN dn = configuration.getBaseDN();
@@ -3977,7 +3975,7 @@
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationChangeAcceptable(
-         ReplicationDomainCfg configuration, List<Message> unacceptableReasons)
+         ReplicationDomainCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     // Check that a import/export is not in progress
     if (ieRunning())
@@ -4420,7 +4418,7 @@
     Backend backend = getBackend();
     if (!backend.supportsLDIFExport())
     {
-      Message msg = ERR_INIT_EXPORT_NOT_SUPPORTED.get(backend.getBackendID());
+      LocalizableMessage msg = ERR_INIT_EXPORT_NOT_SUPPORTED.get(backend.getBackendID());
       logError(msg);
       throw new DirectoryException(ResultCode.OTHER, msg);
     }
@@ -4539,13 +4537,13 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_INVALID_IMPORT_SOURCE.get(
+      LocalizableMessage message = ERR_INVALID_IMPORT_SOURCE.get(
           getBaseDNString(), Integer.toString(getServerId()),
           sourceString, stackTraceToSingleLineString(e));
       throw new DirectoryException(ResultCode.OTHER, message, e);
     }
 
-    Message message = ERR_INVALID_IMPORT_SOURCE.get(getBaseDNString(),
+    LocalizableMessage message = ERR_INVALID_IMPORT_SOURCE.get(getBaseDNString(),
         Integer.toString(getServerId()), Integer.toString(source), "");
     throw new DirectoryException(ResultCode.OTHER, message);
   }
@@ -5165,7 +5163,7 @@
        if (maxTimeToRun < 0)
        {
         throw new DirectoryException(ResultCode.ADMIN_LIMIT_EXCEEDED,
-            Message.raw(Category.SYNC, Severity.NOTICE, " end date reached"));
+            LocalizableMessage.raw(" end date reached"));
        }
 
        EntryHistorical entryHist = EntryHistorical.newInstanceFromEntry(entry);
@@ -5187,7 +5185,7 @@
        if (newOp.getResultCode() != ResultCode.SUCCESS)
        {
          // Log information for the repair tool.
-         MessageBuilder mb = new MessageBuilder();
+         LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
          mb.append(ERR_CANNOT_ADD_CONFLICT_ATTRIBUTE.get());
          mb.append(String.valueOf(newOp));
          mb.append(" ");
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/MultimasterReplication.java b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
index 1a2e8c8..21c8e19 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/MultimasterReplication.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/MultimasterReplication.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;
 
@@ -31,7 +31,7 @@
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.LinkedBlockingQueue;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ConfigurationDeleteListener;
@@ -324,7 +324,7 @@
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationAddAcceptable(
-      ReplicationDomainCfg configuration, List<Message> unacceptableReasons)
+      ReplicationDomainCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     return LDAPReplicationDomain.isConfigurationAcceptable(
       configuration, unacceptableReasons);
@@ -694,7 +694,7 @@
   /** {@inheritDoc} */
   @Override
   public boolean isConfigurationDeleteAcceptable(
-      ReplicationDomainCfg configuration, List<Message> unacceptableReasons)
+      ReplicationDomainCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -727,7 +727,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       ReplicationSynchronizationProviderCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
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 d266070..c170a5a 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
@@ -31,7 +31,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.ModifyOperationBasis;
 import org.opends.server.protocols.internal.InternalClientConnection;
@@ -189,7 +189,7 @@
       if (((search.getResultCode() != ResultCode.SUCCESS)) &&
           ((search.getResultCode() != ResultCode.NO_SUCH_OBJECT)))
       {
-        Message message = ERR_ERROR_SEARCHING_RUV.
+        LocalizableMessage message = ERR_ERROR_SEARCHING_RUV.
             get(search.getResultCode().getResultCodeName(), search.toString(),
                 search.getErrorMessage(), baseDn.toString());
         logError(message);
@@ -335,7 +335,7 @@
     op.run();
     if (op.getResultCode() != ResultCode.SUCCESS)
     {
-      Message message = DEBUG_ERROR_UPDATING_RUV.get(
+      LocalizableMessage message = DEBUG_ERROR_UPDATING_RUV.get(
               op.getResultCode().getResultCodeName().toString(),
               op.toString(),
               op.getErrorMessage().toString(),
@@ -378,7 +378,7 @@
    * and an ordering index for historical attribute
    */
   public final void checkAndUpdateServerState() {
-    Message message;
+    LocalizableMessage message;
     InternalSearchOperation op;
     CSN serverStateMaxCsn;
     CSN dbMaxCsn;
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/RemotePendingChanges.java b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/RemotePendingChanges.java
index 52c79ca..bb7dd46 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/RemotePendingChanges.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/RemotePendingChanges.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.plugin;
 
@@ -501,7 +501,7 @@
    * Check the dependencies of a given Operation/UpdateMsg.
    *
    * @param op   The Operation for which dependencies must be checked.
-   * @param msg  The Message for which dependencies must be checked.
+   * @param msg  The LocalizableMessage for which dependencies must be checked.
    * @return     A boolean indicating if an operation cannot be replayed
    *             because of dependencies.
    */
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ReplayThread.java b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ReplayThread.java
index 32d60e0..845fcb3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ReplayThread.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ReplayThread.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.replication.plugin;
 
@@ -35,7 +35,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.protocol.LDAPUpdateMsg;
@@ -110,7 +110,7 @@
          * catch all exceptions happening so that the thread never dies even
          * in case of problems.
          */
-        Message message = ERR_EXCEPTION_REPLAYING_REPLICATION_MESSAGE.get(
+        LocalizableMessage message = ERR_EXCEPTION_REPLAYING_REPLICATION_MESSAGE.get(
             stackTraceToSingleLineString(e));
         logError(message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ReplicationServerListener.java b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ReplicationServerListener.java
index c91ee47..7ab7555 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ReplicationServerListener.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/plugin/ReplicationServerListener.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.replication.plugin;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.List;
 
@@ -98,7 +99,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAddAcceptable(
-      ReplicationServerCfg configuration, List<Message> unacceptableReasons)
+      ReplicationServerCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     return ReplicationServer.isConfigurationAcceptable(
       configuration, unacceptableReasons);
@@ -132,7 +133,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationDeleteAcceptable(
-      ReplicationServerCfg configuration, List<Message> unacceptableReasons)
+      ReplicationServerCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/EntryMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/EntryMsg.java
index 7186d82..ba09285 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/EntryMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/EntryMsg.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;
 
@@ -47,7 +47,7 @@
    * @param sender      The sender of this message.
    * @param destination The destination of this message.
    * @param entryBytes  The bytes of the entry.
-   * @param msgId       Message counter.
+   * @param msgId       LocalizableMessage counter.
    */
   public EntryMsg(
       int sender,
@@ -69,7 +69,7 @@
    * @param entryBytes  The bytes of the entry.
    * @param pos         The starting Position in the array.
    * @param length      Number of array elements to be copied.
-   * @param msgId       Message counter.
+   * @param msgId       LocalizableMessage counter.
    */
   public EntryMsg(
       int serverID,
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ErrorMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ErrorMsg.java
index 362be92..d88a057 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ErrorMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ErrorMsg.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.replication.protocol;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.server.loggers.debug.DebugLogger.debugEnabled;
 import static org.opends.server.loggers.debug.DebugLogger.getTracer;
@@ -47,10 +47,10 @@
   private static final DebugTracer TRACER = getTracer();
 
   // Specifies the messageID built from the error that was detected
-  private int msgID;
+  private String msgID;
 
   // Specifies the complementary details about the error that was detected
-  private Message details = null;
+  private LocalizableMessage details = null;
 
   // The time of creation of this message.
   //                                        protocol version previous to V4
@@ -64,10 +64,10 @@
    * @param details The message containing the details of the error.
    */
   public ErrorMsg(int sender, int destination,
-                      Message details)
+                      LocalizableMessage details)
   {
     super(sender, destination);
-    this.msgID  = details.getDescriptor().getId();
+    this.msgID  = getMessageId(details);
     this.details = details;
     this.creationTime = System.currentTimeMillis();
 
@@ -82,10 +82,10 @@
    * @param i replication server id
    * @param details details of the error
    */
-  public ErrorMsg(int i, Message details)
+  public ErrorMsg(int i, LocalizableMessage details)
   {
     super(-2, i);
-    this.msgID  = details.getDescriptor().getId();
+    this.msgID  = getMessageId(details);
     this.details = details;
     this.creationTime = System.currentTimeMillis();
 
@@ -94,9 +94,17 @@
   }
 
   /**
+   * Returns the unique message Id.
+   */
+  private String getMessageId(LocalizableMessage details)
+  {
+    return details.resourceName() + "-" + details.ordinal();
+  }
+
+  /**
    * Creates a new ErrorMsg by decoding the provided byte array.
    *
-   * @param  in A byte array containing the encoded information for the Message
+   * @param  in A byte array containing the encoded information for the LocalizableMessage
    * @param version The protocol version to use to decode the msg.
    * @throws DataFormatException If the in does not contain a properly
    *                             encoded message.
@@ -127,13 +135,12 @@
 
       // MsgID
       length = getNextLength(in, pos);
-      String msgIdString = new String(in, pos, length, "UTF-8");
-      msgID = Integer.valueOf(msgIdString);
+      msgID = new String(in, pos, length, "UTF-8");
       pos += length +1;
 
       // Details
       length = getNextLength(in, pos);
-      details = Message.raw(new String(in, pos, length, "UTF-8"));
+      details = LocalizableMessage.raw(new String(in, pos, length, "UTF-8"));
       pos += length +1;
 
       if (version >= ProtocolVersion.REPLICATION_PROTOCOL_V4)
@@ -156,7 +163,7 @@
    *
    * @return the details from this message.
    */
-  public Message getDetails()
+  public LocalizableMessage getDetails()
   {
     return details;
   }
@@ -166,7 +173,7 @@
    *
    * @return the msgID from this message.
    */
-  public int getMsgID()
+  public String getMsgID()
   {
     return msgID;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/HeartbeatMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/HeartbeatMsg.java
index e2d7d4d..2165a6d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/HeartbeatMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/HeartbeatMsg.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.replication.protocol;
@@ -60,7 +60,7 @@
 
     /* first byte is the type */
     if (in.length != 1 || in[0] != MSG_TYPE_HEARTBEAT)
-      throw new DataFormatException("Input is not a valid Heartbeat Message.");
+      throw new DataFormatException("Input is not a valid Heartbeat LocalizableMessage.");
   }
 
   /**
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 16bf766..ec963d3 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
@@ -61,7 +61,7 @@
 
   /**
    * Creates a new InitializeRequestMsg by decoding the provided byte array.
-   * @param in A byte array containing the encoded information for the Message
+   * @param in A byte array containing the encoded information for the LocalizableMessage
    * @param version The protocol version to use to decode the msg
    * @throws DataFormatException If the in does not contain a properly
    *                             encoded InitializeMessage.
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 f74cf76..efc58b8 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
@@ -75,7 +75,7 @@
 
   /**
    * Creates an InitializeTargetMsg by decoding the provided byte array.
-   * @param in A byte array containing the encoded information for the Message
+   * @param in A byte array containing the encoded information for the LocalizableMessage
    * @param version The protocol version to use to decode the msg
    * @throws DataFormatException If the in does not contain a properly
    *                             encoded InitializeMessage.
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 daba2f5..7a58d32 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
@@ -113,7 +113,7 @@
   }
 
   /**
-   * Generates an Update Message with the provided information.
+   * Generates an Update LocalizableMessage with the provided information.
    *
    * @param op The operation for which the message must be created.
    * @return The generated message.
@@ -361,10 +361,10 @@
   }
 
   /**
-   * Get the byte array representation of this Message. This uses the version
+   * Get the byte array representation of this LocalizableMessage. This uses the version
    * 1 of the replication protocol (used for compatibility purpose).
    *
-   * @return The byte array representation of this Message.
+   * @return The byte array representation of this LocalizableMessage.
    *
    * @throws UnsupportedEncodingException  When the encoding of the message
    *         failed because the UTF-8 encoding is not supported.
@@ -372,10 +372,10 @@
   public abstract byte[] getBytes_V1() throws UnsupportedEncodingException;
 
   /**
-   * Get the byte array representation of this Message. This uses the version
+   * Get the byte array representation of this LocalizableMessage. This uses the version
    * 2 of the replication protocol (used for compatibility purpose).
    *
-   * @return The byte array representation of this Message.
+   * @return The byte array representation of this LocalizableMessage.
    *
    * @throws UnsupportedEncodingException  When the encoding of the message
    *         failed because the UTF-8 encoding is not supported.
@@ -384,11 +384,11 @@
 
 
   /**
-   * Get the byte array representation of this Message. This uses the provided
+   * Get the byte array representation of this LocalizableMessage. This uses the provided
    * version number which must be version 4 or newer.
    * @param reqProtocolVersion TODO
    *
-   * @return The byte array representation of this Message.
+   * @return The byte array representation of this LocalizableMessage.
    *
    * @throws UnsupportedEncodingException  When the encoding of the message
    *         failed because the UTF-8 encoding is not supported.
@@ -425,9 +425,9 @@
   // ============
 
   /**
-   * Decode the Header part of this Update Message, and check its type.
+   * Decode the Header part of this Update LocalizableMessage, and check its type.
    *
-   * @param types The allowed types of this Update Message.
+   * @param types The allowed types of this Update LocalizableMessage.
    * @param encodedMsg the encoded form of the UpdateMsg.
    * @return the position at which the remaining part of the message starts.
    * @throws DataFormatException if the encodedMsg does not contain a valid
@@ -510,7 +510,7 @@
   }
 
   /**
-   * Decode the Header part of this Update Message, and check its type. This
+   * Decode the Header part of this Update LocalizableMessage, and check its type. This
    * uses the version 1 of the replication protocol (used for compatibility
    * purpose).
    *
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 ca2e247..37edd48 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
@@ -42,7 +42,7 @@
 import static org.opends.server.replication.protocol.OperationContext.*;
 
 /**
- * Message used to send Modify DN information.
+ * LocalizableMessage used to send Modify DN information.
  */
 public class ModifyDNMsg extends ModifyCommonMsg
 {
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyMsg.java
index e9c5dc3..83c7a29 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ModifyMsg.java
@@ -42,7 +42,7 @@
 import static org.opends.server.replication.protocol.OperationContext.*;
 
 /**
- * Message used to send Modify information.
+ * LocalizableMessage used to send Modify information.
  */
 public class ModifyMsg extends ModifyCommonMsg
 {
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 2cc5f91..2611d47 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
@@ -34,7 +34,7 @@
 import org.opends.server.types.DirectoryException;
 
 /**
- * Message sent by a replication server to a directory server in reply to the
+ * LocalizableMessage sent by a replication server to a directory server in reply to the
  * ServerStartMsg.
  */
 public class ReplServerStartDSMsg extends StartMsg
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 637f924..ddfe8aa 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
@@ -34,7 +34,7 @@
 import org.opends.server.types.DirectoryException;
 
 /**
- * Message sent by a replication server to another replication server
+ * LocalizableMessage sent by a replication server to another replication server
  * at Startup.
  */
 public class ReplServerStartMsg extends StartMsg
@@ -430,10 +430,10 @@
   }
 
   /**
-   * Get the byte array representation of this Message. This uses the version
+   * Get the byte array representation of this LocalizableMessage. This uses the version
    * 1 of the replication protocol (used for compatibility purpose).
    *
-   * @return The byte array representation of this Message.
+   * @return The byte array representation of this LocalizableMessage.
    *
    * @throws UnsupportedEncodingException  When the encoding of the message
    *         failed because the UTF-8 encoding is not supported.
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplSessionSecurity.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplSessionSecurity.java
index 591881a..e6dee22 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplSessionSecurity.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ReplSessionSecurity.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.replication.protocol;
 
@@ -35,7 +35,7 @@
 import javax.net.ssl.SSLSocket;
 import javax.net.ssl.SSLSocketFactory;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.config.ConfigException;
 import org.opends.server.types.CryptoManager;
 import org.opends.server.types.DirectoryConfig;
@@ -260,7 +260,7 @@
     {
       // This is probably a connection attempt from an unexpected client
       // log that to warn the administrator.
-      final Message message = INFO_SSL_SERVER_CON_ATTEMPT_ERROR.get(
+      final LocalizableMessage message = INFO_SSL_SERVER_CON_ATTEMPT_ERROR.get(
           socket.getRemoteSocketAddress().toString(),
           socket.getLocalSocketAddress().toString(),
           e.getLocalizedMessage());
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ResetGenerationIdMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ResetGenerationIdMsg.java
index 44b9515..bb185c8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ResetGenerationIdMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/ResetGenerationIdMsg.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.protocol;
 
@@ -63,7 +63,7 @@
     {
       if (in[0] != MSG_TYPE_RESET_GENERATION_ID)
         throw new
-        DataFormatException("input is not a valid GenerationId Message");
+        DataFormatException("input is not a valid GenerationId LocalizableMessage");
 
       int pos = 1;
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/StartMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/StartMsg.java
index 26df8d7..afbc8ad 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/StartMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/StartMsg.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;
 
@@ -268,7 +268,7 @@
   }
 
   /**
-   * Get the version included in the Start Message mean the replication
+   * Get the version included in the Start LocalizableMessage mean the replication
    * protocol version used by the server that created the message.
    *
    * @return The version used by the server that created the message.
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/TopologyMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/TopologyMsg.java
index 5a15e9c..d9e2e47 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/TopologyMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/TopologyMsg.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.protocol;
 
@@ -303,7 +303,7 @@
     try
     {
       /**
-       * Message has the following form:
+       * LocalizableMessage has the following form:
        * <pdu type><number of following DSInfo entries>[<DSInfo>]*
        * <number of following RSInfo entries>[<RSInfo>]*
        */
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/UpdateMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/UpdateMsg.java
index dbcc51a..410653e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/UpdateMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/UpdateMsg.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;
 
@@ -292,9 +292,9 @@
   }
 
   /**
-   * Decode the Header part of this Update Message, and check its type.
+   * Decode the Header part of this Update LocalizableMessage, and check its type.
    *
-   * @param type The allowed type of this Update Message.
+   * @param type The allowed type of this Update LocalizableMessage.
    * @param encodedMsg the encoded form of the UpdateMsg.
    * @return the position at which the remaining part of the message starts.
    * @throws DataFormatException if the encodedMsg does not contain a valid
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/WindowMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/WindowMsg.java
index e638d45..e5345b2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/WindowMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/WindowMsg.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.protocol;
 
@@ -72,7 +72,7 @@
     {
       /* first byte is the type */
       if (in[0] != MSG_TYPE_WINDOW)
-        throw new DataFormatException("input is not a valid Window Message");
+        throw new DataFormatException("input is not a valid Window LocalizableMessage");
       int pos = 1;
 
       /*
@@ -122,9 +122,9 @@
 
 
   /**
-   * Get the number of message acknowledged by the Window Message.
+   * Get the number of message acknowledged by the Window LocalizableMessage.
    *
-   * @return the number of message acknowledged by the Window Message.
+   * @return the number of message acknowledged by the Window LocalizableMessage.
    */
   public int getNumAck()
   {
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/WindowProbeMsg.java b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/WindowProbeMsg.java
index 2ab5ceb..eb5ca43 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/protocol/WindowProbeMsg.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/protocol/WindowProbeMsg.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.protocol;
 
@@ -58,9 +58,9 @@
    */
   public WindowProbeMsg(byte[] in) throws DataFormatException
   {
-    // WindowProbeMsg Message only contains its type.
+    // WindowProbeMsg LocalizableMessage only contains its type.
     if (in[0] != MSG_TYPE_WINDOW_PROBE)
-      throw new DataFormatException("input is not a valid Window Message");
+      throw new DataFormatException("input is not a valid Window LocalizableMessage");
   }
 
   /**
@@ -69,7 +69,7 @@
   @Override
   public byte[] getBytes(short protocolVersion)
   {
-    // WindowProbeMsg Message only contains its type.
+    // WindowProbeMsg LocalizableMessage only contains its type.
     return new byte[] { MSG_TYPE_WINDOW_PROBE };
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/DataServerHandler.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/DataServerHandler.java
index 13197d6..1e49d56 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/DataServerHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/DataServerHandler.java
@@ -29,7 +29,7 @@
 import java.io.IOException;
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.replication.common.*;
 import org.opends.server.replication.protocol.*;
 import org.opends.server.types.*;
@@ -101,7 +101,7 @@
     {
       // Prevent useless error message (full update status cannot lead to bad
       // gen status)
-      Message message = NOTE_BAD_GEN_ID_IN_FULL_UPDATE.get(
+      LocalizableMessage message = NOTE_BAD_GEN_ID_IN_FULL_UPDATE.get(
               Integer.toString(replicationServer.getServerId()),
               getBaseDNString(),
               Integer.toString(serverId),
@@ -201,7 +201,7 @@
     ServerStatus newStatus = StatusMachine.computeNewStatus(status, event);
     if (newStatus == ServerStatus.INVALID_STATUS)
     {
-      Message msg = ERR_RS_CANNOT_CHANGE_STATUS.get(getBaseDNString(),
+      LocalizableMessage msg = ERR_RS_CANNOT_CHANGE_STATUS.get(getBaseDNString(),
           Integer.toString(serverId), status.toString(), event.toString());
       logError(msg);
       // Only change allowed is from NORMAL_STATUS to DEGRADED_STATUS and vice
@@ -320,7 +320,7 @@
     StatusMachineEvent event = StatusMachineEvent.statusToEvent(reqStatus);
     if (event == StatusMachineEvent.INVALID_EVENT)
     {
-      Message msg = ERR_RS_INVALID_NEW_STATUS.get(reqStatus.toString(),
+      LocalizableMessage msg = ERR_RS_INVALID_NEW_STATUS.get(reqStatus.toString(),
           getBaseDNString(), Integer.toString(serverId));
       logError(msg);
       return ServerStatus.INVALID_STATUS;
@@ -330,7 +330,7 @@
     ServerStatus newStatus = StatusMachine.computeNewStatus(status, event);
     if (newStatus == ServerStatus.INVALID_STATUS)
     {
-      Message msg = ERR_RS_CANNOT_CHANGE_STATUS.get(getBaseDNString(),
+      LocalizableMessage msg = ERR_RS_CANNOT_CHANGE_STATUS.get(getBaseDNString(),
           Integer.toString(serverId), status.toString(), event.toString());
       logError(msg);
       return ServerStatus.INVALID_STATUS;
@@ -457,7 +457,7 @@
       }
       catch(IOException e)
       {
-        Message errMessage = ERR_DS_DISCONNECTED_DURING_HANDSHAKE.get(
+        LocalizableMessage errMessage = ERR_DS_DISCONNECTED_DURING_HANDSHAKE.get(
           Integer.toString(inServerStartMsg.getServerId()),
           Integer.toString(replicationServer.getServerId()));
         throw new DirectoryException(ResultCode.OTHER, errMessage);
@@ -473,7 +473,7 @@
 
       replicationServerDomain.register(this);
 
-      Message message = INFO_REPLICATION_SERVER_CONNECTION_FROM_DS
+      LocalizableMessage message = INFO_REPLICATION_SERVER_CONNECTION_FROM_DS
           .get(getReplicationServerId(), getServerId(),
               replicationServerDomain.getBaseDN().toNormalizedString(),
               session.getReadableRemoteAddress());
@@ -572,7 +572,7 @@
       return null;
     } else if (!(msg instanceof StartSessionMsg))
     {
-      Message message = Message.raw(
+      LocalizableMessage message = LocalizableMessage.raw(
           "Protocol error: StartSessionMsg required." + msg + " received.");
       abortStart(message);
       return null;
@@ -585,7 +585,7 @@
     // Sanity check: is it a valid initial status?
     if (!isValidInitialStatus(this.status))
     {
-      Message message = ERR_RS_INVALID_INIT_STATUS.get(
+      LocalizableMessage message = ERR_RS_INVALID_INIT_STATUS.get(
           this.status.toString(),
           getBaseDNString(),
           Integer.toString(serverId));
@@ -614,7 +614,7 @@
     {
       if (generationId != localGenerationId)
       {
-        Message message = WARN_BAD_GENERATION_ID_FROM_DS.get(
+        LocalizableMessage message = WARN_BAD_GENERATION_ID_FROM_DS.get(
             serverId, session.getReadableRemoteAddress(),
             generationId, getBaseDNString(),
             getReplicationServerId(), localGenerationId);
@@ -628,7 +628,7 @@
       {
         // If the LDAP server has already sent changes
         // it is not expected to connect to an empty RS
-        Message message = WARN_BAD_GENERATION_ID_FROM_DS.get(
+        LocalizableMessage message = WARN_BAD_GENERATION_ID_FROM_DS.get(
             serverId, session.getReadableRemoteAddress(),
             generationId, getBaseDNString(),
             getReplicationServerId(), localGenerationId);
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 6aa1080..8ebfc99 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
@@ -31,9 +31,7 @@
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
-import org.opends.messages.Severity;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.replication.common.CSN;
 import org.opends.server.replication.common.MultiDomainServerState;
 import org.opends.server.replication.common.ServerState;
@@ -361,7 +359,7 @@
     }
     catch(Exception e)
     {
-      Message message = Message.raw(e.getLocalizedMessage());
+      LocalizableMessage message = LocalizableMessage.raw(e.getLocalizedMessage());
       throw new DirectoryException(ResultCode.OTHER, message);
     }
     return inECLStartMsg.getSSLEncryption();
@@ -481,7 +479,7 @@
     }
     catch(Exception e)
     {
-      abortStart(Message.raw(e.getLocalizedMessage()));
+      abortStart(LocalizableMessage.raw(e.getLocalizedMessage()));
     }
     finally
     {
@@ -508,7 +506,7 @@
     }
     else if (!(msg instanceof StartECLSessionMsg))
     {
-      Message message = Message.raw(
+      LocalizableMessage message = LocalizableMessage.raw(
           "Protocol error: StartECLSessionMsg required." + msg + " received.");
       abortStart(message);
       return null;
@@ -566,8 +564,7 @@
       releaseCursor();
       throw new DirectoryException(
           ResultCode.OPERATIONS_ERROR,
-          Message.raw(Category.SYNC,
-              Severity.FATAL_ERROR,e.getLocalizedMessage()));
+          LocalizableMessage.raw(e.getLocalizedMessage()));
     }
   }
 
@@ -666,7 +663,7 @@
     }
 
     // startChangeNumber is greater than the potential newest change number
-    throw new DirectoryException(ResultCode.SUCCESS, Message.raw(""));
+    throw new DirectoryException(ResultCode.SUCCESS, LocalizableMessage.raw(""));
   }
 
   private DBCursor<ChangeNumberIndexRecord> getCursorFrom(
@@ -678,7 +675,7 @@
     if (cursor.getRecord() == null)
     {
       close(cursor);
-      throw new ChangelogException(Message.raw("Change Number "
+      throw new ChangelogException(LocalizableMessage.raw("Change Number "
           + startChangeNumber + " is not available in the Changelog"));
     }
     return cursor;
@@ -718,7 +715,7 @@
       // FIXME:ECL do not publish internal exception plumb to the client
       throw new DirectoryException(
           ResultCode.OPERATIONS_ERROR,
-          Message.raw(Category.SYNC, Severity.INFORMATION,"Exception raised: " +
+          LocalizableMessage.raw("Exception raised: " +
               e),
               e);
     }
@@ -919,8 +916,7 @@
     releaseCursor();
     for (DomainContext domainCtxt : domainCtxts) {
       if (!domainCtxt.unRegisterHandler()) {
-        logError(Message.raw(Category.SYNC, Severity.NOTICE,
-            this + " shutdown() - error when unregistering handler "
+        logError(LocalizableMessage.raw(            this + " shutdown() - error when unregistering handler "
                 + domainCtxt.mh));
       }
       domainCtxt.stopServer();
@@ -1253,7 +1249,7 @@
       TRACER.debugCaught(DebugLogLevel.ERROR, e);
       throw new DirectoryException(
           ResultCode.OPERATIONS_ERROR,
-          Message.raw(Category.SYNC, Severity.INFORMATION,"Exception raised: "),
+          LocalizableMessage.raw("Exception raised: "),
           e);
     }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/MessageHandler.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/MessageHandler.java
index f749d9d..71cfd8e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/MessageHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/MessageHandler.java
@@ -30,7 +30,7 @@
 import java.util.List;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.MonitorProvider;
 import org.opends.server.config.ConfigException;
@@ -56,7 +56,7 @@
  * MessageHandlers are registered into Replication server domains.
  * When an update message is received by a domain, the domain forwards
  * the message to the registered message handlers.
- * Message are buffered into a queue.
+ * LocalizableMessage are buffered into a queue.
  * Consumers are expected to come and consume the UpdateMsg from the queue.
  */
 public class MessageHandler extends MonitorProvider<MonitorProviderCfg>
@@ -249,7 +249,7 @@
   @Override
   public String getMonitorInstanceName()
   {
-    return "Message Handler";
+    return "LocalizableMessage Handler";
   }
 
   /**
@@ -610,7 +610,7 @@
     {
       if (!this.baseDN.equals(baseDN))
       {
-        Message message = ERR_RS_DN_DOES_NOT_MATCH.get(
+        LocalizableMessage message = ERR_RS_DN_DOES_NOT_MATCH.get(
             this.baseDN.toNormalizedString(), baseDN.toNormalizedString());
         throw new DirectoryException(ResultCode.OTHER, message, null);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/MsgQueue.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/MsgQueue.java
index b6040f7..13903d9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/MsgQueue.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/MsgQueue.java
@@ -22,14 +22,14 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
- *      Portions copyright 2012-2013 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.replication.server;
 
 import java.util.NavigableMap;
 import java.util.TreeMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.replication.common.CSN;
 import org.opends.server.replication.protocol.UpdateMsg;
 
@@ -122,7 +122,7 @@
             // Adding 2 msgs with the same CSN is ok only when
             // the 2 msgs are the same
             bytesCount += (update.size() - msgSameCSN.size());
-            Message errMsg = ERR_RSQUEUE_DIFFERENT_MSGS_WITH_SAME_CN.get(
+            LocalizableMessage errMsg = ERR_RSQUEUE_DIFFERENT_MSGS_WITH_SAME_CN.get(
                 msgSameCSN.getCSN().toString(),
                 msgSameCSN.toString(), update.toString());
             logError(errMsg);
@@ -154,7 +154,7 @@
       if ((map.size() == 0) && (bytesCount != 0))
       {
         // should never happen
-        Message msg = ERR_BYTE_COUNT.get(Integer.toString(bytesCount));
+        LocalizableMessage msg = ERR_BYTE_COUNT.get(Integer.toString(bytesCount));
         logError(msg);
         bytesCount = 0;
       }
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 8361052..7256159 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
@@ -32,7 +32,7 @@
 import java.io.IOException;
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.server.ServerManagementContext;
 import org.opends.server.admin.std.server.*;
@@ -169,7 +169,7 @@
   {
     if ((baseDNs == null) || (baseDNs.length != 1))
     {
-      Message message = ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE.get();
+      LocalizableMessage message = ERR_MEMORYBACKEND_REQUIRE_EXACTLY_ONE_BASE.get();
       throw new ConfigException(message);
     }
 
@@ -191,7 +191,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
+        LocalizableMessage message = ERR_BACKEND_CANNOT_REGISTER_BASEDN.get(
             dn.toString(), getExceptionMessage(e));
         throw new InitializationException(message, e);
       }
@@ -360,7 +360,7 @@
   public synchronized void addEntry(Entry entry, AddOperation addOperation)
          throws DirectoryException
   {
-    Message message = ERR_BACKUP_ADD_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_ADD_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -374,7 +374,7 @@
                                        DeleteOperation deleteOperation)
          throws DirectoryException
   {
-    Message message = ERR_BACKUP_DELETE_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_DELETE_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -388,7 +388,7 @@
                                         ModifyOperation modifyOperation)
          throws DirectoryException
   {
-    Message message = ERR_BACKUP_MODIFY_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_MODIFY_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -402,7 +402,7 @@
                                        ModifyDNOperation modifyDNOperation)
          throws DirectoryException
   {
-    Message message = ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_BACKUP_MODIFY_DN_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -449,7 +449,7 @@
   throws DirectoryException
   {
     if(server == null) {
-       Message message = ERR_REPLICATONBACKEND_EXPORT_LDIF_FAILED.get();
+       LocalizableMessage message = ERR_REPLICATONBACKEND_EXPORT_LDIF_FAILED.get();
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,message);
     }
 
@@ -477,7 +477,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
         ERR_BACKEND_CANNOT_CREATE_LDIF_WRITER.get(String.valueOf(e));
       throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
           message, e);
@@ -512,7 +512,7 @@
       rate = 1000f*exportedCount / totalTime;
     }
 
-    Message message = NOTE_JEB_EXPORT_FINAL_STATUS.get(
+    LocalizableMessage message = NOTE_JEB_EXPORT_FINAL_STATUS.get(
         exportedCount, skippedCount, totalTime/1000, rate);
     logError(message);
   }
@@ -884,7 +884,7 @@
 
       final String dnStr = (dn != null) ? dn.toNormalizedString() : "Unknown";
 
-      Message message;
+      LocalizableMessage message;
       if (isExport)
       {
         message = ERR_BACKEND_EXPORT_ENTRY.get(dnStr, String.valueOf(e));
@@ -965,7 +965,7 @@
   public synchronized LDIFImportResult importLDIF(LDIFImportConfig importConfig)
          throws DirectoryException
   {
-    Message message = ERR_REPLICATONBACKEND_IMPORT_LDIF_NOT_SUPPORTED.get();
+    LocalizableMessage message = ERR_REPLICATONBACKEND_IMPORT_LDIF_NOT_SUPPORTED.get();
     throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
   }
 
@@ -1111,7 +1111,7 @@
 
       float rate = 1000f*deltaCount / deltaTime;
 
-      Message message =
+      LocalizableMessage message =
           NOTE_JEB_EXPORT_PROGRESS_REPORT.get(latestCount, skippedCount, rate);
       logError(message);
 
@@ -1175,7 +1175,7 @@
         matchedDN = matchedDN.getParentDNInSuffix();
       }
 
-      Message message = ERR_REPLICATIONBACKEND_ENTRY_DOESNT_EXIST.
+      LocalizableMessage message = ERR_REPLICATIONBACKEND_ENTRY_DOESNT_EXIST.
         get(String.valueOf(searchBaseDN));
       throw new DirectoryException(
           ResultCode.NO_SUCH_OBJECT, message, matchedDN, null);
@@ -1188,7 +1188,7 @@
       {
         if (!baseDNSet.contains(searchBaseDN))
         {
-          Message message = ERR_REPLICATIONBACKEND_ENTRY_DOESNT_EXIST.get(
+          LocalizableMessage message = ERR_REPLICATIONBACKEND_ENTRY_DOESNT_EXIST.get(
               String.valueOf(searchBaseDN));
           throw new DirectoryException(
               ResultCode.NO_SUCH_OBJECT, message, null, null);
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationDomainMonitor.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationDomainMonitor.java
index dcf20e1..23cff08 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationDomainMonitor.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationDomainMonitor.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;
 
@@ -32,7 +32,7 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.replication.common.CSN;
 import org.opends.server.replication.common.ServerState;
 import org.opends.server.replication.protocol.MonitorMsg;
@@ -182,7 +182,7 @@
               catch (IOException e)
               {
                 // Log a message and do a best effort from here.
-                Message message = ERR_SENDING_REMOTE_MONITOR_DATA_REQUEST.get(
+                LocalizableMessage message = ERR_SENDING_REMOTE_MONITOR_DATA_REQUEST.get(
                     baseDN, serverId, e.getMessage());
                 logError(message);
               }
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 762ac4b..9293751 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
@@ -33,10 +33,8 @@
 import java.util.concurrent.CopyOnWriteArraySet;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.Severity;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.VirtualAttributeCfgDefn.*;
 import org.opends.server.admin.std.server.ReplicationServerCfg;
@@ -199,7 +197,7 @@
 
   void runListen()
   {
-    Message listenMsg = NOTE_REPLICATION_SERVER_LISTENING.get(
+    LocalizableMessage listenMsg = NOTE_REPLICATION_SERVER_LISTENING.get(
         getServerId(),
         listenSocket.getInetAddress().getHostAddress(),
         listenSocket.getLocalPort());
@@ -277,7 +275,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
         if (!shutdown) {
-          Message message =
+          LocalizableMessage message =
             ERR_EXCEPTION_LISTENING.get(e.getLocalizedMessage());
           logError(message);
         }
@@ -443,14 +441,16 @@
       logError(ERR_UNKNOWN_HOSTNAME.get());
     } catch (IOException e)
     {
-      Message message = ERR_COULD_NOT_BIND_CHANGELOG.get(
+      LocalizableMessage message = ERR_COULD_NOT_BIND_CHANGELOG.get(
           getReplicationPort(), e.getMessage());
       logError(message);
     } catch (DirectoryException e)
     {
       //FIXME:DirectoryException is raised by initializeECL => fix err msg
-      Message message = Message.raw(Category.SYNC, Severity.SEVERE_ERROR,
-      "Directory Exception raised by ECL initialization: " + e.getMessage());
+      LocalizableMessage message =
+          LocalizableMessage
+              .raw("Directory Exception raised by ECL initialization: "
+                  + e.getMessage());
       logError(message);
     }
   }
@@ -523,7 +523,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
         NOTE_ERR_UNABLE_TO_ENABLE_ECL_VIRTUAL_ATTR.get(attrName, e.toString());
       throw new DirectoryException(ResultCode.OPERATIONS_ERROR, message, e);
     }
@@ -738,7 +738,7 @@
    * @return true if the configuration is acceptable, false other wise.
    */
   public static boolean isConfigurationAcceptable(
-      ReplicationServerCfg configuration, List<Message> unacceptableReasons)
+      ReplicationServerCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     int port = configuration.getReplicationPort();
 
@@ -751,7 +751,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_COULD_NOT_BIND_CHANGELOG.get(port, e.getMessage());
+      LocalizableMessage message = ERR_COULD_NOT_BIND_CHANGELOG.get(port, e.getMessage());
       unacceptableReasons.add(message);
       return false;
     }
@@ -926,7 +926,7 @@
    */
   @Override
   public boolean isConfigurationChangeAcceptable(
-      ReplicationServerCfg configuration, List<Message> unacceptableReasons)
+      ReplicationServerCfg configuration, List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -1000,9 +1000,9 @@
     }
     catch(Exception e)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(e.getLocalizedMessage());
-      Message msg = ERR_CHECK_CREATE_REPL_BACKEND_FAILED.get(mb.toString());
+      LocalizableMessage msg = ERR_CHECK_CREATE_REPL_BACKEND_FAILED.get(mb.toString());
       throw new ConfigException(msg, e);
     }
   }
@@ -1053,9 +1053,9 @@
     }
     catch(Exception e)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(e.getLocalizedMessage());
-      Message msg = ERR_DELETE_REPL_BACKEND_FAILED.get(mb.toString());
+      LocalizableMessage msg = ERR_DELETE_REPL_BACKEND_FAILED.get(mb.toString());
       logError(msg);
     }
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServerDomain.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
index 86fed9b..f42b878 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServerDomain.java
@@ -35,10 +35,8 @@
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.concurrent.locks.ReentrantLock;
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.Severity;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.api.MonitorProvider;
 import org.opends.server.core.DirectoryServer;
@@ -244,7 +242,7 @@
         } else
         {
           // Unknown assured mode: should never happen
-          Message errorMsg = ERR_RS_UNKNOWN_ASSURED_MODE.get(
+          LocalizableMessage errorMsg = ERR_RS_UNKNOWN_ASSURED_MODE.get(
             Integer.toString(localReplicationServer.getServerId()),
             assuredMode.toString(), baseDN.toNormalizedString(),
             update.toString());
@@ -598,7 +596,7 @@
     if (safeDataLevel < (byte) 1)
     {
       // Should never happen
-      Message errorMsg = ERR_UNKNOWN_ASSURED_SAFE_DATA_LEVEL.get(
+      LocalizableMessage errorMsg = ERR_UNKNOWN_ASSURED_SAFE_DATA_LEVEL.get(
         Integer.toString(localReplicationServer.getServerId()),
         Byte.toString(safeDataLevel), baseDN.toNormalizedString(),
         update.toString());
@@ -749,7 +747,7 @@
              * An error happened trying the send back an ack to the server.
              * Log an error and close the connection to this server.
              */
-            MessageBuilder mb = new MessageBuilder();
+            LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
             mb.append(ERR_RS_ERROR_SENDING_ACK.get(
               Integer.toString(localReplicationServer.getServerId()),
               Integer.toString(origServer.getServerId()),
@@ -827,7 +825,7 @@
              * An error happened trying the send back an ack to the server.
              * Log an error and close the connection to this server.
              */
-            MessageBuilder mb = new MessageBuilder();
+            LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
             mb.append(ERR_RS_ERROR_SENDING_ACK.get(
                 Integer.toString(localReplicationServer.getServerId()),
                 Integer.toString(origServer.getServerId()),
@@ -934,7 +932,7 @@
     if (connectedDSs.containsKey(dsHandler.getServerId()))
     {
       // looks like two connected LDAP servers have the same serverId
-      Message message = ERR_DUPLICATE_SERVER_ID.get(
+      LocalizableMessage message = ERR_DUPLICATE_SERVER_ID.get(
           localReplicationServer.getMonitorInstanceName(),
           connectedDSs.get(dsHandler.getServerId()).toString(),
           dsHandler.toString(), dsHandler.getServerId());
@@ -1023,8 +1021,7 @@
       }
       catch(Exception e)
       {
-        logError(Message.raw(Category.SYNC, Severity.NOTICE,
-            stackTraceToSingleLineString(e)));
+        logError(LocalizableMessage.raw(            stackTraceToSingleLineString(e)));
       }
       finally
       {
@@ -1107,8 +1104,7 @@
       }
       catch(Exception e)
       {
-        logError(Message.raw(Category.SYNC, Severity.NOTICE,
-            stackTraceToSingleLineString(e)));
+        logError(LocalizableMessage.raw(            stackTraceToSingleLineString(e)));
       }
       finally
       {
@@ -1232,7 +1228,7 @@
 
     // looks like two replication servers have the same serverId
     // log an error message and drop this connection.
-    Message message = ERR_DUPLICATE_REPLICATION_SERVER_ID.get(
+    LocalizableMessage message = ERR_DUPLICATE_REPLICATION_SERVER_ID.get(
         localReplicationServer.getMonitorInstanceName(),
         oldRsHandler.getServerAddressURL(), rsHandler.getServerAddressURL(),
         rsHandler.getServerId());
@@ -1500,7 +1496,7 @@
     String msgClassname = msg.getClass().getCanonicalName();
     logError(NOTE_ERR_ROUTING_TO_SERVER.get(msgClassname));
 
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     mb.append(NOTE_ERR_ROUTING_TO_SERVER.get(msgClassname));
     mb.append("serverID:").append(msg.getDestination());
     ErrorMsg errMsg = new ErrorMsg(msg.getSenderID(), mb.toMessage());
@@ -1519,14 +1515,14 @@
   private void replyWithUnreachablePeerMsg(ServerHandler msgEmitter,
       RoutableMsg msg)
   {
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     mb.append(ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get(
         baseDN.toNormalizedString(), Integer.toString(msg.getDestination())));
     mb.append(" In Replication Server=").append(
       this.localReplicationServer.getMonitorInstanceName());
     mb.append(" unroutable message =").append(msg.getClass().getSimpleName());
     mb.append(" Details:routing table is empty");
-    final Message message = mb.toMessage();
+    final LocalizableMessage message = mb.toMessage();
     logError(message);
 
     ErrorMsg errMsg = new ErrorMsg(this.localReplicationServer.getServerId(),
@@ -1542,7 +1538,7 @@
        * An error happened trying to send an error msg to this server.
        * Log an error and close the connection to this server.
        */
-      MessageBuilder mb2 = new MessageBuilder();
+      LocalizableMessageBuilder mb2 = new LocalizableMessageBuilder();
       mb2.append(ERR_CHANGELOG_ERROR_SENDING_ERROR.get(this.toString()));
       mb2.append(" ");
       mb2.append(stackTraceToSingleLineString(ignored));
@@ -1566,13 +1562,13 @@
          * destination server.
          * Send back an error to the originator of the message.
          */
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         mb.append(ERR_NO_REACHABLE_PEER_IN_THE_DOMAIN.get(
             baseDN.toNormalizedString(),
             Integer.toString(msg.getDestination())));
         mb.append(" unroutable message =" + msg.getClass().getSimpleName());
         mb.append(" Details: " + ioe.getLocalizedMessage());
-        final Message message = mb.toMessage();
+        final LocalizableMessage message = mb.toMessage();
         logError(message);
 
         ErrorMsg errMsg = new ErrorMsg(msg.getSenderID(), message);
@@ -1752,7 +1748,7 @@
             {
               if (i == 2)
               {
-                Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
+                LocalizableMessage message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
                     baseDN.toNormalizedString(), "directory",
                     Integer.toString(dsHandler.getServerId()), e.getMessage());
                 logError(message);
@@ -1788,7 +1784,7 @@
           {
             if (i == 2)
             {
-              Message message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
+              LocalizableMessage message = ERR_EXCEPTION_SENDING_TOPO_INFO.get(
                   baseDN.toNormalizedString(), "replication",
                   Integer.toString(rsHandler.getServerId()), e.getMessage());
               logError(message);
@@ -2013,8 +2009,7 @@
     }
     catch(Exception e)
     {
-      logError(Message.raw(Category.SYNC, Severity.NOTICE,
-          stackTraceToSingleLineString(e)));
+      logError(LocalizableMessage.raw(          stackTraceToSingleLineString(e)));
     }
     finally
     {
@@ -2063,15 +2058,14 @@
 
       sendTopoInfoToAllExcept(senderHandler);
 
-      Message message = NOTE_DIRECTORY_SERVER_CHANGED_STATUS.get(
+      LocalizableMessage message = NOTE_DIRECTORY_SERVER_CHANGED_STATUS.get(
           senderHandler.getServerId(), baseDN.toNormalizedString(),
           newStatus.toString());
       logError(message);
     }
     catch(Exception e)
     {
-      logError(Message.raw(Category.SYNC, Severity.NOTICE,
-          stackTraceToSingleLineString(e)));
+      logError(LocalizableMessage.raw(          stackTraceToSingleLineString(e)));
     }
     finally
     {
@@ -2145,8 +2139,7 @@
     }
     catch (Exception e)
     {
-      logError(Message.raw(Category.SYNC, Severity.NOTICE,
-          stackTraceToSingleLineString(e)));
+      logError(LocalizableMessage.raw(          stackTraceToSingleLineString(e)));
     }
     finally
     {
@@ -2187,7 +2180,7 @@
     }
     catch (ChangelogException e)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(ERR_ERROR_CLEARING_DB.get(baseDN.toString(), e.getMessage()
           + " " + stackTraceToSingleLineString(e)));
       logError(mb.toMessage());
@@ -2276,7 +2269,7 @@
 
       if (isDifferentGenerationId(rsHandler.getGenerationId()))
       {
-        Message message = WARN_BAD_GENERATION_ID_FROM_RS.get(
+        LocalizableMessage message = WARN_BAD_GENERATION_ID_FROM_RS.get(
             rsHandler.getServerId(),
             rsHandler.session.getReadableRemoteAddress(),
             rsHandler.getGenerationId(),
@@ -2296,8 +2289,7 @@
     }
     catch(Exception e)
     {
-      logError(Message.raw(Category.SYNC, Severity.NOTICE,
-          stackTraceToSingleLineString(e)));
+      logError(LocalizableMessage.raw(          stackTraceToSingleLineString(e)));
     }
     finally
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServerHandler.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
index f857883..df2420f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ReplicationServerHandler.java
@@ -32,7 +32,7 @@
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.replication.common.DSInfo;
 import org.opends.server.replication.common.RSInfo;
 import org.opends.server.replication.common.ServerState;
@@ -95,7 +95,7 @@
     }
     catch(Exception e)
     {
-      Message message = Message.raw(e.getLocalizedMessage());
+      LocalizableMessage message = LocalizableMessage.raw(e.getLocalizedMessage());
       throw new DirectoryException(ResultCode.OTHER, message);
     }
     return inReplServerStartMsg.getSSLEncryption();
@@ -176,7 +176,7 @@
         }
         else
         {
-          Message message = ERR_REPLICATION_PROTOCOL_MESSAGE_TYPE.get(msg
+          LocalizableMessage message = ERR_REPLICATION_PROTOCOL_MESSAGE_TYPE.get(msg
               .getClass().getCanonicalName(), "ReplServerStartMsg");
           abortStart(message);
         }
@@ -247,7 +247,7 @@
         replicationServerDomain.receiveTopoInfoFromRS(inTopoMsg, this, false);
       }
 
-      Message message = INFO_REPLICATION_SERVER_CONNECTION_TO_RS
+      LocalizableMessage message = INFO_REPLICATION_SERVER_CONNECTION_TO_RS
           .get(getReplicationServerId(), getServerId(),
               replicationServerDomain.getBaseDN().toNormalizedString(),
               session.getReadableRemoteAddress());
@@ -261,7 +261,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message errMessage = ERR_RS_DISCONNECTED_DURING_HANDSHAKE.get(
+      LocalizableMessage errMessage = ERR_RS_DISCONNECTED_DURING_HANDSHAKE.get(
           String.valueOf(getReplicationServerId()),
           session.getReadableRemoteAddress());
       abortStart(errMessage);
@@ -280,7 +280,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      abortStart(Message.raw(e.getLocalizedMessage()));
+      abortStart(LocalizableMessage.raw(e.getLocalizedMessage()));
     }
     finally
     {
@@ -382,7 +382,7 @@
       if (inTopoMsg!=null)
         replicationServerDomain.receiveTopoInfoFromRS(inTopoMsg, this, false);
 
-      Message message = INFO_REPLICATION_SERVER_CONNECTION_FROM_RS
+      LocalizableMessage message = INFO_REPLICATION_SERVER_CONNECTION_FROM_RS
           .get(getReplicationServerId(), getServerId(),
               replicationServerDomain.getBaseDN().toNormalizedString(),
               session.getReadableRemoteAddress());
@@ -396,7 +396,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message errMessage = ERR_RS_DISCONNECTED_DURING_HANDSHAKE.get(
+      LocalizableMessage errMessage = ERR_RS_DISCONNECTED_DURING_HANDSHAKE.get(
           Integer.toString(inReplServerStartMsg.getServerId()),
           Integer.toString(replicationServer.getServerId()));
       abortStart(errMessage);
@@ -415,7 +415,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      abortStart(Message.raw(e.getLocalizedMessage()));
+      abortStart(LocalizableMessage.raw(e.getLocalizedMessage()));
     }
     finally
     {
@@ -438,7 +438,7 @@
     }
     catch(Exception e)
     {
-      Message message = Message.raw(e.getLocalizedMessage());
+      LocalizableMessage message = LocalizableMessage.raw(e.getLocalizedMessage());
       throw new DirectoryException(ResultCode.OTHER, message);
     }
 
@@ -451,7 +451,7 @@
         return null;
       }
 
-      Message message = ERR_REPLICATION_PROTOCOL_MESSAGE_TYPE.get(
+      LocalizableMessage message = ERR_REPLICATION_PROTOCOL_MESSAGE_TYPE.get(
           msg.getClass().getCanonicalName(), "TopologyMsg");
       throw new DirectoryException(ResultCode.OTHER, message);
     }
@@ -536,7 +536,7 @@
        * and we have a null state ?
        * replicationServerDomain.setGenerationId(generationId, false);
        */
-      Message message = WARN_BAD_GENERATION_ID_FROM_RS.get(
+      LocalizableMessage message = WARN_BAD_GENERATION_ID_FROM_RS.get(
           serverId, session.getReadableRemoteAddress(), generationId,
           getBaseDNString(), getReplicationServerId(), localGenerationId);
       logError(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerHandler.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerHandler.java
index 639a822..fa16191 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerHandler.java
@@ -33,7 +33,7 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.DirectoryServer;
@@ -68,7 +68,7 @@
    * @param handler         The handler that manages that session.
    */
   static protected void closeSession(Session providedSession,
-      Message providedMsg, ServerHandler handler)
+      LocalizableMessage providedMsg, ServerHandler handler)
   {
     if (providedMsg != null)
     {
@@ -234,7 +234,7 @@
    * Abort a start procedure currently establishing.
    * @param reason The provided reason.
    */
-  protected void abortStart(Message reason)
+  protected void abortStart(LocalizableMessage reason)
   {
     // We did not recognize the message, close session as what can happen after
     // is undetermined and we do not want the server to be disturbed
@@ -329,7 +329,7 @@
       }
       catch (InterruptedException e)
       {
-        final Message message =
+        final LocalizableMessage message =
             ERR_SESSION_STARTUP_INTERRUPTED.get(session.getName());
         throw new DirectoryException(ResultCode.OTHER,
             message, e);
@@ -832,7 +832,7 @@
     boolean lockAcquired = replicationServerDomain.tryLock(timeout);
     if (!lockAcquired)
     {
-      Message message = WARN_TIMEOUT_WHEN_CROSS_CONNECTION.get(
+      LocalizableMessage message = WARN_TIMEOUT_WHEN_CROSS_CONNECTION.get(
           getBaseDNString(),
           serverId,
           session.getReadableRemoteAddress(),
@@ -1048,7 +1048,7 @@
    * Update the send window size based on the credit specified in the
    * given window message.
    *
-   * @param windowMsg The Window Message containing the information
+   * @param windowMsg The Window LocalizableMessage containing the information
    *                  necessary for updating the window size.
    */
   public void updateWindow(WindowMsg windowMsg)
@@ -1245,7 +1245,7 @@
    *
    * @return a "badly disconnected" error message for this server handler
    */
-  public Message getBadlyDisconnectedErrorMessage()
+  public LocalizableMessage getBadlyDisconnectedErrorMessage()
   {
     if (isDataServer())
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerReader.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerReader.java
index 06a75cf..6913fce 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerReader.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerReader.java
@@ -28,7 +28,7 @@
 
 import java.net.SocketException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.common.ServerStatus;
@@ -83,7 +83,7 @@
   @Override
   public void run()
   {
-    Message errMessage = null;
+    LocalizableMessage errMessage = null;
     if (debugEnabled())
     {
       TRACER.debugInfo(getName() + " starting");
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerWriter.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerWriter.java
index 23a2880..86aaa08 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerWriter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/ServerWriter.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.replication.server;
 
 import java.net.SocketException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.common.ServerStatus;
@@ -94,7 +94,7 @@
       TRACER.debugInfo(getName() + " starting");
     }
 
-    Message errMessage = null;
+    LocalizableMessage errMessage = null;
     try
     {
       while (true)
@@ -103,7 +103,7 @@
         if (update == null)
         {
           // this connection is closing
-          errMessage = Message.raw(
+          errMessage = LocalizableMessage.raw(
            "Connection closure: null update returned by domain.");
           return;
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/api/ChangelogException.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/api/ChangelogException.java
index 9739eea..77fb879 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/api/ChangelogException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/api/ChangelogException.java
@@ -21,11 +21,11 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.replication.server.changelog.api;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -45,7 +45,7 @@
    * @param message
    *          The message that explains the problem that occurred.
    */
-  public ChangelogException(Message message)
+  public ChangelogException(LocalizableMessage message)
   {
     super(message);
   }
@@ -69,7 +69,7 @@
    * @param cause
    *          The underlying cause that triggered this exception.
    */
-  public ChangelogException(Message message, Throwable cause)
+  public ChangelogException(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
index 33eaa30..4c91cb5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ChangeNumberIndexer.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013-2014 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.replication.server.changelog.je;
 
@@ -31,7 +31,7 @@
 import java.util.concurrent.ConcurrentSkipListMap;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.DirectoryThread;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.common.CSN;
@@ -515,8 +515,8 @@
       // Nothing can be done about it.
       // Rely on the DirectoryThread uncaught exceptions handler
       // for logging error + alert.
-      // Message logged here gives corrective information to the administrator.
-      Message msg = ERR_CHANGE_NUMBER_INDEXER_UNEXPECTED_EXCEPTION.get(
+      // LocalizableMessage logged here gives corrective information to the administrator.
+      LocalizableMessage msg = ERR_CHANGE_NUMBER_INDEXER_UNEXPECTED_EXCEPTION.get(
           getClass().getSimpleName(), stackTraceToSingleLineString(e));
       TRACER.debugError(msg.toString());
       throw e;
@@ -526,8 +526,8 @@
       // Nothing can be done about it.
       // Rely on the DirectoryThread uncaught exceptions handler
       // for logging error + alert.
-      // Message logged here gives corrective information to the administrator.
-      Message msg = ERR_CHANGE_NUMBER_INDEXER_UNEXPECTED_EXCEPTION.get(
+      // LocalizableMessage logged here gives corrective information to the administrator.
+      LocalizableMessage msg = ERR_CHANGE_NUMBER_INDEXER_UNEXPECTED_EXCEPTION.get(
           getClass().getSimpleName(), stackTraceToSingleLineString(e));
       TRACER.debugError(msg.toString());
       throw new RuntimeException(e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java
index 1553f69..f76583b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/DraftCNDB.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.server.changelog.je;
 
@@ -30,7 +30,7 @@
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.server.changelog.api.*;
 import org.opends.server.types.DebugLogLevel;
@@ -620,7 +620,7 @@
     }
     catch(Exception e)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(ERR_ERROR_CLEARING_DB.get(toString(),
           e.getMessage() + " " + stackTraceToSingleLineString(e)));
       logError(mb.toMessage());
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 3cac7b3..634ec3c 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
@@ -28,7 +28,7 @@
 
 import java.io.UnsupportedEncodingException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.replication.common.CSN;
 import org.opends.server.replication.server.changelog.api.*;
 import org.opends.server.types.DN;
@@ -112,7 +112,7 @@
     {
       // should never happens
       // TODO: i18n
-      throw new ChangelogException(Message.raw("need UTF-8 support"));
+      throw new ChangelogException(LocalizableMessage.raw("need UTF-8 support"));
     }
     catch (DirectoryException e)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
index fbd19e8..2cdd857 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/JEChangelogDB.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.replication.server.changelog.je;
 
@@ -32,8 +32,8 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.server.ReplicationServerCfg;
 import org.opends.server.config.ConfigException;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -164,11 +164,11 @@
       if (debugEnabled())
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
 
-      final MessageBuilder mb = new MessageBuilder();
+      final LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(e.getLocalizedMessage());
       mb.append(" ");
       mb.append(String.valueOf(dbDirectory));
-      Message msg = ERR_FILE_CHECK_CREATE_FAILED.get(mb.toString());
+      LocalizableMessage msg = ERR_FILE_CHECK_CREATE_FAILED.get(mb.toString());
       throw new ConfigException(msg, e);
     }
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java
index afe3adc..687912c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationDB.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;
 
@@ -32,8 +32,8 @@
 import java.util.concurrent.locks.ReadWriteLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.replication.common.CSN;
 import org.opends.server.replication.protocol.UpdateMsg;
 import org.opends.server.replication.server.ReplicationServer;
@@ -798,14 +798,14 @@
         {
           /*
            * An error happening trying to convert the data from the
-           * replicationServer database to an Update Message. This can only
+           * replicationServer database to an Update LocalizableMessage. This can only
            * happen if the database is corrupted. There is not much more that we
            * can do at this point except trying to continue with the next
            * record. In such case, it is therefore possible that we miss some
            * changes.
            * TODO : This should be handled by the repair functionality.
            */
-          Message message = ERR_REPLICATIONDB_CANNOT_PROCESS_CHANGE_RECORD
+          LocalizableMessage message = ERR_REPLICATIONDB_CANNOT_PROCESS_CHANGE_RECORD
               .get(replicationServer.getServerId(),
                   (csn == null ? "" : csn.toString()),
                   e.getMessage());
@@ -867,7 +867,7 @@
     }
     catch (Exception e)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(ERR_ERROR_CLEARING_DB.get(toString(),
           e.getMessage() + " " + stackTraceToSingleLineString(e)));
       logError(mb.toMessage());
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationData.java b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationData.java
index a854328..2ca90db 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationData.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/server/changelog/je/ReplicationData.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2010-2011 ForgeRock AS.
+ *      Portions Copyright 2010-2014 ForgeRock AS.
  */
 package org.opends.server.replication.server.changelog.je;
 
@@ -69,7 +69,7 @@
    *
    * @return     The generated change.
    *
-   * @throws Exception When the data was not a valid Update Message.
+   * @throws Exception When the data was not a valid Update LocalizableMessage.
    */
   public static UpdateMsg generateChange(byte[] data)
                                              throws Exception
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 4fa4099..9def6a4 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
@@ -33,8 +33,8 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.server.ChangelogState;
 import org.opends.server.replication.server.ReplicationServer;
@@ -243,7 +243,7 @@
     }
     catch (RuntimeException e)
     {
-      final Message message = ERR_JEB_DATABASE_EXCEPTION.get(e.getMessage());
+      final LocalizableMessage message = ERR_JEB_DATABASE_EXCEPTION.get(e.getMessage());
       throw new ChangelogException(message, e);
     }
     catch (DirectoryException e)
@@ -265,7 +265,7 @@
     {
       // should never happen
       // TODO: i18n
-      throw new ChangelogException(Message.raw(
+      throw new ChangelogException(LocalizableMessage.raw(
           "replicationServer state database has a wrong format: "
           + e.getLocalizedMessage() + "<" + data + ">"));
     }
@@ -281,7 +281,7 @@
     {
       // should never happen
       // TODO: i18n
-      throw new ChangelogException(Message.raw(
+      throw new ChangelogException(LocalizableMessage.raw(
           "replicationServer state database has a wrong format: "
           + e.getLocalizedMessage() + "<" + data + ">"));
     }
@@ -297,7 +297,7 @@
     {
       // should never happens
       // TODO: i18n
-      throw new ChangelogException(Message.raw("need UTF-8 support"));
+      throw new ChangelogException(LocalizableMessage.raw("need UTF-8 support"));
     }
   }
 
@@ -454,7 +454,7 @@
     }
   }
 
-  private Message closeDBErrorMessage(String dbName, DatabaseException e)
+  private LocalizableMessage closeDBErrorMessage(String dbName, DatabaseException e)
   {
     if (dbName != null)
     {
@@ -559,7 +559,7 @@
       }
       catch (RuntimeException e)
       {
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         mb.append(ERR_ERROR_CLEARING_DB.get(databaseName,
             e.getMessage() + " " +
             stackTraceToSingleLineString(e)));
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/service/ReplicationBroker.java b/opendj3-server-dev/src/server/org/opends/server/replication/service/ReplicationBroker.java
index b22e8f5..4e01941 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/service/ReplicationBroker.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/service/ReplicationBroker.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.service;
 
@@ -42,8 +42,8 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.server.ReplicationDomainCfg;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -454,7 +454,7 @@
     /**
      * Create a new instance of ReplicationServerInfo wrapping the passed
      * message.
-     * @param msg Message to wrap.
+     * @param msg LocalizableMessage to wrap.
      * @param newServerURL Override serverURL.
      * @return The new instance wrapping the passed message.
      * @throws IllegalArgumentException If the passed message has an unexpected
@@ -471,7 +471,7 @@
     /**
      * Create a new instance of ReplicationServerInfo wrapping the passed
      * message.
-     * @param msg Message to wrap.
+     * @param msg LocalizableMessage to wrap.
      * @return The new instance wrapping the passed message.
      * @throws IllegalArgumentException If the passed message has an unexpected
      *                                  type.
@@ -1131,7 +1131,7 @@
     Session newSession = null;
     Socket socket = null;
     boolean hasConnected = false;
-    Message errorMessage = null;
+    LocalizableMessage errorMessage = null;
 
     try
     {
@@ -1354,8 +1354,8 @@
 
     private final int localServerId;
     private Map<Integer, ReplicationServerInfo> bestRSs;
-    private final Map<Integer, Message> rsEvals =
-        new HashMap<Integer, Message>();
+    private final Map<Integer, LocalizableMessage> rsEvals =
+        new HashMap<Integer, LocalizableMessage>();
 
     /**
      * Ctor.
@@ -1393,7 +1393,7 @@
      * @param rejectedRSsEval
      *          the evaluation for all the rejected replication servers
      */
-    private void setBestRS(int bestRsId, Message rejectedRSsEval)
+    private void setBestRS(int bestRsId, LocalizableMessage rejectedRSsEval)
     {
       for (Iterator<Entry<Integer, ReplicationServerInfo>> it =
           this.bestRSs.entrySet().iterator(); it.hasNext();)
@@ -1409,7 +1409,7 @@
       }
     }
 
-    private void discardAll(Message eval)
+    private void discardAll(LocalizableMessage eval)
     {
       for (Integer rsId : bestRSs.keySet())
       {
@@ -1440,17 +1440,17 @@
     /**
      * Returns the evaluations for all the candidate replication servers.
      *
-     * @return a Map of serverId => Message containing the evaluation for each
+     * @return a Map of serverId => LocalizableMessage containing the evaluation for each
      *         candidate replication servers.
      */
-    Map<Integer, Message> getEvaluations()
+    Map<Integer, LocalizableMessage> getEvaluations()
     {
       if (foundBestRS())
       {
         final Integer bestRSServerId = getBestRS().getServerId();
         if (rsEvals.get(bestRSServerId) == null)
         {
-          final Message eval = NOTE_BEST_RS.get(bestRSServerId, localServerId);
+          final LocalizableMessage eval = NOTE_BEST_RS.get(bestRSServerId, localServerId);
           rsEvals.put(bestRSServerId, eval);
         }
       }
@@ -1465,12 +1465,12 @@
      *
      * @param rsServerId
      *          the supplied replication server Id
-     * @return the evaluation {@link Message} for the supplied replication
+     * @return the evaluation {@link LocalizableMessage} for the supplied replication
      *         server Id
      */
-    private Message getEvaluation(int rsServerId)
+    private LocalizableMessage getEvaluation(int rsServerId)
     {
-      final Message evaluation = getEvaluations().get(rsServerId);
+      final LocalizableMessage evaluation = getEvaluations().get(rsServerId);
       if (evaluation != null)
       {
         return evaluation;
@@ -1497,8 +1497,8 @@
   {
     private final Map<Integer, ReplicationServerInfo> accepted =
         new HashMap<Integer, ReplicationServerInfo>();
-    private final Map<ReplicationServerInfo, Message> rsEvals =
-        new HashMap<ReplicationServerInfo, Message>();
+    private final Map<ReplicationServerInfo, LocalizableMessage> rsEvals =
+        new HashMap<ReplicationServerInfo, LocalizableMessage>();
 
     private void accept(Integer rsId, ReplicationServerInfo rsInfo)
     {
@@ -1507,7 +1507,7 @@
       this.accepted.put(rsId, rsInfo);
     }
 
-    private void reject(ReplicationServerInfo rsInfo, Message reason)
+    private void reject(ReplicationServerInfo rsInfo, LocalizableMessage reason)
     {
       this.accepted.remove(rsInfo.getServerId()); // undo accept
       this.rsEvals.put(rsInfo, reason);
@@ -1524,10 +1524,10 @@
           new ReplicationServerInfo[accepted.size()]);
     }
 
-    public Map<Integer, Message> getRejected()
+    public Map<Integer, LocalizableMessage> getRejected()
     {
-      final Map<Integer, Message> result = new HashMap<Integer, Message>();
-      for (Entry<ReplicationServerInfo, Message> entry : rsEvals.entrySet())
+      final Map<Integer, LocalizableMessage> result = new HashMap<Integer, LocalizableMessage>();
+      for (Entry<ReplicationServerInfo, LocalizableMessage> entry : rsEvals.entrySet())
       {
         result.put(entry.getKey().getServerId(), entry.getValue());
       }
@@ -1850,7 +1850,7 @@
     {
       final String rsCSN =
           getCSN(rsInfo.getServerState(), localServerId).toStringUI();
-      final Message reason =
+      final LocalizableMessage reason =
           NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS.get(
             rsInfo.getServerId(), rsCSN, localServerId, localCSN.toStringUI());
       eval.reject(rsInfo, reason);
@@ -2298,7 +2298,7 @@
         }
         catch (Exception e)
         {
-          MessageBuilder mb = new MessageBuilder();
+          LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
           mb.append(NOTE_EXCEPTION_RESTARTING_SESSION.get(
               getBaseDN().toNormalizedString(), e.getLocalizedMessage()));
           mb.append(stackTraceToSingleLineString(e));
@@ -2359,7 +2359,7 @@
   /**
    * Publish a message to the other servers.
    * @param msg the message to publish
-   * @param recoveryMsg the message is a recovery Message
+   * @param recoveryMsg the message is a recovery LocalizableMessage
    * @param retryOnFailure whether retry should be done on failure
    * @return whether the message was successfully sent.
    */
@@ -2598,7 +2598,7 @@
         else if (msg instanceof StopMsg)
         {
           // RS performs a proper disconnection
-          Message message = WARN_REPLICATION_SERVER_PROPERLY_DISCONNECTED.get(
+          LocalizableMessage message = WARN_REPLICATION_SERVER_PROPERLY_DISCONNECTED.get(
               previousRsServerID, rs.replicationServer,
               serverId, baseDN.toNormalizedString());
           logError(message);
@@ -2661,7 +2661,7 @@
               {
                 // The best replication server is no more the one we are
                 // currently using. Disconnect properly then reconnect.
-                Message message;
+                LocalizableMessage message;
                 if (bestServerInfo == null)
                 {
                   message = NOTE_LOAD_BALANCE_REPLICATION_SERVER.get(
@@ -2742,7 +2742,7 @@
   {
     monitorResponse.set(false);
 
-    // publish Monitor Request Message to the Replication Server
+    // publish Monitor Request LocalizableMessage to the Replication Server
     publish(new MonitorRequestMsg(getServerId(), getRsServerId()));
 
     // wait for Response up to 10 seconds.
@@ -2967,7 +2967,7 @@
           new ChangeStatusMsg(ServerStatus.INVALID_STATUS, newStatus));
     } catch (IOException ex)
     {
-      Message message = ERR_EXCEPTION_SENDING_CS.get(
+      LocalizableMessage message = ERR_EXCEPTION_SENDING_CS.get(
         getBaseDN().toNormalizedString(),
         Integer.toString(getServerId()),
         ex.getLocalizedMessage() + " " + stackTraceToSingleLineString(ex));
diff --git a/opendj3-server-dev/src/server/org/opends/server/replication/service/ReplicationDomain.java b/opendj3-server-dev/src/server/org/opends/server/replication/service/ReplicationDomain.java
index f80743c..d7f02b4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/replication/service/ReplicationDomain.java
+++ b/opendj3-server-dev/src/server/org/opends/server/replication/service/ReplicationDomain.java
@@ -37,9 +37,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicReference;
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
-import org.opends.messages.Severity;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.ReplicationDomainCfgDefn.AssuredType;
 import org.opends.server.admin.std.server.ReplicationDomainCfg;
 import org.opends.server.api.DirectoryThread;
@@ -704,7 +702,7 @@
 
         if (debugEnabled() && !(msg instanceof HeartbeatMsg))
         {
-          TRACER.debugVerbose("Message received <" + msg + ">");
+          TRACER.debugVerbose("LocalizableMessage received <" + msg + ">");
         }
 
         if (msg instanceof AckMsg)
@@ -1333,7 +1331,7 @@
     catch (Exception e)
     {
       ResultCode resultCode = ResultCode.OTHER;
-      Message message = ERR_INVALID_EXPORT_TARGET.get();
+      LocalizableMessage message = ERR_INVALID_EXPORT_TARGET.get();
       throw new DirectoryException(resultCode, message, e);
     }
   }
@@ -1764,7 +1762,7 @@
     if (!ieContext.compareAndSet(null, ieCtx))
     {
       // Rejects 2 simultaneous exports
-      Message message = ERR_SIMULTANEOUS_IMPORT_EXPORT_REJECTED.get();
+      LocalizableMessage message = ERR_SIMULTANEOUS_IMPORT_EXPORT_REJECTED.get();
       throw new DirectoryException(ResultCode.OTHER, message);
     }
     return ieCtx;
@@ -1921,9 +1919,8 @@
           if (msg instanceof TopologyMsg
               && isRemoteDSConnected(ieCtx.importSource) == null)
           {
-            Message errMsg =
-              Message.raw(Category.SYNC, Severity.NOTICE,
-                  ERR_INIT_EXPORTER_DISCONNECTION.get(
+            LocalizableMessage errMsg =
+              LocalizableMessage.raw(                  ERR_INIT_EXPORTER_DISCONNECTION.get(
                       getBaseDNString(),
                       Integer.toString(getServerId()),
                       Integer.toString(ieCtx.importSource)));
@@ -2172,7 +2169,7 @@
       TRACER.debugInfo("[IE] Entering initializeFromRemote for " + this);
     }
 
-    Message errMsg = !broker.isConnected()
+    LocalizableMessage errMsg = !broker.isConnected()
         ? ERR_INITIALIZATION_FAILED_NOCONN.get(getBaseDNString())
         : null;
 
@@ -2215,8 +2212,7 @@
     catch(Exception e)
     {
       // Should not happen
-      errMsg = Message.raw(Category.SYNC, Severity.NOTICE,
-          e.getLocalizedMessage());
+      errMsg = LocalizableMessage.raw(          e.getLocalizedMessage());
       logError(errMsg);
     }
 
@@ -2394,7 +2390,7 @@
       }
       finally
       {
-        Message msg = NOTE_FULL_UPDATE_ENGAGED_FROM_REMOTE_END.get(
+        LocalizableMessage msg = NOTE_FULL_UPDATE_ENGAGED_FROM_REMOTE_END.get(
             getBaseDNString(), initTargetMsgReceived.getSenderID(),
             getServerId(),
             (ieCtx.getException() == null ? ""
@@ -2513,7 +2509,7 @@
     }
     if (!allSet)
     {
-      Message message = ERR_RESET_GENERATION_ID_FAILED.get(getBaseDNString());
+      LocalizableMessage message = ERR_RESET_GENERATION_ID_FAILED.get(getBaseDNString());
       throw new DirectoryException(ResultCode.OTHER, message);
     }
   }
@@ -2580,7 +2576,7 @@
 
     if (!isConnected())
     {
-      Message message = ERR_RESET_GENERATION_CONN_ERR_ID.get(getBaseDNString(),
+      LocalizableMessage message = ERR_RESET_GENERATION_CONN_ERR_ID.get(getBaseDNString(),
           Integer.toString(getServerId()),
           Long.toString(genIdMessage.getGenerationId()));
       throw new DirectoryException(ResultCode.OTHER, message);
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 2c4de2d..41c0a7c 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
@@ -46,7 +46,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import org.opends.server.authorization.dseecompat.Aci;
 import org.opends.server.authorization.dseecompat.AciException;
@@ -220,7 +220,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     try
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/AttributeTypeSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/AttributeTypeSyntax.java
index 14d7a59..21d0061 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/AttributeTypeSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/AttributeTypeSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -51,7 +51,7 @@
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.messages.SchemaMessages.*;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -119,7 +119,7 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
           EMR_CASE_IGNORE_OID, SYNTAX_ATTRIBUTE_TYPE_NAME);
       throw new InitializationException(message);
     }
@@ -128,7 +128,7 @@
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
           OMR_CASE_IGNORE_OID, SYNTAX_ATTRIBUTE_TYPE_NAME);
       throw new InitializationException(message);
     }
@@ -137,7 +137,7 @@
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
           SMR_CASE_IGNORE_OID, SYNTAX_ATTRIBUTE_TYPE_NAME);
       throw new InitializationException(message);
     }
@@ -233,7 +233,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We'll use the decodeAttributeType method to determine if the value is
     // acceptable.
@@ -303,7 +303,7 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_EMPTY_VALUE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_EMPTY_VALUE.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -314,7 +314,7 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_EXPECTED_OPEN_PARENTHESIS.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_EXPECTED_OPEN_PARENTHESIS.get(
           valueStr, (pos-1), String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -331,7 +331,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -354,7 +354,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message =
+            LocalizableMessage message =
               ERR_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID.
                   get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -368,7 +368,7 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
             ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
                 get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -397,7 +397,7 @@
         else
         {
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_STRING_OID.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_STRING_OID.
               get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -411,7 +411,7 @@
     String oid;
     if (pos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -431,7 +431,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -473,7 +473,7 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          Message message =
+          LocalizableMessage message =
             ERR_ATTR_SYNTAX_ATTRTYPE_UNEXPECTED_CLOSE_PARENTHESIS.
                 get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -534,7 +534,7 @@
         else
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR.get(
                       valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -560,7 +560,7 @@
               //hyphen is allowed but not as the first byte.
                 if (index==0)
                 {
-                  Message msg = ERR_ATTR_SYNTAX_ATTR_ILLEGAL_INITIAL_DASH.
+                  LocalizableMessage msg = ERR_ATTR_SYNTAX_ATTR_ILLEGAL_INITIAL_DASH.
                         get(value.toString());
                   throw new DirectoryException(
                           ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -573,7 +573,7 @@
               // name exceptions option is enabled.
                 if (index==0)
                 {
-                  Message msg =
+                  LocalizableMessage msg =
                           ERR_ATTR_SYNTAX_ATTR_ILLEGAL_INITIAL_UNDERSCORE.
                         get(value.toString(),
                             ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
@@ -583,7 +583,7 @@
                 }
                 else if (!allowExceptions)
                 {
-                  Message msg = ERR_ATTR_SYNTAX_ATTR_ILLEGAL_UNDERSCORE_CHAR.
+                  LocalizableMessage msg = ERR_ATTR_SYNTAX_ATTR_ILLEGAL_UNDERSCORE_CHAR.
                         get(value.toString(),
                             ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
                   throw new DirectoryException(
@@ -597,7 +597,7 @@
               //can not be a digit.
                 if(index ==0 && isDigit(ch) && !allowExceptions)
                 {
-                  Message message = ERR_ATTR_SYNTAX_ATTR_ILLEGAL_INITIAL_DIGIT.
+                  LocalizableMessage message = ERR_ATTR_SYNTAX_ATTR_ILLEGAL_INITIAL_DIGIT.
                     get(value.toString(), ch,
                         ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
                   throw new DirectoryException(
@@ -607,7 +607,7 @@
                 else if(!((ch>='0' && ch<='9') || (ch>='A' && ch<='Z') ||
                         (ch>='a' && ch<='z')))
                 {
-                  Message msg = ERR_ATTR_SYNTAX_ATTR_ILLEGAL_CHAR.get(
+                  LocalizableMessage msg = ERR_ATTR_SYNTAX_ATTR_ILLEGAL_CHAR.get(
                             value.toString(), ch, index);
                   throw new DirectoryException(
                           ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -652,7 +652,7 @@
           {
             // This is bad because we don't know what the superior attribute
             // type is so we can't base this attribute type on it.
-            Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUPERIOR_TYPE.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUPERIOR_TYPE.
                 get(String.valueOf(oid), String.valueOf(woidBuffer));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                          message);
@@ -691,7 +691,7 @@
         {
           // This is bad because we have no idea what the equality matching
           // rule should be.
-          Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_EQUALITY_MR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_EQUALITY_MR.get(
               String.valueOf(oid), String.valueOf(woidBuffer));
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                        message);
@@ -713,7 +713,7 @@
         {
           // This is bad because we have no idea what the ordering matching
           // rule should be.
-          Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_ORDERING_MR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_ORDERING_MR.get(
               String.valueOf(oid), String.valueOf(woidBuffer));
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                        message);
@@ -735,7 +735,7 @@
         {
           // This is bad because we have no idea what the substring matching
           // rule should be.
-          Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUBSTRING_MR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SUBSTRING_MR.get(
               String.valueOf(oid), String.valueOf(woidBuffer));
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                        message);
@@ -769,7 +769,7 @@
               if ((c = lowerStr.charAt(pos)) != ' '
                       &&  (c = lowerStr.charAt(pos)) != ')')
               {
-                Message message =
+                LocalizableMessage message =
                   ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
                       get(valueStr, String.valueOf(c), (pos-1));
                 throw new DirectoryException(
@@ -780,7 +780,7 @@
             }
             else if (! isDigit(c))
             {
-              Message message =
+              LocalizableMessage message =
                 ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
                     get(valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -798,7 +798,7 @@
             {
               if (lastWasPeriod)
               {
-                Message message =
+                LocalizableMessage message =
                     ERR_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID.
                       get(valueStr, (pos-1));
                 throw new DirectoryException(
@@ -828,7 +828,7 @@
             }
             else
             {
-              Message message =
+              LocalizableMessage message =
                 ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
                     get(valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -840,7 +840,7 @@
         syntax = schema.getSyntax(oidBuffer.toString());
         if (syntax == null)
         {
-          Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SYNTAX.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_SYNTAX.get(
               String.valueOf(oid), String.valueOf(oidBuffer));
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                        message);
@@ -932,7 +932,7 @@
           // This must be an illegal usage.
           attributeUsage = AttributeUsage.USER_APPLICATIONS;
 
-          Message message = WARN_ATTR_SYNTAX_ATTRTYPE_INVALID_ATTRIBUTE_USAGE.
+          LocalizableMessage message = WARN_ATTR_SYNTAX_ATTRTYPE_INVALID_ATTRIBUTE_USAGE.
               get(String.valueOf(oid), usageStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -961,7 +961,7 @@
       {
         // This is bad because we have no idea what the approximate matching
         // rule should be.
-        Message message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_APPROXIMATE_MR.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_ATTRTYPE_UNKNOWN_APPROXIMATE_MR.get(
             String.valueOf(oid), String.valueOf(ruleName));
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -979,7 +979,7 @@
     {
       if (superiorType.getUsage() != attributeUsage)
       {
-        Message message = WARN_ATTR_SYNTAX_ATTRTYPE_INVALID_SUPERIOR_USAGE.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_ATTRTYPE_INVALID_SUPERIOR_USAGE.get(
             oid, String.valueOf(attributeUsage), superiorType.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -988,7 +988,7 @@
       {
         if (!isCollective)
         {
-          Message message =
+          LocalizableMessage message =
                   WARN_ATTR_SYNTAX_ATTRTYPE_NONCOLLECTIVE_FROM_COLLECTIVE.get(
                     oid, superiorType.getNameOrOID());
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -1003,7 +1003,7 @@
     if (isNoUserModification &&
         (attributeUsage == AttributeUsage.USER_APPLICATIONS))
     {
-      Message message =
+      LocalizableMessage message =
           WARN_ATTR_SYNTAX_ATTRTYPE_NO_USER_MOD_NOT_OPERATIONAL.get(oid);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -1050,7 +1050,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1117,7 +1117,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1126,7 +1126,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message = WARN_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS.get(
           valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1153,7 +1153,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1202,7 +1202,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1211,7 +1211,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message = WARN_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_ATTRTYPE_EXPECTED_QUOTE_AT_POS.get(
           valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1239,7 +1239,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1281,7 +1281,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1300,7 +1300,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message =
+            LocalizableMessage message =
               ERR_ATTR_SYNTAX_ATTRTYPE_DOUBLE_PERIOD_IN_NUMERIC_OID.
                   get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1326,7 +1326,7 @@
           }
 
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_NUMERIC_OID.
                 get(lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1364,7 +1364,7 @@
           }
 
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_STRING_OID.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR_IN_STRING_OID.
               get(lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1373,7 +1373,7 @@
     }
     else
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_ATTRTYPE_ILLEGAL_CHAR.
                   get(lowerStr, String.valueOf(c), startPos);
       throw new DirectoryException(
@@ -1391,7 +1391,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1433,7 +1433,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1471,7 +1471,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1486,7 +1486,7 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_ATTRSYNTAX_EXTENSION_INVALID_CHARACTER.get(
                       valueStr, startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1523,7 +1523,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1551,7 +1551,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_ATTRTYPE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1581,7 +1581,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       AttributeTypeDescriptionAttributeSyntaxCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // The configuration will always be acceptable.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/AuthPasswordSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/AuthPasswordSyntax.java
index 306fe35..372e949 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/AuthPasswordSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/AuthPasswordSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -45,7 +45,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -213,7 +213,7 @@
    */
   @Override
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     try
     {
@@ -317,7 +317,7 @@
         case '$':
           break readScheme;
         default:
-          Message message = ERR_ATTR_SYNTAX_AUTHPW_INVALID_SCHEME_CHAR.get(pos);
+          LocalizableMessage message = ERR_ATTR_SYNTAX_AUTHPW_INVALID_SCHEME_CHAR.get(pos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
       }
@@ -327,7 +327,7 @@
     // The scheme must consist of at least one character.
     if (scheme.length() == 0)
     {
-      Message message = ERR_ATTR_SYNTAX_AUTHPW_NO_SCHEME.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_AUTHPW_NO_SCHEME.get();
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
               message);
     }
@@ -346,7 +346,7 @@
     }
     else
     {
-      Message message = ERR_ATTR_SYNTAX_AUTHPW_NO_SCHEME_SEPARATOR.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_AUTHPW_NO_SCHEME_SEPARATOR.get();
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
               message);
     }
@@ -374,7 +374,7 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_INFO_CHAR.get(pos);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                      message);
@@ -385,7 +385,7 @@
     // The authInfo element must consist of at least one character.
     if (scheme.length() == 0)
     {
-      Message message = ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -404,7 +404,7 @@
     }
     else
     {
-      Message message = ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO_SEPARATOR.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_INFO_SEPARATOR.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -431,7 +431,7 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ATTR_SYNTAX_AUTHPW_INVALID_AUTH_VALUE_CHAR.get(pos);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                      message);
@@ -442,7 +442,7 @@
     // The authValue element must consist of at least one character.
     if (scheme.length() == 0)
     {
-      Message message = ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_VALUE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_AUTHPW_NO_AUTH_VALUE.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -458,7 +458,7 @@
       }
       else
       {
-        Message message = ERR_ATTR_SYNTAX_AUTHPW_INVALID_TRAILING_CHAR.get(pos);
+        LocalizableMessage message = ERR_ATTR_SYNTAX_AUTHPW_INVALID_TRAILING_CHAR.get(pos);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                      message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/BinarySyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/BinarySyntax.java
index 10d390a..428558f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/BinarySyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/BinarySyntax.java
@@ -37,7 +37,7 @@
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -235,7 +235,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // All values will be acceptable for the binary syntax.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java
index f778e3a..4cf80e5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/BitStringEqualityMatchingRule.java
@@ -35,7 +35,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.forgerock.opendj.ldap.ByteSequence;
@@ -149,7 +149,7 @@
     if (length < 3)
     {
 
-      Message message = WARN_ATTR_SYNTAX_BIT_STRING_TOO_SHORT.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_BIT_STRING_TOO_SHORT.get(
               value.toString());
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
@@ -170,7 +170,7 @@
         (valueString.charAt(length-1) != 'B'))
     {
 
-      Message message = WARN_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_BIT_STRING_NOT_QUOTED.get(
               value.toString());
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -198,7 +198,7 @@
           break;
         default:
 
-          Message message = WARN_ATTR_SYNTAX_BIT_STRING_INVALID_BIT.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_BIT_STRING_INVALID_BIT.get(
                   value.toString(), String.valueOf(valueString.charAt(i)));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/BitStringSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/BitStringSyntax.java
index 286e42e..edd0231 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/BitStringSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/BitStringSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -200,7 +200,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     String valueString = value.toString().toUpperCase();
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/BooleanEqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/BooleanEqualityMatchingRule.java
index 804b3bd..2933690 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/BooleanEqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/BooleanEqualityMatchingRule.java
@@ -34,7 +34,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.ErrorLogger;
@@ -157,7 +157,7 @@
     }
     else
     {
-      Message message = WARN_ATTR_SYNTAX_ILLEGAL_BOOLEAN.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_ILLEGAL_BOOLEAN.get(
               value.toString());
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/BooleanSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/BooleanSyntax.java
index 9881018..b4bd459 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/BooleanSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/BooleanSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -45,7 +45,7 @@
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import org.opends.server.util.ServerConstants;
 
@@ -87,7 +87,7 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             WARN_ATTR_SYNTAX_ILLEGAL_BOOLEAN.get(normalizedValue.toString());
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
             message);
@@ -239,7 +239,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     String valueString = value.toString().toUpperCase();
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CaseExactIA5EqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/CaseExactIA5EqualityMatchingRule.java
index 63ff83f..93754fe 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CaseExactIA5EqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CaseExactIA5EqualityMatchingRule.java
@@ -35,7 +35,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.ErrorLogger;
@@ -185,7 +185,7 @@
         // enforcement is enabled, then we'll throw an exception.  Otherwise,
         // we'll get rid of the character.
 
-        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
                 value.toString(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CaseExactIA5SubstringMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/CaseExactIA5SubstringMatchingRule.java
index 81a3a3a..883b063 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CaseExactIA5SubstringMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CaseExactIA5SubstringMatchingRule.java
@@ -35,7 +35,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.SubstringMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.forgerock.opendj.ldap.ByteSequence;
@@ -185,7 +185,7 @@
         // This is not a valid character for an IA5 string.  If strict syntax
         // enforcement is enabled, then we'll throw an exception.  Otherwise,
         // we'll get rid of the character.
-        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
                 value.toString(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -271,7 +271,7 @@
         // This is not a valid character for an IA5 string.  If strict syntax
         // enforcement is enabled, then we'll throw an exception.  Otherwise,
         // we'll get rid of the character.
-        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
                 substring.toString(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CaseIgnoreIA5EqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/CaseIgnoreIA5EqualityMatchingRule.java
index dde1334..47d018a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CaseIgnoreIA5EqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CaseIgnoreIA5EqualityMatchingRule.java
@@ -35,7 +35,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.ErrorLogger;
@@ -185,7 +185,7 @@
         // enforcement is enabled, then we'll throw an exception.  Otherwise,
         // we'll get rid of the character.
 
-        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
                 value.toString(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CaseIgnoreIA5SubstringMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/CaseIgnoreIA5SubstringMatchingRule.java
index 3f265c4..8cf64a2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CaseIgnoreIA5SubstringMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CaseIgnoreIA5SubstringMatchingRule.java
@@ -35,7 +35,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.SubstringMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.ErrorLogger;
@@ -184,7 +184,7 @@
         // This is not a valid character for an IA5 string.  If strict syntax
         // enforcement is enabled, then we'll throw an exception.  Otherwise,
         // we'll get rid of the character.
-        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
                 value.toString(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -270,7 +270,7 @@
         // This is not a valid character for an IA5 string.  If strict syntax
         // enforcement is enabled, then we'll throw an exception.  Otherwise,
         // we'll get rid of the character.
-        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
                 substring.toString(), String.valueOf(c));
 
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CertificateExactAssertionSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/CertificateExactAssertionSyntax.java
index 6c461fa..f314f02 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CertificateExactAssertionSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CertificateExactAssertionSyntax.java
@@ -42,7 +42,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -185,7 +185,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // This method will never be called because this syntax is only used
     // within assertions.
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CertificateExactMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/CertificateExactMatchingRule.java
index 31c901d..9dede52 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CertificateExactMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CertificateExactMatchingRule.java
@@ -44,7 +44,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.ErrorLogger;
@@ -202,7 +202,7 @@
     catch (CertificateException ce)
     {
       // There seems to be a problem while parsing the certificate.
-      Message message = WARN_CERTIFICATE_MATCH_PARSE_ERROR.get(ce.getMessage());
+      LocalizableMessage message = WARN_CERTIFICATE_MATCH_PARSE_ERROR.get(ce.getMessage());
       if (debugEnabled())
       {
          TRACER.debugWarning(message.toString());
@@ -228,7 +228,7 @@
       // We couldn't normalize the DN for some reason.  If we're supposed to use
       // strict syntax enforcement, then throw an exception.  Otherwise, log a
       // message and just try our best.
-      Message message = ERR_CERTIFICATE_MATCH_INVALID_DN.get(
+      LocalizableMessage message = ERR_CERTIFICATE_MATCH_INVALID_DN.get(
               dnstring, getExceptionMessage(e));
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -294,7 +294,7 @@
       identifier = parser.nextNamedValueIdentifier();
       if (!identifier.equals(GSER_ID_SERIALNUMBER))
       {
-        Message message = ERR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND
+        LocalizableMessage message = ERR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND
                             .get(GSER_ID_SERIALNUMBER);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -310,7 +310,7 @@
       identifier = parser.nextNamedValueIdentifier();
       if (!identifier.equals(GSER_ID_ISSUER))
       {
-        Message message = ERR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND
+        LocalizableMessage message = ERR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND
                             .get(GSER_ID_ISSUER);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -320,7 +320,7 @@
       identifier = parser.nextChoiceValueIdentifier();
       if (!identifier.equals(GSER_ID_RDNSEQUENCE))
       {
-        Message message = ERR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND
+        LocalizableMessage message = ERR_CERTIFICATE_MATCH_IDENTIFIER_NOT_FOUND
                             .get(GSER_ID_RDNSEQUENCE);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -335,7 +335,7 @@
       // There should not be additional characters
       if (parser.hasNext())
       {
-        Message message = ERR_CERTIFICATE_MATCH_EXPECTED_END.get();
+        LocalizableMessage message = ERR_CERTIFICATE_MATCH_EXPECTED_END.get();
         switch (DirectoryServer.getSyntaxEnforcementPolicy())
         {
           case REJECT:
@@ -349,7 +349,7 @@
     }
     catch (GSERException e)
     {
-      Message message = ERR_CERTIFICATE_MATCH_GSER_INVALID.get(
+      LocalizableMessage message = ERR_CERTIFICATE_MATCH_GSER_INVALID.get(
                           getExceptionMessage(e));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -371,7 +371,7 @@
       // We couldn't normalize the DN for some reason.  If we're supposed to use
       // strict syntax enforcement, then throw an exception.  Otherwise, log a
       // message and just try our best.
-      Message message = ERR_CERTIFICATE_MATCH_INVALID_DN.get(
+      LocalizableMessage message = ERR_CERTIFICATE_MATCH_INVALID_DN.get(
               dnstring, getExceptionMessage(e));
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CertificateListSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/CertificateListSyntax.java
index 8465fb9..fbd4877 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CertificateListSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CertificateListSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -221,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // All values will be acceptable for the certificate list syntax.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CertificatePairSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/CertificatePairSyntax.java
index df0fc50..9a49dec 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CertificatePairSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CertificatePairSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -221,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // All values will be acceptable for the certificate pair syntax.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CertificateSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/CertificateSyntax.java
index f3ccc8f..84b5fc2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CertificateSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CertificateSyntax.java
@@ -51,8 +51,8 @@
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.protocols.asn1.ASN1Constants.*;
 
@@ -134,7 +134,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       CertificateAttributeSyntaxCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // The configuration is always acceptable.
     return true;
@@ -264,7 +264,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Skip validation if strict validation is disabled.
     if (!config.isStrictFormat())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CollationMatchingRuleFactory.java b/opendj3-server-dev/src/server/org/opends/server/schema/CollationMatchingRuleFactory.java
index d2a4d5b..31993b6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CollationMatchingRuleFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CollationMatchingRuleFactory.java
@@ -42,7 +42,7 @@
 import java.text.Collator;
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.
   CollationMatchingRuleCfgDefn.MatchingRuleType;
@@ -249,7 +249,7 @@
       String languageTag = mapper.getLanguageTag();
       if (nOID == null || languageTag == null)
       {
-        Message msg =
+        LocalizableMessage msg =
             WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_FORMAT
                 .get(collation);
         logError(msg);
@@ -269,7 +269,7 @@
       else
       {
         // This locale is not supported by JVM.
-        Message msg =
+        LocalizableMessage msg =
             WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_LOCALE.get(
                 collation, configuration.dn().toNormalizedString(),
                 languageTag);
@@ -308,7 +308,7 @@
   {
     ResultCode resultCode = ResultCode.SUCCESS;
     boolean adminActionRequired = false;
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     if (!configuration.isEnabled()
         || currentConfig.isEnabled() != configuration.isEnabled())
@@ -357,7 +357,7 @@
     }
     catch (DirectoryException de)
     {
-      Message message =
+      LocalizableMessage message =
           WARN_CONFIG_SCHEMA_MR_CONFLICTING_MR.get(String
               .valueOf(configuration.dn()), de.getMessageObject());
       adminActionRequired = true;
@@ -376,7 +376,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       CollationMatchingRuleCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     boolean configAcceptable = true;
 
@@ -401,7 +401,7 @@
       if (nOID == null || languageTag == null)
       {
         configAcceptable = false;
-        Message msg =
+        LocalizableMessage msg =
             WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_FORMAT
                 .get(collation);
         unacceptableReasons.add(msg);
@@ -411,7 +411,7 @@
       Locale locale = getLocale(languageTag);
       if (locale == null)
       {
-        Message msg =
+        LocalizableMessage msg =
             WARN_ATTR_INVALID_COLLATION_MATCHING_RULE_LOCALE.get(
                 collation, configuration.dn().toNormalizedString(),
                 languageTag);
@@ -1106,7 +1106,7 @@
       // If there were no asterisks, then this isn't a substring filter.
       if (asteriskPositions.isEmpty())
       {
-        Message message =
+        LocalizableMessage message =
             ERR_SEARCH_FILTER_SUBSTRING_NO_ASTERISKS.get(filterString,
                 0, endPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/CountryStringSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/CountryStringSyntax.java
index c2c1400..e792ef9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/CountryStringSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/CountryStringSyntax.java
@@ -46,8 +46,8 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.PrintableString.*;
 import static org.opends.server.schema.SchemaConstants.*;
 
@@ -141,7 +141,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       CountryStringAttributeSyntaxCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // The configuration is always acceptable.
     return true;
@@ -273,7 +273,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     String stringValue = value.toString();
     if (stringValue.length() != 2)
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/DITContentRuleSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/DITContentRuleSyntax.java
index ce0dfbf..b456b95 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/DITContentRuleSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/DITContentRuleSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -48,7 +48,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -104,7 +104,7 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
           EMR_CASE_IGNORE_OID, SYNTAX_DIT_CONTENT_RULE_NAME);
       throw new InitializationException(message);
     }
@@ -113,7 +113,7 @@
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
           OMR_CASE_IGNORE_OID, SYNTAX_DIT_CONTENT_RULE_NAME);
       throw new InitializationException(message);
     }
@@ -122,7 +122,7 @@
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
           SMR_CASE_IGNORE_OID, SYNTAX_DIT_CONTENT_RULE_NAME);
       throw new InitializationException(message);
     }
@@ -205,7 +205,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We'll use the decodeDITContentRule method to determine if the value is
     // acceptable.
@@ -274,7 +274,7 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      Message message = ERR_ATTR_SYNTAX_DCR_EMPTY_VALUE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_EMPTY_VALUE.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -285,7 +285,7 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      Message message = ERR_ATTR_SYNTAX_DCR_EXPECTED_OPEN_PARENTHESIS.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_EXPECTED_OPEN_PARENTHESIS.get(
           valueStr, (pos-1), String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -302,7 +302,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -324,7 +324,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message = ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID.
+            LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID.
                 get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message);
@@ -337,7 +337,7 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID.get(
               valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -362,7 +362,7 @@
         else
         {
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID.get(
               valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -376,7 +376,7 @@
     String oid;
     if (pos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -397,14 +397,14 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ATTR_SYNTAX_DCR_UNKNOWN_STRUCTURAL_CLASS.get(valueStr, oid);
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
     }
     else if (structuralClass.getObjectClassType() != ObjectClassType.STRUCTURAL)
     {
-      Message message = ERR_ATTR_SYNTAX_DCR_STRUCTURAL_CLASS_NOT_STRUCTURAL.
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_STRUCTURAL_CLASS_NOT_STRUCTURAL.
           get(valueStr, oid, structuralClass.getNameOrOID(),
               String.valueOf(structuralClass.getObjectClassType()));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
@@ -421,7 +421,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -460,7 +460,7 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          Message message = ERR_ATTR_SYNTAX_DCR_UNEXPECTED_CLOSE_PARENTHESIS.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNEXPECTED_CLOSE_PARENTHESIS.
               get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -518,7 +518,7 @@
         else
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
                       valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -567,7 +567,7 @@
               }
               else
               {
-                Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS.
+                LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS.
                     get(valueStr, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                              message);
@@ -576,7 +576,7 @@
             else if (oc.getObjectClassType() != ObjectClassType.AUXILIARY)
             {
               // This isn't good because it isn't an auxiliary class.
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY.
                     get(valueStr, woidBuffer.toString(),
                         oc.getObjectClassType().toString());
@@ -597,7 +597,7 @@
             }
             else if (c != '$')
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
                           valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -621,7 +621,7 @@
             }
             else
             {
-              Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_AUXILIARY_CLASS.get(
                   valueStr, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                            message);
@@ -630,7 +630,7 @@
           else if (oc.getObjectClassType() != ObjectClassType.AUXILIARY)
           {
             // This isn't good because it isn't an auxiliary class.
-            Message message = ERR_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY.
+            LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_AUXILIARY_CLASS_NOT_AUXILIARY.
                 get(valueStr, woidBuffer.toString(),
                     oc.getObjectClassType().toString());
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -670,7 +670,7 @@
               }
               else
               {
-                Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get(
+                LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get(
                     valueStr, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                              message);
@@ -690,7 +690,7 @@
             }
             else if (c != '$')
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
                           valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -715,7 +715,7 @@
             }
             else
             {
-              Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_REQUIRED_ATTR.get(
                   valueStr, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                            message);
@@ -755,7 +755,7 @@
               }
               else
               {
-                Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get(
+                LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get(
                     valueStr, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                              message);
@@ -775,7 +775,7 @@
             }
             else if (c != '$')
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
                           valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -800,7 +800,7 @@
             }
             else
             {
-              Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_OPTIONAL_ATTR.get(
                   valueStr, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                            message);
@@ -840,7 +840,7 @@
               }
               else
               {
-                Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR.
+                LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR.
                     get(valueStr, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                              message);
@@ -860,7 +860,7 @@
             }
             else if (c != '$')
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
                           valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -885,7 +885,7 @@
             }
             else
             {
-              Message message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_UNKNOWN_PROHIBITED_ATTR.get(
                   valueStr, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                            message);
@@ -916,7 +916,7 @@
     {
       if (structuralClass.isRequired(t))
       {
-        Message message = ERR_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_STRUCTURAL.
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_STRUCTURAL.
             get(valueStr, t.getNameOrOID(), structuralClass.getNameOrOID());
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
       }
@@ -925,7 +925,7 @@
       {
         if (oc.isRequired(t))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DCR_PROHIBITED_REQUIRED_BY_AUXILIARY.
                 get(valueStr, t.getNameOrOID(), oc.getNameOrOID());
           throw new DirectoryException(
@@ -973,7 +973,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1031,7 +1031,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1040,7 +1040,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS.get(
                   valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
@@ -1068,7 +1068,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1117,7 +1117,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1126,7 +1126,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DCR_EXPECTED_QUOTE_AT_POS.get(
                   valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
@@ -1155,7 +1155,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1197,7 +1197,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1216,7 +1216,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message = ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID.
+            LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_DOUBLE_PERIOD_IN_NUMERIC_OID.
                 get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message);
@@ -1241,7 +1241,7 @@
           }
 
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_NUMERIC_OID.get(
               lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1279,7 +1279,7 @@
           }
 
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR_IN_STRING_OID.get(
               lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1288,7 +1288,7 @@
     }
     else
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
                   lowerStr, String.valueOf(c), startPos);
       throw new DirectoryException(
@@ -1306,7 +1306,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1348,7 +1348,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1386,7 +1386,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1401,7 +1401,7 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DCR_ILLEGAL_CHAR.get(
                       valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1438,7 +1438,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1466,7 +1466,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DCR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/DITStructureRuleSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/DITStructureRuleSyntax.java
index a7db6c7..3bcbafa 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/DITStructureRuleSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/DITStructureRuleSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -48,7 +48,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -104,7 +104,7 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
           EMR_CASE_IGNORE_OID, SYNTAX_DIT_STRUCTURE_RULE_NAME);
       throw new InitializationException(message);
     }
@@ -113,7 +113,7 @@
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
           OMR_CASE_IGNORE_OID, SYNTAX_DIT_STRUCTURE_RULE_NAME);
       throw new InitializationException(message);
     }
@@ -122,7 +122,7 @@
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
           SMR_CASE_IGNORE_OID, SYNTAX_DIT_STRUCTURE_RULE_NAME);
       throw new InitializationException(message);
     }
@@ -205,7 +205,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We'll use the decodeDITStructureRule method to determine if the value is
     // acceptable.
@@ -275,7 +275,7 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      Message message = ERR_ATTR_SYNTAX_DSR_EMPTY_VALUE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_EMPTY_VALUE.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -286,7 +286,7 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      Message message = ERR_ATTR_SYNTAX_DSR_EXPECTED_OPEN_PARENTHESIS.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_EXPECTED_OPEN_PARENTHESIS.get(
           valueStr, (pos-1), String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -303,7 +303,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -315,7 +315,7 @@
     {
       if (! isDigit(c))
       {
-        Message message = ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID.get(
             valueStr, String.valueOf(c), (pos-1));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                      message);
@@ -327,7 +327,7 @@
     int ruleID;
     if (pos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -347,7 +347,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the rule ID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -381,7 +381,7 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          Message message = ERR_ATTR_SYNTAX_DSR_UNEXPECTED_CLOSE_PARENTHESIS.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_UNEXPECTED_CLOSE_PARENTHESIS.
               get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -439,7 +439,7 @@
         else
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR.get(
                       valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -470,7 +470,7 @@
         nameForm = schema.getNameForm(woidBuffer.toString());
         if ((nameForm == null) && (! allowUnknownElements))
         {
-          Message message = ERR_ATTR_SYNTAX_DSR_UNKNOWN_NAME_FORM.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_UNKNOWN_NAME_FORM.get(
               valueStr, woidBuffer.toString());
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -497,7 +497,7 @@
 
             if (pos >= length)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                            message);
@@ -509,7 +509,7 @@
             {
               if (! isDigit(c))
               {
-                Message message = ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID.
+                LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID.
                     get(valueStr, String.valueOf(c), (pos-1));
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -521,7 +521,7 @@
             int supRuleID;
             if (pos >= length)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                            message);
@@ -540,7 +540,7 @@
             {
               if (! allowUnknownElements)
               {
-                Message message = ERR_ATTR_SYNTAX_DSR_UNKNOWN_RULE_ID.get(
+                LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_UNKNOWN_RULE_ID.get(
                     valueStr, supRuleID);
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -560,7 +560,7 @@
 
             if (pos >= length)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                            message);
@@ -579,7 +579,7 @@
 
               if (pos >= length)
               {
-                Message message =
+                LocalizableMessage message =
                     ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
                 throw new DirectoryException(
                                ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -593,7 +593,7 @@
         {
           if (pos >= length)
           {
-            Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
+            LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message);
           }
@@ -604,7 +604,7 @@
           {
             if (! isDigit(c))
             {
-              Message message = ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_RULE_ID.get(
                   valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                            message);
@@ -616,7 +616,7 @@
           int supRuleID;
           if (pos >= length)
           {
-            Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+            LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message);
           }
@@ -633,7 +633,7 @@
           {
             if (! allowUnknownElements)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DSR_UNKNOWN_RULE_ID.get(valueStr, supRuleID);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                            message);
@@ -653,7 +653,7 @@
 
           if (pos >= length)
           {
-            Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
+            LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message);
           }
@@ -677,7 +677,7 @@
 
     if ((nameForm == null) && (! nameFormGiven))
     {
-      Message message = ERR_ATTR_SYNTAX_DSR_NO_NAME_FORM.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_NO_NAME_FORM.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -720,7 +720,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -778,7 +778,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -787,7 +787,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DSR_EXPECTED_QUOTE_AT_POS.get(
                   valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
@@ -815,7 +815,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -864,7 +864,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -873,7 +873,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DSR_EXPECTED_QUOTE_AT_POS.get(
                   valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
@@ -902,7 +902,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -944,7 +944,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -963,7 +963,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message = ERR_ATTR_SYNTAX_DSR_DOUBLE_PERIOD_IN_NUMERIC_OID.
+            LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_DOUBLE_PERIOD_IN_NUMERIC_OID.
                 get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message);
@@ -988,7 +988,7 @@
           }
 
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_NUMERIC_OID.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_NUMERIC_OID.get(
               lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1026,7 +1026,7 @@
           }
 
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_STRING_OID.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR_IN_STRING_OID.get(
               lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1035,7 +1035,7 @@
     }
     else
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR.get(
                   lowerStr, String.valueOf(c), startPos);
       throw new DirectoryException(
@@ -1053,7 +1053,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1095,7 +1095,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1133,7 +1133,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1148,7 +1148,7 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DSR_ILLEGAL_CHAR.get(
                       valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1185,7 +1185,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1213,7 +1213,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DSR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/DeliveryMethodSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/DeliveryMethodSyntax.java
index b62453d..9a34255 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/DeliveryMethodSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/DeliveryMethodSyntax.java
@@ -44,7 +44,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -277,7 +277,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     String stringValue = toLowerCase(value.toString());
     StringTokenizer tokenizer = new StringTokenizer(stringValue, " $");
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/DirectoryStringSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/DirectoryStringSyntax.java
index 9c32450..b1bc26a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/DirectoryStringSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/DirectoryStringSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -48,7 +48,7 @@
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -288,7 +288,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     if (allowZeroLengthValues || (value.length() > 0))
     {
@@ -326,7 +326,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       DirectoryStringAttributeSyntaxCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // The configuration will always be acceptable.
     return true;
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 c0c0b34..5378c06 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
@@ -36,7 +36,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -190,7 +190,7 @@
       if (DirectoryServer.getSyntaxEnforcementPolicy() ==
           AcceptRejectWarn.REJECT)
       {
-        Message message = ERR_ATTR_SYNTAX_DN_INVALID.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_INVALID.get(
             value.toString(), String.valueOf(e));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                      message);
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 6b336f6..57d4c2f 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
@@ -44,7 +44,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -237,7 +237,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Use the DN code to make this determination.
     try
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/EnhancedGuideSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/EnhancedGuideSyntax.java
index 04fe97f..dec2bd6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/EnhancedGuideSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/EnhancedGuideSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -221,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Get a lowercase string version of the provided value.
     String valueStr = toLowerCase(value.toString());
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/FaxNumberSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/FaxNumberSyntax.java
index 8600cf5..10ce15b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/FaxNumberSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/FaxNumberSyntax.java
@@ -43,7 +43,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -254,7 +254,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Get a lowercase string representation of the value and find its length.
     String valueString = toLowerCase(value.toString());
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/FaxSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/FaxSyntax.java
index 8e1ab4c..b0d6544 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/FaxSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/FaxSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -220,7 +220,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // All values will be acceptable for the fax syntax.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/GeneralizedTimeSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/GeneralizedTimeSyntax.java
index d4c6c93..6592ded 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/GeneralizedTimeSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/GeneralizedTimeSyntax.java
@@ -34,8 +34,8 @@
 import java.util.GregorianCalendar;
 import java.util.TimeZone;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.server.AttributeSyntaxCfg;
 import org.opends.server.api.ApproximateMatchingRule;
 import org.opends.server.api.AttributeSyntax;
@@ -253,7 +253,7 @@
    */
   @Override
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     try
     {
@@ -430,7 +430,7 @@
     int    length      = valueString.length();
     if (length < 11)
     {
-      Message message =
+      LocalizableMessage message =
           WARN_ATTR_SYNTAX_GENERALIZED_TIME_TOO_SHORT.get(valueString);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -484,7 +484,7 @@
           break;
 
         default:
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_YEAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_YEAR.get(
               valueString, String.valueOf(valueString.charAt(i)));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -539,7 +539,7 @@
             break;
 
           default:
-            Message message =
+            LocalizableMessage message =
                 WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString,
                                         valueString.substring(4, 6));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -563,7 +563,7 @@
             break;
 
           default:
-            Message message =
+            LocalizableMessage message =
                 WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString,
                                         valueString.substring(4, 6));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -571,7 +571,7 @@
         }
         break;
       default:
-        Message message =
+        LocalizableMessage message =
             WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString,
                                     valueString.substring(4, 6));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -629,7 +629,7 @@
             break;
 
           default:
-            Message message =
+            LocalizableMessage message =
                 WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString,
                                         valueString.substring(6, 8));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -682,7 +682,7 @@
             break;
 
           default:
-            Message message =
+            LocalizableMessage message =
                 WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString,
                                         valueString.substring(6, 8));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -735,7 +735,7 @@
             break;
 
           default:
-            Message message =
+            LocalizableMessage message =
                 WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString,
                                         valueString.substring(6, 8));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -756,7 +756,7 @@
             break;
 
           default:
-            Message message =
+            LocalizableMessage message =
                 WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString,
                                         valueString.substring(6, 8));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -765,7 +765,7 @@
         break;
 
       default:
-        Message message =
+        LocalizableMessage message =
             WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString,
                                     valueString.substring(6, 8));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -823,7 +823,7 @@
             break;
 
           default:
-            Message message =
+            LocalizableMessage message =
                 WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString,
                                         valueString.substring(8, 10));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -875,7 +875,7 @@
             break;
 
           default:
-            Message message =
+            LocalizableMessage message =
                 WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString,
                                         valueString.substring(8, 10));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -903,7 +903,7 @@
             break;
 
           default:
-            Message message =
+            LocalizableMessage message =
                 WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString,
                                         valueString.substring(8, 10));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -912,7 +912,7 @@
         break;
 
       default:
-        Message message =
+        LocalizableMessage message =
             WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString,
                                     valueString.substring(8, 10));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -937,7 +937,7 @@
         // be a digit between 0 and 9.
         if (length < 13)
         {
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
               valueString, String.valueOf(m1), 10);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -988,7 +988,7 @@
             break;
 
           default:
-            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE.
                 get(valueString,
                                         valueString.substring(10, 12));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1019,7 +1019,7 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
                 get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message, e);
@@ -1027,7 +1027,7 @@
         }
         else
         {
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
               valueString, String.valueOf(m1), 10);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1057,7 +1057,7 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
                 get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message, e);
@@ -1065,7 +1065,7 @@
         }
         else
         {
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
               valueString, String.valueOf(m1), 10);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1077,7 +1077,7 @@
                                       minute, second, 3600000);
 
       default:
-        Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
             valueString, String.valueOf(m1), 10);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                      message);
@@ -1101,7 +1101,7 @@
         // be a digit between 0 and 9.
         if (length < 15)
         {
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
               valueString, String.valueOf(s1), 12);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1152,7 +1152,7 @@
             break;
 
           default:
-            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE.
                 get(valueString,
                                         valueString.substring(12, 14));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1166,7 +1166,7 @@
         // a 0.
         if (length < 15)
         {
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
               valueString, String.valueOf(s1), 12);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1174,7 +1174,7 @@
 
         if (valueString.charAt(13) != '0')
         {
-          Message message =
+          LocalizableMessage message =
               WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SECOND.get(valueString,
                                       valueString.substring(12, 14));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1206,7 +1206,7 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
                 get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message, e);
@@ -1214,7 +1214,7 @@
         }
         else
         {
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
               valueString, String.valueOf(s1), 12);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1244,7 +1244,7 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
                 get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message, e);
@@ -1252,7 +1252,7 @@
         }
         else
         {
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
               valueString, String.valueOf(s1), 12);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1264,7 +1264,7 @@
                                       minute, second, 60000);
 
       default:
-        Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
             valueString, String.valueOf(s1), 12);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                      message);
@@ -1304,7 +1304,7 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
                 get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message, e);
@@ -1312,7 +1312,7 @@
         }
         else
         {
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
               valueString, String.valueOf(valueString.charAt(14)), 14);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1342,7 +1342,7 @@
 
             // This should only happen if the provided date wasn't legal
             // (e.g., September 31).
-            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.
                 get(valueString, String.valueOf(e));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message, e);
@@ -1350,14 +1350,14 @@
         }
         else
         {
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
               valueString, String.valueOf(valueString.charAt(14)), 14);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
         }
 
       default:
-        Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
             valueString, String.valueOf(valueString.charAt(14)), 14);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                      message);
@@ -1427,7 +1427,7 @@
           // This is only acceptable if we're at the end of the value.
           if (i != (value.length() - 1))
           {
-            Message message =
+            LocalizableMessage message =
                 WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_FRACTION_CHAR.
                   get(value, String.valueOf(c));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1443,7 +1443,7 @@
           break outerLoop;
 
         default:
-          Message message =
+          LocalizableMessage message =
               WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_FRACTION_CHAR.
                 get(value, String.valueOf(c));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1453,7 +1453,7 @@
 
     if (fractionBuffer.length() == 2)
     {
-      Message message =
+      LocalizableMessage message =
           WARN_ATTR_SYNTAX_GENERALIZED_TIME_EMPTY_FRACTION.get(value);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1461,7 +1461,7 @@
 
     if (timeZone == null)
     {
-      Message message =
+      LocalizableMessage message =
           WARN_ATTR_SYNTAX_GENERALIZED_TIME_NO_TIME_ZONE_INFO.get(value);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1488,7 +1488,7 @@
 
       // This should only happen if the provided date wasn't legal
       // (e.g., September 31).
-      Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME.get(
           value, String.valueOf(e));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                    message, e);
@@ -1516,7 +1516,7 @@
     String offSetStr = value.substring(startPos);
     if ((offSetStr.length() != 3) && (offSetStr.length() != 5))
     {
-      Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.get(
           value, offSetStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1532,7 +1532,7 @@
         break;
 
       default:
-        Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.get(
             value, offSetStr);
         throw new DirectoryException(
                 ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1561,7 +1561,7 @@
             break;
 
           default:
-            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
                 get(value, offSetStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message);
@@ -1579,7 +1579,7 @@
             break;
 
           default:
-            Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
+            LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
                 get(value, offSetStr);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message);
@@ -1587,7 +1587,7 @@
         break;
 
       default:
-        Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.get(
             value, offSetStr);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                      message);
@@ -1622,7 +1622,7 @@
               break;
 
             default:
-              Message message =
+              LocalizableMessage message =
                   WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
                     get(value, offSetStr);
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1631,7 +1631,7 @@
           break;
 
         default:
-          Message message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
+          LocalizableMessage message = WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET.
               get(value, offSetStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/GuideSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/GuideSyntax.java
index c9b699d..76534d7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/GuideSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/GuideSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -221,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Get a lowercase string version of the provided value.
     String valueStr = toLowerCase(value.toString());
@@ -273,7 +273,7 @@
    *          criteria, or <CODE>false</CODE> if not.
    */
   public static boolean criteriaIsValid(String criteria, String valueStr,
-                                        MessageBuilder invalidReason)
+                                        LocalizableMessageBuilder invalidReason)
   {
     // See if the criteria starts with a '!'.  If so, then just evaluate
     // everything after that as a criteria.
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/IA5StringSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/IA5StringSyntax.java
index 19f1841..6438751 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/IA5StringSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/IA5StringSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -42,7 +42,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -232,7 +232,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We will allow any value that does not contain any non-ASCII characters.
     // Empty values are acceptable as well.
@@ -243,7 +243,7 @@
       if ((b & 0x7F) != b)
       {
 
-        Message message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_IA5_ILLEGAL_CHARACTER.get(
                 value.toString(), String.valueOf(b));
         invalidReason.append(message);
         return false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/IntegerEqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/IntegerEqualityMatchingRule.java
index 40a2e9b..bd49652 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/IntegerEqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/IntegerEqualityMatchingRule.java
@@ -34,7 +34,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.ErrorLogger;
@@ -163,7 +163,7 @@
               }
               else
               {
-                Message message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
+                LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
                         value.toString());
 
                 switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -185,7 +185,7 @@
               // This is OK as long as the first character isn't a dash.
               if (buffer.charAt(0) == '-')
               {
-                Message message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
+                LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
                         value.toString());
 
                 switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -248,7 +248,7 @@
           }
           else
           {
-            Message message = WARN_ATTR_SYNTAX_INTEGER_MISPLACED_DASH.get(
+            LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_MISPLACED_DASH.get(
                     value.toString());
 
             switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -267,7 +267,7 @@
           }
           break;
         default:
-          Message message = WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER.get(
                   value.toString(),
                   ((char) value.byteAt(i)), i);
           switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -288,7 +288,7 @@
 
     if (buffer.length() == 0)
     {
-      Message message = WARN_ATTR_SYNTAX_INTEGER_EMPTY_VALUE.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_EMPTY_VALUE.get(
               value.toString());
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -314,7 +314,7 @@
     }
     else if ((buffer.length() == 1) && (buffer.charAt(0) == '-'))
     {
-      Message message = WARN_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE.get(
               value.toString());
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/IntegerFirstComponentEqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/IntegerFirstComponentEqualityMatchingRule.java
index 2690c39..72ef522 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/IntegerFirstComponentEqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/IntegerFirstComponentEqualityMatchingRule.java
@@ -36,7 +36,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.forgerock.opendj.ldap.ByteSequence;
@@ -284,7 +284,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_EMR_INTFIRSTCOMP_NO_INITIAL_PARENTHESIS.get(
+        LocalizableMessage message = ERR_EMR_INTFIRSTCOMP_NO_INITIAL_PARENTHESIS.get(
             String.valueOf(valueString));
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                      message, e);
@@ -299,7 +299,7 @@
 
     if (pos >= valueLength)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_EMR_INTFIRSTCOMP_NO_NONSPACE.get(String.valueOf(valueString));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                    message);
@@ -316,7 +316,7 @@
 
     if (pos >= valueLength)
     {
-      Message message = ERR_EMR_INTFIRSTCOMP_NO_SPACE_AFTER_INT.get(
+      LocalizableMessage message = ERR_EMR_INTFIRSTCOMP_NO_SPACE_AFTER_INT.get(
           String.valueOf(valueString));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                    message);
@@ -336,7 +336,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_EMR_INTFIRSTCOMP_FIRST_COMPONENT_NOT_INT.get(
+      LocalizableMessage message = ERR_EMR_INTFIRSTCOMP_FIRST_COMPONENT_NOT_INT.get(
           String.valueOf(valueString));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                    message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/IntegerOrderingMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/IntegerOrderingMatchingRule.java
index 1ec0718..75d0de5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/IntegerOrderingMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/IntegerOrderingMatchingRule.java
@@ -35,7 +35,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AbstractMatchingRule;
 import org.opends.server.api.OrderingMatchingRule;
 import org.opends.server.core.DirectoryServer;
@@ -176,7 +176,7 @@
               else
               {
 
-                Message message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
+                LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
                         value.toString());
 
                 switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -199,7 +199,7 @@
               if (buffer.charAt(0) == '-')
               {
 
-                Message message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
+                LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_INITIAL_ZERO.get(
                         value.toString());
 
                 switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -263,7 +263,7 @@
           }
           else
           {
-            Message message = WARN_ATTR_SYNTAX_INTEGER_MISPLACED_DASH.get(
+            LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_MISPLACED_DASH.get(
                     value.toString());
 
             switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -283,7 +283,7 @@
           }
           break;
         default:
-          Message message = WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_INVALID_CHARACTER.get(
                   value.toString(),
                   ((char) value.byteAt(i)), i);
           switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -305,7 +305,7 @@
 
     if (buffer.length() == 0)
     {
-      Message message = WARN_ATTR_SYNTAX_INTEGER_EMPTY_VALUE.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_EMPTY_VALUE.get(
               value.toString());
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -332,7 +332,7 @@
     }
     else if ((buffer.length() == 1) && (buffer.charAt(0) == '-'))
     {
-      Message message = WARN_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_INTEGER_DASH_NEEDS_VALUE.get(
               value.toString());
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/IntegerSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/IntegerSyntax.java
index 466f1b9..e99395f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/IntegerSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/IntegerSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -45,7 +45,7 @@
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -87,7 +87,7 @@
       }
       catch (NumberFormatException e)
       {
-        Message message =
+        LocalizableMessage message =
             WARN_ATTR_SYNTAX_ILLEGAL_INTEGER.get(nvalue.toString());
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
             message);
@@ -262,7 +262,7 @@
    */
   @Override
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     String valueString = value.toString();
     int    length      = valueString.length();
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/JPEGSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/JPEGSyntax.java
index e13da64..bac9a99 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/JPEGSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/JPEGSyntax.java
@@ -48,8 +48,8 @@
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -236,7 +236,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // anything is acceptable if we're not strict.
     if (!config.isStrictFormat())
@@ -278,7 +278,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       JPEGAttributeSyntaxCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // The configuration will always be acceptable.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java
index 911c7a8..8807ef8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/LDAPSyntaxDescriptionSyntax.java
@@ -44,12 +44,12 @@
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.api.SubstringMatchingRule;
 import org.opends.server.core.DirectoryServer;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ByteSequence;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.AbstractMatchingRule;
 import org.opends.server.api.OrderingMatchingRule;
 import org.opends.server.config.ConfigException;
@@ -285,7 +285,7 @@
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
 
-      Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_LDAPSYNTAX_EMPTY_VALUE.get();
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
               message);
     }
@@ -297,7 +297,7 @@
     if (c != '(')
     {
 
-      Message message =
+      LocalizableMessage message =
               ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_OPEN_PARENTHESIS.get(
                       valueStr, (pos-1), String.valueOf(c));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -315,7 +315,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(
               valueStr);
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
               message);
@@ -334,7 +334,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message =
+            LocalizableMessage message =
               ERR_ATTR_SYNTAX_LDAPSYNTAX_DOUBLE_PERIOD_IN_NUMERIC_OID.
                   get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -348,7 +348,7 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_NUMERIC_OID.
                 get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -377,7 +377,7 @@
         else
         {
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
                   ERR_ATTR_SYNTAX_LDAPSYNTAX_ILLEGAL_CHAR_IN_STRING_OID.
               get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -391,7 +391,7 @@
     String oid;
     if (pos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(
               valueStr);
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
               message);
@@ -412,7 +412,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(
               valueStr);
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
               message);
@@ -442,7 +442,7 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          Message message =
+          LocalizableMessage message =
             ERR_ATTR_SYNTAX_LDAPSYNTAX_UNEXPECTED_CLOSE_PARENTHESIS.
                 get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -464,7 +464,7 @@
         if (hasXSyntaxToken)
         {
           // We've already seen syntax extension. More than 1 is not allowed
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -476,7 +476,7 @@
         AttributeSyntax<?> subSyntax = schema.getSyntax(syntaxOID);
         if (subSyntax == null)
         {
-          Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_SYNTAX.get(
               String.valueOf(oid), syntaxOID);
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                        message);
@@ -489,7 +489,7 @@
         if (hasXSyntaxToken)
         {
           // We've already seen syntax extension. More than 1 is not allowed
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -500,7 +500,7 @@
         String regex = regexBuffer.toString().trim();
         if(regex.length() == 0)
         {
-          Message message = WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_NO_PATTERN.get(
                valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -513,7 +513,7 @@
         }
         catch(Exception e)
         {
-          Message message =
+          LocalizableMessage message =
               WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_PATTERN.get
                   (valueStr,regex);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -525,7 +525,7 @@
         if (hasXSyntaxToken)
         {
           // We've already seen syntax extension. More than 1 is not allowed
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_LDAPSYNTAX_TOO_MANY_EXTENSIONS.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -536,7 +536,7 @@
 
         if (values.isEmpty())
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_LDAPSYNTAX_ENUM_NO_VALUES.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -548,7 +548,7 @@
           ByteString entry = ByteString.valueOf(v);
           if (entries.contains(entry))
           {
-            Message message =
+            LocalizableMessage message =
                   WARN_ATTR_SYNTAX_LDAPSYNTAX_ENUM_DUPLICATE_VALUE.get(
                           valueStr, entry.toString(),pos);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -571,7 +571,7 @@
       else
       {
         // Unknown Token
-        Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_LDAPSYNTAX_UNKNOWN_EXT.get(
             valueStr, tokenName, pos);
         throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
               message);
@@ -607,7 +607,7 @@
    */
   @Override
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We'll use the decodeAttributeType method to determine if the value is
     // acceptable.
@@ -659,7 +659,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -718,7 +718,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -728,7 +728,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message = ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_LDAPSYNTAX_EXPECTED_QUOTE_AT_POS.get(
           valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -755,7 +755,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -797,7 +797,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -835,7 +835,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -850,7 +850,7 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_LDAPSYNTAX_EXTENSION_INVALID_CHARACTER.get(
                       valueStr, startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -887,7 +887,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -915,7 +915,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_LDAPSYNTAX_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1033,7 +1033,7 @@
      */
     @Override
     public boolean valueIsAcceptable(ByteSequence value,
-                                     MessageBuilder invalidReason)
+                                     LocalizableMessageBuilder invalidReason)
     {
       return  subSyntax.valueIsAcceptable(value, invalidReason);
     }
@@ -1202,13 +1202,13 @@
      */
     @Override
     public boolean valueIsAcceptable(ByteSequence value,
-                                     MessageBuilder invalidReason)
+                                     LocalizableMessageBuilder invalidReason)
     {
       String strValue = value.toString();
       boolean matches = pattern.matcher(strValue).matches();
       if(!matches)
       {
-        Message message = WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_VALUE.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_LDAPSYNTAX_REGEX_INVALID_VALUE.get(
                 strValue,pattern.pattern());
         invalidReason.append(message);
       }
@@ -1413,14 +1413,14 @@
      */
     @Override
     public boolean valueIsAcceptable(ByteSequence value,
-                                     MessageBuilder invalidReason)
+                                     LocalizableMessageBuilder invalidReason)
     {
       //The value is acceptable if it belongs to the set.
       boolean isAllowed = entries.contains(value);
 
       if(!isAllowed)
       {
-        Message message = WARN_ATTR_SYNTAX_LDAPSYNTAX_ENUM_INVALID_VALUE.get(
+        LocalizableMessage message = WARN_ATTR_SYNTAX_LDAPSYNTAX_ENUM_INVALID_VALUE.get(
                 value.toString(),oid);
         invalidReason.append(message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleSyntax.java
index 4e3913f..467e729 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -48,7 +48,7 @@
 import static org.opends.server.loggers.debug.DebugLogger.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -245,7 +245,7 @@
    */
   @Override
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Get string representations of the provided value using the provided form
     // and with all lowercase characters.
@@ -589,7 +589,7 @@
                                                     false);
         if (syntax == null)
         {
-          Message message = ERR_ATTR_SYNTAX_MR_UNKNOWN_SYNTAX.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_MR_UNKNOWN_SYNTAX.get(
               valueStr, oidBuffer.toString());
           logError(message);
 
@@ -670,7 +670,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -728,7 +728,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -737,7 +737,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_MR_EXPECTED_QUOTE_AT_POS.get(
                   valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
@@ -765,7 +765,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -814,7 +814,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -823,7 +823,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_MR_EXPECTED_QUOTE_AT_POS.get(
                   valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
@@ -852,7 +852,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -894,7 +894,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -914,7 +914,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID.
                   get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -940,7 +940,7 @@
           }
 
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
                   ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID.get(
                           lowerStr, String.valueOf(c), (startPos - 1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -978,7 +978,7 @@
           }
 
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
                   ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID.
                           get(lowerStr, String.valueOf(c), (startPos - 1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -988,7 +988,7 @@
     }
     else
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
                   lowerStr, String.valueOf(c), startPos);
       throw new DirectoryException(
@@ -1006,7 +1006,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1049,7 +1049,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1087,7 +1087,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1102,7 +1102,7 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_MR_ILLEGAL_CHAR.get(
                       valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1139,7 +1139,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1167,7 +1167,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_MR_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java
index b2714e5..d691302 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/MatchingRuleUseSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -49,7 +49,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -105,7 +105,7 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
           EMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_USE_NAME);
       throw new InitializationException(message);
     }
@@ -114,7 +114,7 @@
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
           OMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_USE_NAME);
       throw new InitializationException(message);
     }
@@ -123,7 +123,7 @@
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
           SMR_CASE_IGNORE_OID, SYNTAX_MATCHING_RULE_USE_NAME);
       throw new InitializationException(message);
     }
@@ -206,7 +206,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We'll use the decodeMatchingRuleUse method to determine if the value is
     // acceptable.
@@ -276,7 +276,7 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      Message message = ERR_ATTR_SYNTAX_MRUSE_EMPTY_VALUE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_EMPTY_VALUE.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -287,7 +287,7 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_EXPECTED_OPEN_PARENTHESIS.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_EXPECTED_OPEN_PARENTHESIS.get(
           valueStr, (pos-1), String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -304,7 +304,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -326,7 +326,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ATTR_SYNTAX_MRUSE_DOUBLE_PERIOD_IN_NUMERIC_OID.
                   get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -340,7 +340,7 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_NUMERIC_OID.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_NUMERIC_OID.
               get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -365,7 +365,7 @@
         else
         {
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_STRING_OID.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_STRING_OID.
               get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -379,7 +379,7 @@
     String oid;
     if (pos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -395,7 +395,7 @@
     {
       // This is bad because the matching rule use is associated with a matching
       // rule that we don't know anything about.
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_MRUSE_UNKNOWN_MATCHING_RULE.get(valueStr, oid);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -412,7 +412,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -443,7 +443,7 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          Message message = ERR_ATTR_SYNTAX_MRUSE_UNEXPECTED_CLOSE_PARENTHESIS.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_UNEXPECTED_CLOSE_PARENTHESIS.
               get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -501,7 +501,7 @@
         else
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR.get(
                       valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -551,7 +551,7 @@
               }
               else
               {
-                Message message = ERR_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR.get(
+                LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR.get(
                     oid, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                              message);
@@ -571,7 +571,7 @@
             }
             else if (c != '$')
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR.get(
                           valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -596,7 +596,7 @@
             }
             else
             {
-              Message message = ERR_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_UNKNOWN_ATTR.get(
                   oid, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                            message);
@@ -624,7 +624,7 @@
     // Make sure that the set of attributes was defined.
     if (attributes == null)
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_NO_ATTR.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_NO_ATTR.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -667,7 +667,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -725,7 +725,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -734,7 +734,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS.get(
           valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -761,7 +761,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -810,7 +810,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -819,7 +819,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_EXPECTED_QUOTE_AT_POS.get(
           valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -847,7 +847,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -889,7 +889,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -908,7 +908,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ATTR_SYNTAX_MRUSE_DOUBLE_PERIOD_IN_NUMERIC_OID.
                   get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -934,7 +934,7 @@
           }
 
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_NUMERIC_OID.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_NUMERIC_OID.
               get(lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -971,7 +971,7 @@
           }
 
           // This must have been an illegal character.
-          Message message = ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_STRING_OID.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR_IN_STRING_OID.
               get(lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -980,7 +980,7 @@
     }
     else
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR.get(
                   lowerStr, String.valueOf(c), startPos);
       throw new DirectoryException(
@@ -998,7 +998,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1040,7 +1040,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1078,7 +1078,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1093,7 +1093,7 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_MRUSE_ILLEGAL_CHAR.get(
                       valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1130,7 +1130,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1158,7 +1158,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_MRUSE_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
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 c2f6ed4..9f52726 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
@@ -46,7 +46,7 @@
 import org.opends.server.types.DebugLogLevel;
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -223,7 +223,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     String valueString = value.toString().trim();
     int    valueLength = valueString.length();
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/NameFormSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/NameFormSyntax.java
index 9228738..85b3152 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/NameFormSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/NameFormSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -48,7 +48,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -103,7 +103,7 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
           EMR_CASE_IGNORE_OID, SYNTAX_NAME_FORM_NAME);
       throw new InitializationException(message);
     }
@@ -112,7 +112,7 @@
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
           OMR_CASE_IGNORE_OID, SYNTAX_NAME_FORM_NAME);
       throw new InitializationException(message);
     }
@@ -121,7 +121,7 @@
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
           SMR_CASE_IGNORE_OID, SYNTAX_NAME_FORM_NAME);
       throw new InitializationException(message);
     }
@@ -204,7 +204,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We'll use the decodeNameForm method to determine if the value is
     // acceptable.
@@ -273,7 +273,7 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_EMPTY_VALUE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_EMPTY_VALUE.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -284,7 +284,7 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_OPEN_PARENTHESIS.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_OPEN_PARENTHESIS.get(
           valueStr, (pos-1), c);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -301,7 +301,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -323,7 +323,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ATTR_SYNTAX_NAME_FORM_DOUBLE_PERIOD_IN_NUMERIC_OID.
                   get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -337,7 +337,7 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_NUMERIC_OID.
                 get(valueStr, c, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -363,7 +363,7 @@
         else
         {
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_STRING_OID.
                 get(valueStr, c, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -378,7 +378,7 @@
     String oid;
     if (pos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -398,7 +398,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -434,7 +434,7 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_NAME_FORM_UNEXPECTED_CLOSE_PARENTHESIS.
                 get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -493,7 +493,7 @@
         else
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(valueStr, c, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -531,7 +531,7 @@
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_STRUCTURAL_CLASS.
                   get(String.valueOf(oid), String.valueOf(woidBuffer));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -543,7 +543,7 @@
         {
           // This is bad because the associated structural class type is not
           // structural.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_NAME_FORM_STRUCTURAL_CLASS_NOT_STRUCTURAL.
                 get(String.valueOf(oid), String.valueOf(woidBuffer),
                     structuralClass.getNameOrOID(),
@@ -580,7 +580,7 @@
               }
               else
               {
-                Message message =
+                LocalizableMessage message =
                     ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_REQUIRED_ATTR.
                       get(oid, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -601,7 +601,7 @@
             }
             else if (c != '$')
             {
-              Message message = ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(
                   valueStr, c, (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                            message);
@@ -625,7 +625,7 @@
             }
             else
             {
-              Message message = ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_REQUIRED_ATTR.
+              LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_REQUIRED_ATTR.
                   get(oid, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                            message);
@@ -665,7 +665,7 @@
               }
               else
               {
-                Message message =
+                LocalizableMessage message =
                     ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_OPTIONAL_ATTR.
                       get(oid, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -686,7 +686,7 @@
             }
             else if (c != '$')
             {
-              Message message = ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(
                   valueStr, c, (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                            message);
@@ -710,7 +710,7 @@
             }
             else
             {
-              Message message = ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_OPTIONAL_ATTR.
+              LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_UNKNOWN_OPTIONAL_ATTR.
                   get(oid, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                            message);
@@ -739,7 +739,7 @@
     // be valid.
     if (structuralClass == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_NAME_FORM_NO_STRUCTURAL_CLASS.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -782,7 +782,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -840,7 +840,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -849,7 +849,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS.get(
           valueStr, startPos, c);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -876,7 +876,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -925,7 +925,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -934,7 +934,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_EXPECTED_QUOTE_AT_POS.get(
           valueStr, startPos, c);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -962,7 +962,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1004,7 +1004,7 @@
 
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1023,7 +1023,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ATTR_SYNTAX_NAME_FORM_DOUBLE_PERIOD_IN_NUMERIC_OID.
                   get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1049,7 +1049,7 @@
           }
 
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_NUMERIC_OID.
                 get(lowerStr, c, (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1087,7 +1087,7 @@
           }
 
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR_IN_STRING_OID.
                 get(lowerStr, c, (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1097,7 +1097,7 @@
     }
     else
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(lowerStr, c, startPos);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1114,7 +1114,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -1156,7 +1156,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1194,7 +1194,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1209,7 +1209,7 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_NAME_FORM_ILLEGAL_CHAR.get(
                       valueStr, c, startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1246,7 +1246,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1274,7 +1274,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_NAME_FORM_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java
index f1a8d0f..10a2a50 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringEqualityMatchingRule.java
@@ -36,7 +36,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.ErrorLogger;
@@ -164,7 +164,7 @@
         else
         {
           // This is an illegal character.  Either log it or reject it.
-          Message message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
                   value.toString(), String.valueOf(c), pos);
 
           switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringOrderingMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringOrderingMatchingRule.java
index 870e860..3f52ff0 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringOrderingMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringOrderingMatchingRule.java
@@ -36,7 +36,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AbstractMatchingRule;
 import org.opends.server.api.OrderingMatchingRule;
 import org.opends.server.core.DirectoryServer;
@@ -176,7 +176,7 @@
         else
         {
           // This is an illegal character.  Either log it or reject it.
-          Message message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
                   value.toString(), String.valueOf(c), pos);
 
           switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringSubstringMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringSubstringMatchingRule.java
index 4e5c534..8024217 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringSubstringMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringSubstringMatchingRule.java
@@ -36,7 +36,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.SubstringMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.ErrorLogger;
@@ -163,7 +163,7 @@
         else
         {
           // This is an illegal character.  Either log it or reject it.
-          Message message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
+          LocalizableMessage message = WARN_ATTR_SYNTAX_NUMERIC_STRING_ILLEGAL_CHAR.get(
                   value.toString(), String.valueOf(c), pos);
 
           switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringSyntax.java
index c756145..62775bf 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/NumericStringSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -221,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     String valueString = value.toString();
     int    length      = valueString.length();
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/OIDSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/OIDSyntax.java
index 3c95f62..3100ff5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/OIDSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/OIDSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -210,7 +210,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     String lowerValue = toLowerCase(value.toString());
     return isValidSchemaElement(lowerValue, 0, lowerValue.length(),
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/ObjectClassSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/ObjectClassSyntax.java
index 84f424b..098744e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/ObjectClassSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/ObjectClassSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -50,7 +50,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -107,7 +107,7 @@
          DirectoryServer.getEqualityMatchingRule(EMR_CASE_IGNORE_OID);
     if (defaultEqualityMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_EQUALITY_MATCHING_RULE.get(
           EMR_CASE_IGNORE_OID, SYNTAX_OBJECTCLASS_NAME);
       throw new InitializationException(message);
     }
@@ -116,7 +116,7 @@
          DirectoryServer.getOrderingMatchingRule(OMR_CASE_IGNORE_OID);
     if (defaultOrderingMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_ORDERING_MATCHING_RULE.get(
           OMR_CASE_IGNORE_OID, SYNTAX_OBJECTCLASS_NAME);
       throw new InitializationException(message);
     }
@@ -125,7 +125,7 @@
          DirectoryServer.getSubstringMatchingRule(SMR_CASE_IGNORE_OID);
     if (defaultSubstringMatchingRule == null)
     {
-      Message message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UNKNOWN_SUBSTRING_MATCHING_RULE.get(
           SMR_CASE_IGNORE_OID, SYNTAX_OBJECTCLASS_NAME);
       throw new InitializationException(message);
     }
@@ -208,7 +208,7 @@
    * {@inheritDoc}
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We'll use the decodeObjectClass method to determine if the value is
     // acceptable.
@@ -277,7 +277,7 @@
     {
       // This means that the value was empty or contained only whitespace.  That
       // is illegal.
-      Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_EMPTY_VALUE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_OBJECTCLASS_EMPTY_VALUE.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -288,7 +288,7 @@
     char c = valueStr.charAt(pos++);
     if (c != '(')
     {
-      Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_OPEN_PARENTHESIS.
+      LocalizableMessage message = ERR_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_OPEN_PARENTHESIS.
           get(valueStr, (pos-1), String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -305,7 +305,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -328,7 +328,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID.
                   get(valueStr, (pos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -342,7 +342,7 @@
         else if (! isDigit(c))
         {
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID.
                 get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -368,7 +368,7 @@
         else
         {
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID.
                 get(valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -383,7 +383,7 @@
     String oid;
     if (pos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -404,7 +404,7 @@
     {
       // This means that the end of the value was reached before we could find
       // the OID.  Ths is illegal.
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -442,7 +442,7 @@
         // We must be at the end of the value.  If not, then that's a problem.
         if (pos < length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_OBJECTCLASS_UNEXPECTED_CLOSE_PARENTHESIS.
                 get(valueStr, (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -503,7 +503,7 @@
         else
         {
           // This is an illegal character.
-          Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
               valueStr, String.valueOf(c), (pos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -523,7 +523,7 @@
               //hyphen is allowed but not as the first byte.
                 if (index==0)
                 {
-                  Message msg = ERR_OC_SYNTAX_ATTR_ILLEGAL_INITIAL_DASH.
+                  LocalizableMessage msg = ERR_OC_SYNTAX_ATTR_ILLEGAL_INITIAL_DASH.
                         get(value.toString());
                   throw new DirectoryException(
                           ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -536,7 +536,7 @@
               // name exceptions option is enabled.
                 if (index==0)
                 {
-                  Message msg =
+                  LocalizableMessage msg =
                           ERR_OC_SYNTAX_ATTR_ILLEGAL_INITIAL_UNDERSCORE.
                         get(value.toString(),
                             ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
@@ -546,7 +546,7 @@
                 }
                 else if (!allowExceptions)
                 {
-                  Message msg = ERR_OC_SYNTAX_ATTR_ILLEGAL_UNDERSCORE_CHAR.
+                  LocalizableMessage msg = ERR_OC_SYNTAX_ATTR_ILLEGAL_UNDERSCORE_CHAR.
                         get(value.toString(),
                             ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
                   throw new DirectoryException(
@@ -560,7 +560,7 @@
               //can not be a digit.
                 if(index ==0 && isDigit(ch) && !allowExceptions)
                 {
-                  Message message = ERR_OC_SYNTAX_ATTR_ILLEGAL_INITIAL_DIGIT.
+                  LocalizableMessage message = ERR_OC_SYNTAX_ATTR_ILLEGAL_INITIAL_DIGIT.
                     get(value.toString(), ch,
                         ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
                   throw new DirectoryException(
@@ -570,7 +570,7 @@
                 else if(!((ch>='0' && ch<='9') || (ch>='A' && ch<='Z') ||
                         (ch>='a' && ch<='z')))
                 {
-                  Message msg = ERR_OC_SYNTAX_ATTR_ILLEGAL_CHAR.get(
+                  LocalizableMessage msg = ERR_OC_SYNTAX_ATTR_ILLEGAL_CHAR.get(
                             value.toString(), ch, index);
                   throw new DirectoryException(
                           ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -625,7 +625,7 @@
               {
                 // This is bad because we don't know what the superior oc
                 // is so we can't base this objectclass on it.
-                Message message =
+                LocalizableMessage message =
                     WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_SUPERIOR_CLASS.
                       get(String.valueOf(oid), String.valueOf(woidBuffer));
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -644,7 +644,7 @@
             }
             else if (c != '$')
             {
-              Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
                   valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                            message);
@@ -668,7 +668,7 @@
             {
               // This is bad because we don't know what the superior oc
               // is so we can't base this objectclass on it.
-              Message message =
+              LocalizableMessage message =
                   WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_SUPERIOR_CLASS.
                     get(String.valueOf(oid), String.valueOf(woidBuffer));
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -726,7 +726,7 @@
               {
                 // This isn't good because it means that the objectclass
                 // requires an attribute type that we don't know anything about.
-                Message message =
+                LocalizableMessage message =
                     WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_REQUIRED_ATTR.
                       get(oid, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -747,7 +747,7 @@
             }
             else if (c != '$')
             {
-              Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
                   valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                            message);
@@ -771,7 +771,7 @@
             {
               // This isn't good because it means that the objectclass requires
               // an attribute type that we don't know anything about.
-              Message message =
+              LocalizableMessage message =
                   WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_REQUIRED_ATTR.
                     get(oid, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -812,7 +812,7 @@
               {
                 // This isn't good because it means that the objectclass allows
                 // an attribute type that we don't know anything about.
-                Message message =
+                LocalizableMessage message =
                   WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_OPTIONAL_ATTR.
                       get(oid, woidBuffer.toString());
                 throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -833,7 +833,7 @@
             }
             else if (c != '$')
             {
-              Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+              LocalizableMessage message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
                   valueStr, String.valueOf(c), (pos-1));
               throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                            message);
@@ -857,7 +857,7 @@
             {
               // This isn't good because it means that the objectclass allows an
               // attribute type that we don't know anything about.
-              Message message =
+              LocalizableMessage message =
                 WARN_ATTR_SYNTAX_OBJECTCLASS_UNKNOWN_OPTIONAL_ATTR.
                     get(oid, woidBuffer.toString());
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -900,7 +900,7 @@
             // Abstract classes may only inherit from other abstract classes.
             if (superiorType != ObjectClassType.ABSTRACT)
             {
-              Message message =
+              LocalizableMessage message =
                 WARN_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE.
                   get(oid, objectClassType.toString(), superiorType.toString(),
                         superiorClass.getNameOrOID());
@@ -915,7 +915,7 @@
             if ((superiorType != ObjectClassType.ABSTRACT) &&
                 (superiorType != ObjectClassType.AUXILIARY))
             {
-              Message message =
+              LocalizableMessage message =
                 WARN_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE.
                   get(oid, objectClassType.toString(), superiorType.toString(),
                         superiorClass.getNameOrOID());
@@ -930,7 +930,7 @@
             if ((superiorType != ObjectClassType.ABSTRACT) &&
                 (superiorType != ObjectClassType.STRUCTURAL))
             {
-              Message message =
+              LocalizableMessage message =
                 WARN_ATTR_SYNTAX_OBJECTCLASS_INVALID_SUPERIOR_TYPE.
                   get(oid, objectClassType.toString(), superiorType.toString(),
                         superiorClass.getNameOrOID());
@@ -942,7 +942,7 @@
             // the superior chain.
             if (! superiorChainIncludesTop(superiorClass))
             {
-              Message message =
+              LocalizableMessage message =
                 WARN_ATTR_SYNTAX_OBJECTCLASS_STRUCTURAL_SUPERIOR_NOT_TOP.
                     get(oid);
               throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -992,7 +992,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1051,7 +1051,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1061,7 +1061,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message = WARN_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS.get(
           valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1088,7 +1088,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1138,7 +1138,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1148,7 +1148,7 @@
     // The next character must be a single quote.
     if (c != '\'')
     {
-      Message message = WARN_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_OBJECTCLASS_EXPECTED_QUOTE_AT_POS.get(
           valueStr, startPos, String.valueOf(c));
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1176,7 +1176,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1221,7 +1221,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1241,7 +1241,7 @@
         {
           if (lastWasPeriod)
           {
-            Message message =
+            LocalizableMessage message =
               ERR_ATTR_SYNTAX_OBJECTCLASS_DOUBLE_PERIOD_IN_NUMERIC_OID.
                   get(lowerStr, (startPos-1));
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1268,7 +1268,7 @@
           }
 
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
             ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_NUMERIC_OID.
                 get(lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1306,7 +1306,7 @@
           }
 
           // This must have been an illegal character.
-          Message message =
+          LocalizableMessage message =
             ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR_IN_STRING_OID.
                 get(lowerStr, String.valueOf(c), (startPos-1));
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -1316,7 +1316,7 @@
     }
     else
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
                   lowerStr, String.valueOf(c), startPos);
       throw new DirectoryException(
@@ -1334,7 +1334,7 @@
     // If we're at the end of the value, then that's illegal.
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(lowerStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1377,7 +1377,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -1412,7 +1412,7 @@
 
         if (startPos >= length)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1428,7 +1428,7 @@
         else if (c == '(')
         {
           // This is an illegal character.
-          Message message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_OBJECTCLASS_ILLEGAL_CHAR.get(
               valueStr, String.valueOf(c), startPos);
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
@@ -1462,7 +1462,7 @@
 
     if (startPos >= length)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_OBJECTCLASS_TRUNCATED_VALUE.get(valueStr);
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/ObjectIdentifierEqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/ObjectIdentifierEqualityMatchingRule.java
index f0f59e5..43b4d55 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/ObjectIdentifierEqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/ObjectIdentifierEqualityMatchingRule.java
@@ -35,8 +35,8 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.api.MatchingRule;
 import org.opends.server.core.DirectoryServer;
@@ -202,7 +202,7 @@
     switch (DirectoryServer.getSyntaxEnforcementPolicy())
     {
       case REJECT:
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         if (isValidSchemaElement(lowerValue, 0, lowerValue.length(),
                                 invalidReason))
         {
@@ -210,18 +210,18 @@
         }
         else
         {
-          Message message = ERR_ATTR_SYNTAX_OID_INVALID_VALUE.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_OID_INVALID_VALUE.get(
               lowerValue, invalidReason.toString());
           throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                        message);
         }
 
       case WARN:
-        invalidReason = new MessageBuilder();
+        invalidReason = new LocalizableMessageBuilder();
         if (! isValidSchemaElement(lowerValue, 0, lowerValue.length(),
                                    invalidReason))
         {
-          Message message = ERR_ATTR_SYNTAX_OID_INVALID_VALUE.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_OID_INVALID_VALUE.get(
               lowerValue, invalidReason.toString());
           ErrorLogger.logError(message);
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/OctetStringSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/OctetStringSyntax.java
index 976d77e..ed31616 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/OctetStringSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/OctetStringSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -220,7 +220,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // All values will be acceptable for the octet string syntax.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/OtherMailboxSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/OtherMailboxSyntax.java
index fdbff3c..6c409f2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/OtherMailboxSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/OtherMailboxSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -211,7 +211,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Check to see if the provided value was null.  If so, then that's not
     // acceptable.
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/PostalAddressSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/PostalAddressSyntax.java
index 85ed1aa..4f8f13f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/PostalAddressSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/PostalAddressSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -212,7 +212,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We'll allow any value.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/PresentationAddressSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/PresentationAddressSyntax.java
index c0372ab..a2c46e3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/PresentationAddressSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/PresentationAddressSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -230,7 +230,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We will accept any value for this syntax.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/PrintableStringSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/PrintableStringSyntax.java
index e2a5e05..133b528 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/PrintableStringSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/PrintableStringSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -232,7 +232,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Check to see if the provided value was null.  If so, then that's not
     // acceptable.
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/ProtocolInformationSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/ProtocolInformationSyntax.java
index 83a4d14..5c6d182 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/ProtocolInformationSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/ProtocolInformationSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -230,7 +230,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We will accept any value for this syntax.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/SubstringAssertionSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/SubstringAssertionSyntax.java
index 4a65e13..8e0e652 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/SubstringAssertionSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/SubstringAssertionSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -221,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Get the string representation of the value and check its length.  A
     // zero-length value is acceptable.  A one-length value is acceptable as
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 c16b9cd..ceb42ec 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
@@ -31,7 +31,7 @@
 import org.opends.server.loggers.debug.DebugTracer;
 import static org.opends.server.loggers.ErrorLogger.logError;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 import org.opends.server.admin.std.server.AttributeSyntaxCfg;
@@ -248,7 +248,7 @@
    *         use with this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason) {
+                                   LocalizableMessageBuilder invalidReason) {
 
     // Use the subtree specification code to make this determination.
     try {
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/SupportedAlgorithmSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/SupportedAlgorithmSyntax.java
index 8bca200..8dac2ba 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/SupportedAlgorithmSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/SupportedAlgorithmSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -221,7 +221,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // All values will be acceptable for the supported algorithm syntax.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/TelephoneNumberSubstringMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/TelephoneNumberSubstringMatchingRule.java
index b117f15..4201d4a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/TelephoneNumberSubstringMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/TelephoneNumberSubstringMatchingRule.java
@@ -33,7 +33,7 @@
 
 import java.util.Collection;
 import java.util.Collections;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.api.SubstringMatchingRule;
 import org.forgerock.opendj.ldap.ByteSequence;
@@ -188,7 +188,7 @@
     if (value.length() == 0)
     {
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
-          Message.EMPTY);
+          LocalizableMessage.EMPTY);
     }
     return value;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/TelephoneNumberSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/TelephoneNumberSyntax.java
index ae844a8..5677bda 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/TelephoneNumberSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/TelephoneNumberSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -49,7 +49,7 @@
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -252,7 +252,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // No matter what, the value can't be empty or null.
     String valueStr;
@@ -272,7 +272,7 @@
       // acceptable.
       if (valueStr.charAt(0) != '+')
       {
-        Message message = ERR_ATTR_SYNTAX_TELEPHONE_NO_PLUS.get(valueStr);
+        LocalizableMessage message = ERR_ATTR_SYNTAX_TELEPHONE_NO_PLUS.get(valueStr);
         invalidReason.append(message);
         return false;
       }
@@ -291,7 +291,7 @@
         }
         else if (! isSeparator(c))
         {
-          Message message = ERR_ATTR_SYNTAX_TELEPHONE_ILLEGAL_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_TELEPHONE_ILLEGAL_CHAR.get(
                   valueStr, String.valueOf(c), i);
           invalidReason.append(message);
           return false;
@@ -300,7 +300,7 @@
 
       if (! digitSeen)
       {
-        Message message = ERR_ATTR_SYNTAX_TELEPHONE_NO_DIGITS.get(valueStr);
+        LocalizableMessage message = ERR_ATTR_SYNTAX_TELEPHONE_NO_DIGITS.get(valueStr);
         invalidReason.append(message);
         return false;
       }
@@ -322,7 +322,7 @@
       }
 
       // If we made it here, then we didn't find any digits.
-      Message message = ERR_ATTR_SYNTAX_TELEPHONE_NO_DIGITS.get(valueStr);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_TELEPHONE_NO_DIGITS.get(valueStr);
       invalidReason.append(message);
       return false;
     }
@@ -358,7 +358,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
                       TelephoneNumberAttributeSyntaxCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     // The configuration will always be acceptable.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/TeletexTerminalIdentifierSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/TeletexTerminalIdentifierSyntax.java
index 7956c87..9e95363 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/TeletexTerminalIdentifierSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/TeletexTerminalIdentifierSyntax.java
@@ -43,7 +43,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -252,7 +252,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Get a lowercase string representation of the value and find its length.
     String valueString = value.toString();
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/TelexNumberSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/TelexNumberSyntax.java
index 455c4b4..88408d6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/TelexNumberSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/TelexNumberSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -220,7 +220,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Get a string representation of the value and find its length.
     String valueString = value.toString();
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/TimeBasedMatchingRuleFactory.java b/opendj3-server-dev/src/server/org/opends/server/schema/TimeBasedMatchingRuleFactory.java
index 6d18aa3..d33c578 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/TimeBasedMatchingRuleFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/TimeBasedMatchingRuleFactory.java
@@ -40,7 +40,7 @@
 import java.util.Map;
 import java.util.Set;
 import java.util.TimeZone;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.ExtensibleIndexer;
 import org.opends.server.api.IndexQueryFactory;
 import org.opends.server.api.MatchingRule;
@@ -331,7 +331,7 @@
         }
         else
         {
-          Message message = null;
+          LocalizableMessage message = null;
           if(containsTimeUnit)
           {
             //We already have time unit found by now.
@@ -849,7 +849,7 @@
         }
         else
         {
-          Message message = null;
+          LocalizableMessage message = null;
           switch(value.byteAt(index))
           {
             case 's':
@@ -963,7 +963,7 @@
       if(year < 0)
       {
         //A future date is allowed.
-        Message message =
+        LocalizableMessage message =
                 WARN_ATTR_INVALID_YEAR_ASSERTION_FORMAT.
                 get(value.toString(),year);
         logError(message);
@@ -1013,7 +1013,7 @@
           month = Calendar.DECEMBER;
           break;
         default:
-          Message message =
+          LocalizableMessage message =
                 WARN_ATTR_INVALID_MONTH_ASSERTION_FORMAT.
                 get(value.toString(),month);
           logError(message);
@@ -1047,7 +1047,7 @@
       }
       if(invalidDate)
       {
-        Message message =
+        LocalizableMessage message =
                 WARN_ATTR_INVALID_DATE_ASSERTION_FORMAT.
                 get(value.toString(),date);
         logError(message);
@@ -1057,7 +1057,7 @@
 
       if(!(hour >=-1 && hour <=23))
       {
-         Message message =
+         LocalizableMessage message =
                 WARN_ATTR_INVALID_HOUR_ASSERTION_FORMAT.
                 get(value.toString(),date);
         logError(message);
@@ -1067,7 +1067,7 @@
 
       if(!(minute >=-1 && minute <=59))
       {
-           Message message =
+           LocalizableMessage message =
                 WARN_ATTR_INVALID_MINUTE_ASSERTION_FORMAT.
                 get(value.toString(),date);
         logError(message);
@@ -1077,7 +1077,7 @@
 
       if(!(second >=-1 && second <=60)) //Consider leap seconds.
       {
-         Message message =
+         LocalizableMessage message =
                 WARN_ATTR_INVALID_SECOND_ASSERTION_FORMAT.
                 get(value.toString(),date);
         logError(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/UTCTimeSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/UTCTimeSyntax.java
index 0efa7c3..6da82dc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/UTCTimeSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/UTCTimeSyntax.java
@@ -33,8 +33,8 @@
 import java.util.Date;
 import java.util.TimeZone;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.server.AttributeSyntaxCfg;
 import org.opends.server.api.ApproximateMatchingRule;
 import org.opends.server.api.AttributeSyntax;
@@ -285,7 +285,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // Get the value as a string and verify that it is at least long enough for
     // "YYYYMMDDhhmmZ", which is the shortest allowed value.
@@ -293,7 +293,7 @@
     int    length      = valueString.length();
     if (length < 11)
     {
-      Message message = ERR_ATTR_SYNTAX_UTC_TIME_TOO_SHORT.get(valueString);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_TOO_SHORT.get(valueString);
       invalidReason.append(message);
       return false;
     }
@@ -318,7 +318,7 @@
           // These are all fine.
           break;
         default:
-          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_YEAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_YEAR.get(
                   valueString, String.valueOf(valueString.charAt(i)));
           invalidReason.append(message);
           return false;
@@ -348,7 +348,7 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH.get(
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH.get(
                     valueString, valueString.substring(2, 4));
             invalidReason.append(message);
             return false;
@@ -364,14 +364,14 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH.get(
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH.get(
                     valueString, valueString.substring(2, 4));
             invalidReason.append(message);
             return false;
         }
         break;
       default:
-        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MONTH.get(
                 valueString, valueString.substring(2, 4));
         invalidReason.append(message);
         return false;
@@ -403,7 +403,7 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(
                     valueString, valueString.substring(4, 6));
             invalidReason.append(message);
             return false;
@@ -428,7 +428,7 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(
                     valueString, valueString.substring(4, 6));
             invalidReason.append(message);
             return false;
@@ -443,14 +443,14 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(
                     valueString, valueString.substring(4, 6));
             invalidReason.append(message);
             return false;
         }
         break;
       default:
-        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(valueString,
+        LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_DAY.get(valueString,
                                     valueString.substring(4, 6));
         invalidReason.append(message);
         return false;
@@ -481,7 +481,7 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR.get(
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR.get(
                     valueString, valueString.substring(6, 8));
             invalidReason.append(message);
             return false;
@@ -498,14 +498,14 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR.get(
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR.get(
                     valueString, valueString.substring(6, 8));
             invalidReason.append(message);
             return false;
         }
         break;
       default:
-        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR.get(valueString,
+        LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_HOUR.get(valueString,
                                     valueString.substring(6, 8));
         invalidReason.append(message);
         return false;
@@ -527,7 +527,7 @@
         // be a digit between 0 and 9.
         if (length < 11)
         {
-          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
                   valueString, String.valueOf(m1), 8);
           invalidReason.append(message);
           return false;
@@ -548,7 +548,7 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MINUTE.get(
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_MINUTE.get(
                     valueString, valueString.substring(8, 10));
             invalidReason.append(message);
             return false;
@@ -557,7 +557,7 @@
         break;
 
       default:
-        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
                 valueString, String.valueOf(m1), 8);
         invalidReason.append(message);
         return false;
@@ -581,7 +581,7 @@
         // be a digit between 0 and 9.
         if (length < 13)
         {
-          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
                   valueString, String.valueOf(s1), 10);
           invalidReason.append(message);
           return false;
@@ -602,7 +602,7 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND.get(
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND.get(
                     valueString, valueString.substring(10, 12));
             invalidReason.append(message);
             return false;
@@ -615,7 +615,7 @@
         if (length < 13)
         {
 
-          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
                   valueString, String.valueOf(s1), 10);
           invalidReason.append(message);
           return false;
@@ -623,7 +623,7 @@
 
         if (valueString.charAt(11) != '0')
         {
-          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_SECOND.get(
                   valueString, valueString.substring(10, 12));
           invalidReason.append(message);
           return false;
@@ -638,7 +638,7 @@
         }
         else
         {
-          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
                   valueString, String.valueOf(s1), 10);
           invalidReason.append(message);
           return false;
@@ -654,14 +654,14 @@
         }
         else
         {
-          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
                   valueString, String.valueOf(s1), 10);
           invalidReason.append(message);
           return false;
         }
 
       default:
-        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
                 valueString, String.valueOf(s1), 10);
         invalidReason.append(message);
         return false;
@@ -680,7 +680,7 @@
         }
         else
         {
-          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
                   valueString, String.valueOf(valueString.charAt(12)), 12);
           invalidReason.append(message);
           return false;
@@ -696,14 +696,14 @@
         }
         else
         {
-          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
                   valueString, String.valueOf(valueString.charAt(12)), 12);
           invalidReason.append(message);
           return false;
         }
 
       default:
-        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_CHAR.get(
                 valueString, String.valueOf(valueString.charAt(12)), 12);
         invalidReason.append(message);
         return false;
@@ -728,12 +728,12 @@
    *          <CODE>false</CODE> if it is not.
    */
   private boolean hasValidOffset(String value, int startPos,
-                                 MessageBuilder invalidReason)
+                                 LocalizableMessageBuilder invalidReason)
   {
     int offsetLength = value.length() - startPos;
     if (offsetLength < 2)
     {
-      Message message = ERR_ATTR_SYNTAX_UTC_TIME_TOO_SHORT.get(value);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_TOO_SHORT.get(value);
       invalidReason.append(message);
       return false;
     }
@@ -758,7 +758,7 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
                                         value.substring(startPos,
                                                         startPos+offsetLength));
             invalidReason.append(message);
@@ -775,7 +775,7 @@
             // These are all fine.
             break;
           default:
-            Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
+            LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
                                         value.substring(startPos,
                                                         startPos+offsetLength));
             invalidReason.append(message);
@@ -783,7 +783,7 @@
         }
         break;
       default:
-        Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
+        LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
                                     value.substring(startPos,
                                                     startPos+offsetLength));
         invalidReason.append(message);
@@ -818,7 +818,7 @@
               // These are all fine.
               break;
             default:
-              Message message =
+              LocalizableMessage message =
                    ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(
                            value,value.substring(startPos,
                            startPos+offsetLength));
@@ -827,7 +827,7 @@
           }
           break;
         default:
-          Message message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
+          LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_INVALID_OFFSET.get(value,
                                       value.substring(startPos,
                                                       startPos+offsetLength));
           invalidReason.append(message);
@@ -917,7 +917,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_ATTR_SYNTAX_UTC_TIME_CANNOT_PARSE.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_UTC_TIME_CANNOT_PARSE.get(
           valueString, String.valueOf(e));
       throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                    message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/UUIDEqualityMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/UUIDEqualityMatchingRule.java
index 8eaf177..6e67ffe 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/UUIDEqualityMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/UUIDEqualityMatchingRule.java
@@ -35,7 +35,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.forgerock.opendj.ldap.ByteSequence;
@@ -146,7 +146,7 @@
   {
     if (value.length() != 36)
     {
-      Message message = WARN_ATTR_SYNTAX_UUID_INVALID_LENGTH.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_UUID_INVALID_LENGTH.get(
               value.toString(), value.length());
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
@@ -176,7 +176,7 @@
         case 23:
           if (c != '-')
           {
-            Message message = WARN_ATTR_SYNTAX_UUID_EXPECTED_DASH.get(
+            LocalizableMessage message = WARN_ATTR_SYNTAX_UUID_EXPECTED_DASH.get(
                     value.toString(), i, String.valueOf(c));
             switch (DirectoryServer.getSyntaxEnforcementPolicy())
             {
@@ -234,7 +234,7 @@
               builder.append('f');
               break;
             default:
-              Message message = WARN_ATTR_SYNTAX_UUID_EXPECTED_HEX.get(
+              LocalizableMessage message = WARN_ATTR_SYNTAX_UUID_EXPECTED_HEX.get(
                       value.toString(), i, String.valueOf(value.byteAt(i)));
               switch (DirectoryServer.getSyntaxEnforcementPolicy())
               {
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/UUIDOrderingMatchingRule.java b/opendj3-server-dev/src/server/org/opends/server/schema/UUIDOrderingMatchingRule.java
index 20cbb20..0b762c6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/UUIDOrderingMatchingRule.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/UUIDOrderingMatchingRule.java
@@ -34,7 +34,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AbstractMatchingRule;
 import org.opends.server.api.OrderingMatchingRule;
 import org.opends.server.core.DirectoryServer;
@@ -159,7 +159,7 @@
   {
     if (value.length() != 36)
     {
-      Message message = WARN_ATTR_SYNTAX_UUID_INVALID_LENGTH.get(
+      LocalizableMessage message = WARN_ATTR_SYNTAX_UUID_INVALID_LENGTH.get(
               value.toString(), value.length());
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
       {
@@ -189,7 +189,7 @@
         case 23:
           if (c != '-')
           {
-            Message message = WARN_ATTR_SYNTAX_UUID_EXPECTED_DASH.get(
+            LocalizableMessage message = WARN_ATTR_SYNTAX_UUID_EXPECTED_DASH.get(
                     value.toString(), i, String.valueOf(c));
             switch (DirectoryServer.getSyntaxEnforcementPolicy())
             {
@@ -246,7 +246,7 @@
               builder.append('f');
               break;
             default:
-              Message message = WARN_ATTR_SYNTAX_UUID_EXPECTED_HEX.get(
+              LocalizableMessage message = WARN_ATTR_SYNTAX_UUID_EXPECTED_HEX.get(
                       value.toString(), i, String.valueOf(c));
               switch (DirectoryServer.getSyntaxEnforcementPolicy())
               {
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/UUIDSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/UUIDSyntax.java
index 7f92e36..24145fd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/UUIDSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/UUIDSyntax.java
@@ -41,7 +41,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 
 
@@ -209,7 +209,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We will only accept values that look like valid UUIDs.  This means that
     // all values must be in the form HHHHHHHH-HHHH-HHHH-HHHH-HHHHHHHHHHHH,
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 ef95f32..8694ac5 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
@@ -36,7 +36,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.ErrorLogger;
@@ -194,7 +194,7 @@
       // We couldn't normalize the DN for some reason.  If we're supposed to use
       // strict syntax enforcement, then throw an exception.  Otherwise, log a
       // message and just try our best.
-      Message message = ERR_ATTR_SYNTAX_NAMEANDUID_INVALID_DN.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_NAMEANDUID_INVALID_DN.get(
               valueString, getExceptionMessage(e));
 
       switch (DirectoryServer.getSyntaxEnforcementPolicy())
@@ -235,7 +235,7 @@
         {
           // There was an invalid binary digit.  We'll either throw an exception
           // or log a message and continue, based on the server's configuration.
-          Message message = ERR_ATTR_SYNTAX_NAMEANDUID_ILLEGAL_BINARY_DIGIT.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_NAMEANDUID_ILLEGAL_BINARY_DIGIT.get(
                   valueString, String.valueOf(c), i);
 
           switch (DirectoryServer.getSyntaxEnforcementPolicy())
diff --git a/opendj3-server-dev/src/server/org/opends/server/schema/UserPasswordSyntax.java b/opendj3-server-dev/src/server/org/opends/server/schema/UserPasswordSyntax.java
index 66e2686..24fd01d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/schema/UserPasswordSyntax.java
+++ b/opendj3-server-dev/src/server/org/opends/server/schema/UserPasswordSyntax.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.schema;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -43,7 +43,7 @@
 import org.forgerock.opendj.ldap.ByteSequence;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.SchemaMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.schema.SchemaConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
@@ -211,7 +211,7 @@
    *          this syntax, or <CODE>false</CODE> if not.
    */
   public boolean valueIsAcceptable(ByteSequence value,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // We have to accept any value here because in many cases the value will not
     // have been encoded by the time this method is called.
@@ -238,7 +238,7 @@
     // Make sure that there actually is a value to decode.
     if ((userPasswordValue == null) || (userPasswordValue.length() == 0))
     {
-      Message message = ERR_ATTR_SYNTAX_USERPW_NO_VALUE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_USERPW_NO_VALUE.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -247,7 +247,7 @@
     // The first character of an encoded value must be an opening curly brace.
     if (userPasswordValue.charAt(0) != '{')
     {
-      Message message = ERR_ATTR_SYNTAX_USERPW_NO_OPENING_BRACE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_USERPW_NO_OPENING_BRACE.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -257,7 +257,7 @@
     int closePos = userPasswordValue.indexOf('}');
     if (closePos < 0)
     {
-      Message message = ERR_ATTR_SYNTAX_USERPW_NO_CLOSING_BRACE.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_USERPW_NO_CLOSING_BRACE.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
@@ -269,7 +269,7 @@
 
     if (schemeName.length() == 0)
     {
-      Message message = ERR_ATTR_SYNTAX_USERPW_NO_SCHEME.get();
+      LocalizableMessage message = ERR_ATTR_SYNTAX_USERPW_NO_SCHEME.get();
       throw new DirectoryException(
               ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/AddSchemaFileTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/AddSchemaFileTask.java
index 52c1cb1..54cbf00 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/AddSchemaFileTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/AddSchemaFileTask.java
@@ -32,7 +32,7 @@
 import java.util.TreeSet;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.SynchronizationProviderCfg;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.SynchronizationProvider;
@@ -68,7 +68,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return INFO_TASK_ADD_SCHEMA_FILE_NAME.get();
   }
 
@@ -87,7 +87,7 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.UPDATE_SCHEMA, operation))
       {
-        Message message = ERR_TASK_ADDSCHEMAFILE_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_TASK_ADDSCHEMAFILE_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                      message);
       }
@@ -101,7 +101,7 @@
     List<Attribute> attrList = taskEntry.getAttribute(attrType);
     if ((attrList == null) || attrList.isEmpty())
     {
-      Message message = ERR_TASK_ADDSCHEMAFILE_NO_FILENAME.get(
+      LocalizableMessage message = ERR_TASK_ADDSCHEMAFILE_NO_FILENAME.get(
           ATTR_TASK_ADDSCHEMAFILE_FILENAME,
           String.valueOf(taskEntry.getName()));
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
@@ -125,7 +125,7 @@
           File schemaFile = new File(schemaInstanceDirectory, filename);
           if (! schemaFile.exists())
           {
-            Message message = ERR_TASK_ADDSCHEMAFILE_NO_SUCH_FILE.get(
+            LocalizableMessage message = ERR_TASK_ADDSCHEMAFILE_NO_SUCH_FILE.get(
                 filename, schemaInstanceDirectory);
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                          message);
@@ -138,7 +138,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_CHECKING_FOR_FILE.get(
+          LocalizableMessage message = ERR_TASK_ADDSCHEMAFILE_ERROR_CHECKING_FOR_FILE.get(
               filename, schemaInstanceDirectory,
               getExceptionMessage(e));
           throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -167,7 +167,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ce);
         }
 
-        Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.get(
+        LocalizableMessage message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.get(
             String.valueOf(schemaFile), ce.getMessage());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, ce);
@@ -179,7 +179,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, ie);
         }
 
-        Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.get(
+        LocalizableMessage message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.get(
             String.valueOf(schemaFile), ie.getMessage());
         throw new DirectoryException(DirectoryServer.getServerErrorResultCode(),
                                      message, ie);
@@ -201,7 +201,7 @@
     final Lock schemaLock = LockManager.lockWrite(schemaDN);
     if (schemaLock == null)
     {
-      Message message = ERR_TASK_ADDSCHEMAFILE_CANNOT_LOCK_SCHEMA.get(
+      LocalizableMessage message = ERR_TASK_ADDSCHEMAFILE_CANNOT_LOCK_SCHEMA.get(
           String.valueOf(schemaDN));
       logError(message);
       return TaskState.STOPPED_BY_ERROR;
@@ -253,7 +253,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, ce);
           }
 
-          Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.
+          LocalizableMessage message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.
               get(String.valueOf(schemaFile), ce.getMessage());
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -265,7 +265,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, ie);
           }
 
-          Message message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.
+          LocalizableMessage message = ERR_TASK_ADDSCHEMAFILE_ERROR_LOADING_SCHEMA_FILE.
               get(String.valueOf(schemaFile), ie.getMessage());
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -288,7 +288,7 @@
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
 
-            Message message =
+            LocalizableMessage message =
                 ERR_TASK_ADDSCHEMAFILE_CANNOT_NOTIFY_SYNC_PROVIDER.
                   get(provider.getClass().getName(), getExceptionMessage(e));
             logError(message);
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 15f3417..7015dd8 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.TaskMessages;
 
 import static org.opends.server.config.ConfigConstants.*;
@@ -77,8 +77,8 @@
   /**
    * Stores mapping between configuration attribute name and its label.
    */
-  static private Map<String,Message> argDisplayMap =
-          new HashMap<String,Message>();
+  static private Map<String,LocalizableMessage> argDisplayMap =
+          new HashMap<String,LocalizableMessage>();
   static {
     argDisplayMap.put(
             ATTR_TASK_BACKUP_ALL,
@@ -148,7 +148,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return INFO_TASK_BACKUP_NAME.get();
   }
 
@@ -156,7 +156,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getAttributeDisplayName(String attrName) {
+  public LocalizableMessage getAttributeDisplayName(String attrName) {
     return argDisplayMap.get(attrName);
   }
 
@@ -173,7 +173,7 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.BACKEND_BACKUP, operation))
       {
-        Message message = ERR_TASK_BACKUP_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_TASK_BACKUP_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                      message);
       }
@@ -271,7 +271,7 @@
     {
       if (!backendIDList.isEmpty())
       {
-        Message message = ERR_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID.get(
+        LocalizableMessage message = ERR_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID.get(
             ATTR_TASK_BACKUP_ALL, ATTR_TASK_BACKUP_BACKEND_ID);
         logError(message);
         return false;
@@ -279,7 +279,7 @@
     }
     else if (backendIDList.isEmpty())
     {
-      Message message = ERR_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID.get(
+      LocalizableMessage message = ERR_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID.get(
           ATTR_TASK_BACKUP_ALL, ATTR_TASK_BACKUP_BACKEND_ID);
       logError(message);
       return false;
@@ -307,7 +307,7 @@
     {
       if (! incremental)
       {
-        Message message = ERR_BACKUPDB_INCREMENTAL_BASE_REQUIRES_INCREMENTAL.
+        LocalizableMessage message = ERR_BACKUPDB_INCREMENTAL_BASE_REQUIRES_INCREMENTAL.
             get(ATTR_TASK_BACKUP_INCREMENTAL_BASE_ID,
                 ATTR_TASK_BACKUP_INCREMENTAL);
         logError(message);
@@ -320,7 +320,7 @@
     // was given.
     if (signHash && (! hash))
     {
-      Message message = ERR_BACKUPDB_SIGN_REQUIRES_HASH.get(
+      LocalizableMessage message = ERR_BACKUPDB_SIGN_REQUIRES_HASH.get(
           ATTR_TASK_BACKUP_SIGN_HASH, ATTR_TASK_BACKUP_HASH);
       logError(message);
       return false;
@@ -336,7 +336,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR.get(
+        LocalizableMessage message = ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR.get(
                 backupDirectory.getPath(), getExceptionMessage(e));
         System.err.println(message);
         return false;
@@ -368,12 +368,12 @@
         Backend b = DirectoryServer.getBackend(id);
         if (b == null || configEntries.get(id) == null)
         {
-          Message message = ERR_BACKUPDB_NO_BACKENDS_FOR_ID.get(id);
+          LocalizableMessage message = ERR_BACKUPDB_NO_BACKENDS_FOR_ID.get(id);
           logError(message);
         }
         else if (! b.supportsBackup())
         {
-          Message message =
+          LocalizableMessage message =
               WARN_BACKUPDB_BACKUP_NOT_SUPPORTED.get(b.getBackendID());
           logError(message);
         }
@@ -394,7 +394,7 @@
     // If there are no backends to archive, then print an error and exit.
     if (backendsToArchive.isEmpty())
     {
-      Message message = WARN_BACKUPDB_NO_BACKENDS_TO_ARCHIVE.get();
+      LocalizableMessage message = WARN_BACKUPDB_NO_BACKENDS_TO_ARCHIVE.get();
       logError(message);
       return false;
     }
@@ -435,7 +435,7 @@
           // backend
           if (! backupDir.getConfigEntryDN().equals(cfg.dn()))
           {
-            Message message = ERR_BACKUPDB_CANNOT_BACKUP_IN_DIRECTORY.get(
+            LocalizableMessage message = ERR_BACKUPDB_CANNOT_BACKUP_IN_DIRECTORY.get(
                 b.getBackendID(),backupLocation.getPath(),
                 backupDir.getConfigEntryDN().rdn().
                 getAttributeValue(0).toString());
@@ -445,14 +445,14 @@
         }
         catch (ConfigException ce)
         {
-          Message message = ERR_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR.get(
+          LocalizableMessage message = ERR_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR.get(
               descriptorPath, ce.getMessage());
           logError(message);
           return false;
         }
         catch (Exception e)
         {
-          Message message = ERR_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR.get(
+          LocalizableMessage message = ERR_BACKUPDB_CANNOT_PARSE_BACKUP_DESCRIPTOR.get(
               descriptorPath, getExceptionMessage(e));
           logError(message);
           return false;
@@ -471,7 +471,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR.get(
+        LocalizableMessage message = ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR.get(
             backupLocation.getPath(), getExceptionMessage(e));
         logError(message);
         return false;
@@ -502,7 +502,7 @@
     catch (DirectoryException de)
     {
       DirectoryServer.notifyBackupEnded(b, backupConfig, false);
-      Message message = ERR_BACKUPDB_ERROR_DURING_BACKUP.get(
+      LocalizableMessage message = ERR_BACKUPDB_ERROR_DURING_BACKUP.get(
           b.getBackendID(), de.getMessageObject());
       logError(message);
       return false;
@@ -510,7 +510,7 @@
     catch (Exception e)
     {
       DirectoryServer.notifyBackupEnded(b, backupConfig, false);
-      Message message = ERR_BACKUPDB_ERROR_DURING_BACKUP.get(
+      LocalizableMessage message = ERR_BACKUPDB_ERROR_DURING_BACKUP.get(
           b.getBackendID(), getExceptionMessage(e));
       logError(message);
       return false;
@@ -532,7 +532,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        Message message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
             b.getBackendID(), String.valueOf(failureReason));
         logError(message);
         return false;
@@ -540,7 +540,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
           b.getBackendID(), getExceptionMessage(e));
       logError(message);
       return false;
@@ -562,7 +562,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        Message message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
             b.getBackendID(), String.valueOf(failureReason));
         logError(message);
         return false;
@@ -570,7 +570,7 @@
     }
     catch (Exception e)
     {
-      Message message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
+      LocalizableMessage message = WARN_BACKUPDB_CANNOT_UNLOCK_BACKEND.get(
           b.getBackendID(), getExceptionMessage(e));
       logError(message);
       return false;
@@ -584,7 +584,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void interruptTask(TaskState interruptState, Message interruptReason)
+  public void interruptTask(TaskState interruptState, LocalizableMessage interruptReason)
   {
     if (TaskState.STOPPED_BY_ADMINISTRATOR.equals(interruptState) &&
             backupConfig != null)
@@ -650,7 +650,7 @@
 
       try
       {
-        Message message = NOTE_BACKUPDB_STARTING_BACKUP.get(b.getBackendID());
+        LocalizableMessage message = NOTE_BACKUPDB_STARTING_BACKUP.get(b.getBackendID());
         logError(message);
 
 
@@ -691,19 +691,19 @@
     // completed at least for one of the backends.
     if (errorsEncountered)
     {
-      Message message = NOTE_BACKUPDB_COMPLETED_WITH_ERRORS.get();
+      LocalizableMessage message = NOTE_BACKUPDB_COMPLETED_WITH_ERRORS.get();
       logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
     else if (isCancelled())
     {
-      Message message = NOTE_BACKUPDB_CANCELLED.get();
+      LocalizableMessage message = NOTE_BACKUPDB_CANCELLED.get();
       logError(message);
       return getTaskInterruptState();
     }
     else
     {
-      Message message = NOTE_BACKUPDB_COMPLETED_SUCCESSFULLY.get();
+      LocalizableMessage message = NOTE_BACKUPDB_COMPLETED_SUCCESSFULLY.get();
       logError(message);
       return TaskState.COMPLETED_SUCCESSFULLY;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/DisconnectClientTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/DisconnectClientTask.java
index 03baf4f..7e8e4ff 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/DisconnectClientTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/DisconnectClientTask.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -65,13 +66,13 @@
   private long connectionID;
 
   // The disconnect message to send to the client.
-  private Message disconnectMessage;
+  private LocalizableMessage disconnectMessage;
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return INFO_TASK_DISCONNECT_CLIENT_NAME.get();
   }
 
@@ -90,7 +91,7 @@
       ClientConnection conn = operation.getClientConnection();
       if (! conn.hasPrivilege(Privilege.DISCONNECT_CLIENT, operation))
       {
-        Message message = ERR_TASK_DISCONNECT_NO_PRIVILEGE.get();
+        LocalizableMessage message = ERR_TASK_DISCONNECT_NO_PRIVILEGE.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                      message);
       }
@@ -117,7 +118,7 @@
           }
           catch (Exception e)
           {
-            Message message =
+            LocalizableMessage message =
                ERR_TASK_DISCONNECT_INVALID_CONN_ID.get(v.getValue().toString());
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message, e);
@@ -128,7 +129,7 @@
 
     if (connectionID < 0)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_TASK_DISCONNECT_NO_CONN_ID.get(ATTR_TASK_DISCONNECT_CONN_ID);
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                    message);
@@ -160,7 +161,7 @@
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_TASK_DISCONNECT_INVALID_NOTIFY_CLIENT.get(stringValue);
             throw new DirectoryException(ResultCode.INVALID_ATTRIBUTE_SYNTAX,
                                          message);
@@ -182,7 +183,7 @@
       {
         for (AttributeValue v : a)
         {
-          disconnectMessage = Message.raw(v.getValue().toString());
+          disconnectMessage = LocalizableMessage.raw(v.getValue().toString());
           break disconnectMessageLoop;
         }
       }
@@ -216,7 +217,7 @@
     // terminate it.
     if (clientConnection == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_TASK_DISCONNECT_NO_SUCH_CONNECTION.get(
                   String.valueOf(connectionID));
       logError(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/EnterLockdownModeTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/EnterLockdownModeTask.java
index 8d068ac..1e3052c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/EnterLockdownModeTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/EnterLockdownModeTask.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -50,7 +50,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return INFO_TASK_ENTER_LOCKDOWN_MODE_NAME.get();
   }
 
@@ -70,7 +70,7 @@
       if ((authzDN == null) || (! operation.getClientConnection().hasPrivilege(
           Privilege.SERVER_LOCKDOWN, operation)))
       {
-        Message message = ERR_TASK_ENTERLOCKDOWN_NOT_ROOT.get();
+        LocalizableMessage message = ERR_TASK_ENTERLOCKDOWN_NOT_ROOT.get();
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
@@ -78,7 +78,7 @@
            operation.getClientConnection().getRemoteAddress();
       if ((clientAddress != null) && (! clientAddress.isLoopbackAddress()))
       {
-        Message message = ERR_TASK_ENTERLOCKDOWN_NOT_LOOPBACK.get();
+        LocalizableMessage message = ERR_TASK_ENTERLOCKDOWN_NOT_LOOPBACK.get();
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
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 78e407f..32c0a9e 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.TaskMessages;
 
 import static org.opends.server.core.DirectoryServer.getAttributeType;
@@ -68,8 +68,8 @@
   /**
    * Stores mapping between configuration attribute name and its label.
    */
-  static private Map<String,Message> argDisplayMap =
-          new HashMap<String,Message>();
+  static private Map<String,LocalizableMessage> argDisplayMap =
+          new HashMap<String,LocalizableMessage>();
   static {
     argDisplayMap.put(
             ATTR_TASK_EXPORT_LDIF_FILE,
@@ -144,14 +144,14 @@
   /**
    * {@inheritDoc}
    */
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return INFO_TASK_EXPORT_NAME.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  public Message getAttributeDisplayName(String name) {
+  public LocalizableMessage getAttributeDisplayName(String name) {
     return argDisplayMap.get(name);
   }
 
@@ -168,7 +168,7 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.LDIF_EXPORT, operation))
       {
-        Message message = ERR_TASK_LDIFEXPORT_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_TASK_LDIFEXPORT_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                      message);
       }
@@ -286,7 +286,7 @@
   /**
    * {@inheritDoc}
    */
-  public void interruptTask(TaskState interruptState, Message interruptReason)
+  public void interruptTask(TaskState interruptState, LocalizableMessage interruptReason)
   {
     if (TaskState.STOPPED_BY_ADMINISTRATOR.equals(interruptState) &&
             exportConfig != null)
@@ -372,14 +372,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
               filterString, de.getMessageObject());
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
               filterString, getExceptionMessage(e));
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -403,14 +403,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
               filterString, de.getMessageObject());
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
               filterString, getExceptionMessage(e));
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -426,13 +426,13 @@
 
     if (backend == null)
     {
-      Message message = ERR_LDIFEXPORT_NO_BACKENDS_FOR_ID.get(backendID);
+      LocalizableMessage message = ERR_LDIFEXPORT_NO_BACKENDS_FOR_ID.get(backendID);
       logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
     else if (! backend.supportsLDIFExport())
     {
-      Message message = ERR_LDIFEXPORT_CANNOT_EXPORT_BACKEND.get(backendID);
+      LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_EXPORT_BACKEND.get(backendID);
       logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
@@ -455,14 +455,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
               s, de.getMessageObject());
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
               s, getExceptionMessage(e));
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -489,14 +489,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
               s, de.getMessageObject());
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
               s, getExceptionMessage(e));
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -505,7 +505,7 @@
         if (! Backend.handlesEntry(includeBranch, defaultIncludeBranches,
                                    excludeBranches))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_LDIFEXPORT_INVALID_INCLUDE_BASE.get(s, backendID);
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -563,7 +563,7 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
               backend.getBackendID(), String.valueOf(failureReason));
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -571,7 +571,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), getExceptionMessage(e));
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -592,7 +592,7 @@
         catch (DirectoryException de)
         {
           DirectoryServer.notifyExportEnded(backend, exportConfig, false);
-          Message message =
+          LocalizableMessage message =
               ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(de.getMessageObject());
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -600,7 +600,7 @@
         catch (Exception e)
         {
           DirectoryServer.notifyExportEnded(backend, exportConfig, false);
-          Message message =
+          LocalizableMessage message =
               ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(getExceptionMessage(e));
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -615,7 +615,7 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.releaseLock(lockFile, failureReason))
           {
-            Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+            LocalizableMessage message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
                 backend.getBackendID(), String.valueOf(failureReason));
             logError(message);
             return TaskState.COMPLETED_WITH_ERRORS;
@@ -623,7 +623,7 @@
         }
         catch (Exception e)
         {
-          Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+          LocalizableMessage message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
               backend.getBackendID(), getExceptionMessage(e));
           logError(message);
           return TaskState.COMPLETED_WITH_ERRORS;
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 efcb0b4..225bced 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tasks;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.TaskMessages;
 
 import static org.opends.messages.TaskMessages.*;
@@ -81,8 +81,8 @@
   /**
    * Stores mapping between configuration attribute name and its label.
    */
-  static private Map<String,Message> argDisplayMap =
-          new HashMap<String,Message>();
+  static private Map<String,LocalizableMessage> argDisplayMap =
+          new HashMap<String,LocalizableMessage>();
 
   static {
     argDisplayMap.put(
@@ -191,7 +191,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return INFO_TASK_IMPORT_NAME.get();
   }
 
@@ -199,7 +199,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getAttributeDisplayName(String name) {
+  public LocalizableMessage getAttributeDisplayName(String name) {
     return argDisplayMap.get(name);
   }
 
@@ -216,7 +216,7 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.LDIF_IMPORT, operation))
       {
-        Message message = ERR_TASK_LDIFIMPORT_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_TASK_LDIFIMPORT_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                      message);
       }
@@ -396,7 +396,7 @@
     // "backendID" argument was provided.
     if(includeBranchStrings.isEmpty() && backendID == null)
     {
-      Message message = ERR_LDIFIMPORT_MISSING_BACKEND_ARGUMENT.get(
+      LocalizableMessage message = ERR_LDIFIMPORT_MISSING_BACKEND_ARGUMENT.get(
           typeIncludeBranch.getNameOrOID(), typeBackendID.getNameOrOID());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
     }
@@ -417,13 +417,13 @@
       }
       catch (DirectoryException de)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
             s, de.getMessageObject());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
             s, getExceptionMessage(e));
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -442,13 +442,13 @@
       }
       catch (DirectoryException de)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
             s, de.getMessageObject());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
             s, getExceptionMessage(e));
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -467,7 +467,7 @@
       }
       catch (DirectoryException de)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
             filterString, de.getMessageObject());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -481,7 +481,7 @@
       }
       catch (DirectoryException de)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
             filterString, de.getMessageObject());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -492,12 +492,12 @@
       backend = DirectoryServer.getBackend(backendID);
       if (backend == null)
       {
-        Message message = ERR_LDIFIMPORT_NO_BACKENDS_FOR_ID.get();
+        LocalizableMessage message = ERR_LDIFIMPORT_NO_BACKENDS_FOR_ID.get();
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       else if (! backend.supportsLDIFImport())
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_IMPORT.get(backendID);
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_IMPORT.get(backendID);
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
       // Make sure that if the "backendID" argument was provided, no include
@@ -513,7 +513,7 @@
           builder.append(dn.toNormalizedString());
           builder.append(" ");
         }
-        Message message = ERR_LDIFIMPORT_MISSING_CLEAR_BACKEND.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_MISSING_CLEAR_BACKEND.get(
             builder.toString(), typeClearBackend.getNameOrOID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -533,7 +533,7 @@
           else if(backend != locatedBackend)
           {
             // The include branches span across multiple backends.
-            Message message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
+            LocalizableMessage message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
                 includeBranch.toNormalizedString(), backend.getBackendID());
             throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                                          message);
@@ -542,7 +542,7 @@
         else
         {
           // The include branch is not associated with any backend.
-          Message message =
+          LocalizableMessage message =
               ERR_NO_BACKENDS_FOR_BASE.get(includeBranch
                   .toNormalizedString());
           throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
@@ -563,7 +563,7 @@
       if (! Backend.handlesEntry(includeBranch, defaultIncludeBranches,
                                  excludeBranches))
       {
-        Message message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
             includeBranch.toNormalizedString(), backend.getBackendID());
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
@@ -575,7 +575,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void interruptTask(TaskState interruptState, Message interruptReason)
+  public void interruptTask(TaskState interruptState, LocalizableMessage interruptReason)
   {
     if (TaskState.STOPPED_BY_ADMINISTRATOR.equals(interruptState) &&
             importConfig != null)
@@ -644,7 +644,7 @@
       }
       catch (DirectoryException de)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
             filterString, de.getMessageObject());
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -661,7 +661,7 @@
       }
       catch (DirectoryException de)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
             filterString, de.getMessageObject());
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -686,14 +686,14 @@
       }
       catch (DirectoryException de)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
             s, de.getMessageObject());
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
             s, getExceptionMessage(e));
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -711,13 +711,13 @@
 
       if (backend == null)
       {
-        Message message = ERR_LDIFIMPORT_NO_BACKENDS_FOR_ID.get();
+        LocalizableMessage message = ERR_LDIFIMPORT_NO_BACKENDS_FOR_ID.get();
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
       else if (! backend.supportsLDIFImport())
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_IMPORT.get(backendID);
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_IMPORT.get(backendID);
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
@@ -735,7 +735,7 @@
           builder.append(" / ");
           builder.append(backend.getBaseDNs()[i].toNormalizedString());
         }
-        Message message = ERR_LDIFIMPORT_MISSING_CLEAR_BACKEND.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_MISSING_CLEAR_BACKEND.get(
             builder.toString(), ATTR_IMPORT_CLEAR_BACKEND);
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -756,7 +756,7 @@
           else if(backend != locatedBackend)
           {
             // The include branches span across multiple backends.
-            Message message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
+            LocalizableMessage message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
                 includeBranch.toNormalizedString(), backend.getBackendID());
             logError(message);
             return TaskState.STOPPED_BY_ERROR;
@@ -806,14 +806,14 @@
       }
       catch (DirectoryException de)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
             s, de.getMessageObject());
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
             s, getExceptionMessage(e));
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -837,7 +837,7 @@
         if (! Backend.handlesEntry(includeBranch, defaultIncludeBranches,
                                    excludeBranches))
         {
-          Message message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
               includeBranch.toNormalizedString(), backend.getBackendID());
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -862,14 +862,14 @@
                             PATH_MAKELDIF_RESOURCE_DIR;
       TemplateFile tf = new TemplateFile(resourcePath, random);
 
-      ArrayList<Message> warnings = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> warnings = new ArrayList<LocalizableMessage>();
       try
       {
         tf.parse(templateFile, warnings);
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_TEMPLATE_FILE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_PARSE_TEMPLATE_FILE.get(
             templateFile, e.getMessage());
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -923,7 +923,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE.get(
             rejectFile, getExceptionMessage(e));
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -947,7 +947,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE.get(
             skipFile, getExceptionMessage(e));
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -990,7 +990,7 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
               backend.getBackendID(), String.valueOf(failureReason));
           logError(message);
           return TaskState.STOPPED_BY_ERROR;
@@ -1003,7 +1003,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), getExceptionMessage(e));
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -1023,7 +1023,7 @@
         }
 
         DirectoryServer.notifyImportEnded(backend, importConfig, false);
-        Message message = null;
+        LocalizableMessage message = null;
         if (de.getResultCode() == ResultCode.CONSTRAINT_VIOLATION)
         {
           message =
@@ -1046,7 +1046,7 @@
         }
 
         DirectoryServer.notifyImportEnded(backend, importConfig, false);
-        Message message =
+        LocalizableMessage message =
             ERR_LDIFIMPORT_ERROR_DURING_IMPORT.get(getExceptionMessage(e));
         logError(message);
         return TaskState.STOPPED_BY_ERROR;
@@ -1060,7 +1060,7 @@
           StringBuilder failureReason = new StringBuilder();
           if (! LockFileManager.releaseLock(lockFile, failureReason))
           {
-            Message message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
+            LocalizableMessage message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
                 backend.getBackendID(), String.valueOf(failureReason));
             logError(message);
             return TaskState.COMPLETED_WITH_ERRORS;
@@ -1073,7 +1073,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
+          LocalizableMessage message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
               backend.getBackendID(), getExceptionMessage(e));
           logError(message);
           return TaskState.COMPLETED_WITH_ERRORS;
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 b6b7d8d..59c1352 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
@@ -28,8 +28,8 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.messages.TaskMessages;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
@@ -63,7 +63,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return TaskMessages.INFO_TASK_INITIALIZE_TARGET_NAME.get();
   }
 
@@ -97,7 +97,7 @@
     }
     catch(DirectoryException e)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(TaskMessages.ERR_TASK_INITIALIZE_INVALID_DN.get());
       mb.append(" ");
       mb.append(stackTraceToSingleLineString(e));
@@ -133,7 +133,7 @@
       }
 
       // This log will go to the task log message
-      Message message = ERR_TASK_EXECUTE_FAILED.get(
+      LocalizableMessage message = ERR_TASK_EXECUTE_FAILED.get(
           String.valueOf(getTaskEntryDN()), stackTraceToSingleLineString(e));
       logError(message);
 
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 5ef1a48..c456b4e 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
@@ -32,8 +32,8 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.messages.TaskMessages;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
@@ -70,13 +70,13 @@
    */
   private long left = 0;
 
-  private Message taskCompletionError = null;
+  private LocalizableMessage taskCompletionError = null;
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return TaskMessages.INFO_TASK_INITIALIZE_NAME.get();
   }
 
@@ -113,7 +113,7 @@
     }
     catch(DirectoryException e)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(TaskMessages.ERR_TASK_INITIALIZE_INVALID_DN.get());
       mb.append(e.getMessage());
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java
index 59ca19f..980b3be 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/LeaveLockdownModeTask.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -50,7 +50,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return INFO_TASK_LEAVE_LOCKDOWN_MODE_NAME.get();
   }
 
@@ -70,7 +70,7 @@
       if ((authzDN == null) || (! operation.getClientConnection().hasPrivilege(
           Privilege.SERVER_LOCKDOWN, operation)))
       {
-        Message message = ERR_TASK_LEAVELOCKDOWN_NOT_ROOT.get();
+        LocalizableMessage message = ERR_TASK_LEAVELOCKDOWN_NOT_ROOT.get();
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
 
@@ -78,7 +78,7 @@
            operation.getClientConnection().getRemoteAddress();
       if ((clientAddress != null) && (! clientAddress.isLoopbackAddress()))
       {
-        Message message = ERR_TASK_LEAVELOCKDOWN_NOT_LOOPBACK.get();
+        LocalizableMessage message = ERR_TASK_LEAVELOCKDOWN_NOT_LOOPBACK.get();
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, message);
       }
     }
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 313aecb..c8e081b 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
@@ -28,7 +28,9 @@
 
 import java.util.List;
 
-import org.opends.messages.*;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
+import org.opends.messages.TaskMessages;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -85,7 +87,7 @@
   {
     if (debugEnabled())
     {
-      System.out.println(Message.raw(Category.SYNC, Severity.NOTICE, s));
+      System.out.println(LocalizableMessage.raw(s));
       TRACER.debugInfo(s);
     }
   }
@@ -94,7 +96,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return TaskMessages.INFO_TASK_PURGE_CONFLICTS_HIST_NAME.get();
   }
 
@@ -127,7 +129,7 @@
     }
     catch(DirectoryException e)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(TaskMessages.ERR_TASK_INITIALIZE_INVALID_DN.get());
       mb.append(e.getMessage());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
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 0892012..2ec8222 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
@@ -26,7 +26,7 @@
  */
 package org.opends.server.tasks;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.TaskMessages;
 
 import org.opends.server.backends.task.Task;
@@ -81,7 +81,7 @@
   /**
    * {@inheritDoc}
    */
-  public Message getDisplayName()
+  public LocalizableMessage getDisplayName()
   {
     return TaskMessages.INFO_TASK_REBUILD_NAME.get();
   }
@@ -101,7 +101,7 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (!clientConnection.hasPrivilege(Privilege.LDIF_IMPORT, operation))
       {
-        Message message = ERR_TASK_INDEXREBUILD_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_TASK_INDEXREBUILD_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
             message);
       }
@@ -133,7 +133,7 @@
     {
       if (indexes.size() != 1)
       {
-        Message msg = ERR_TASK_INDEXREBUILD_ALL_ERROR.get();
+        LocalizableMessage msg = ERR_TASK_INDEXREBUILD_ALL_ERROR.get();
         throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM, msg);
       }
       indexes.clear();
@@ -178,7 +178,7 @@
     }
     catch (DirectoryException de)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CANNOT_DECODE_BASE_DN.get(baseDN, de.getMessageObject());
       logError(message);
       return TaskState.STOPPED_BY_ERROR;
@@ -206,14 +206,14 @@
 
     if (backend == null)
     {
-      Message message = ERR_NO_BACKENDS_FOR_BASE.get(baseDN);
+      LocalizableMessage message = ERR_NO_BACKENDS_FOR_BASE.get(baseDN);
       logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
 
     if (!(backend instanceof BackendImpl))
     {
-      Message message = ERR_REBUILDINDEX_WRONG_BACKEND_TYPE.get();
+      LocalizableMessage message = ERR_REBUILDINDEX_WRONG_BACKEND_TYPE.get();
       logError(message);
       return TaskState.STOPPED_BY_ERROR;
     }
@@ -246,7 +246,7 @@
       {
         if (!LockFileManager.acquireExclusiveLock(lockFile, failureReason))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(backend
                   .getBackendID(), String.valueOf(failureReason));
           logError(message);
@@ -255,7 +255,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(backend
                 .getBackendID(), getExceptionMessage(e));
         logError(message);
@@ -269,7 +269,7 @@
       {
         if (!LockFileManager.acquireSharedLock(lockFile, failureReason))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND.get(backend
                   .getBackendID(), String.valueOf(failureReason));
           logError(message);
@@ -278,7 +278,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_REBUILDINDEX_CANNOT_SHARED_LOCK_BACKEND.get(backend
                 .getBackendID(), getExceptionMessage(e));
         logError(message);
@@ -298,7 +298,7 @@
     {
       // This exception catches all 'index not found'
       // The backend needs to be re-enabled at the end of the process.
-      Message message =
+      LocalizableMessage message =
           ERR_REBUILDINDEX_ERROR_DURING_REBUILD.get(e.getMessage());
       if (debugEnabled())
       {
@@ -315,7 +315,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_REBUILDINDEX_ERROR_DURING_REBUILD.get(e.getMessage());
       logError(message);
       returnCode = TaskState.STOPPED_BY_ERROR;
@@ -329,7 +329,7 @@
         failureReason = new StringBuilder();
         if (!LockFileManager.releaseLock(lockFile, failureReason))
         {
-          Message message =
+          LocalizableMessage message =
               WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(backend
                   .getBackendID(), String.valueOf(failureReason));
           logError(message);
@@ -338,7 +338,7 @@
       }
       catch (Throwable t)
       {
-        Message message =
+        LocalizableMessage message =
             WARN_REBUILDINDEX_CANNOT_UNLOCK_BACKEND.get(backend.getBackendID(),
                 getExceptionMessage(t));
         logError(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/RestartTaskThread.java b/opendj3-server-dev/src/server/org/opends/server/tasks/RestartTaskThread.java
index 80f4e24..8123abd 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/RestartTaskThread.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/RestartTaskThread.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -60,7 +61,7 @@
 
 
   // The shutdown message that will be used.
-  private Message shutdownMessage;
+  private LocalizableMessage shutdownMessage;
 
 
 
@@ -70,7 +71,7 @@
    *
    * @param  shutdownMessage  The shutdown message that will be used.
    */
-  public RestartTaskThread(Message shutdownMessage)
+  public RestartTaskThread(LocalizableMessage shutdownMessage)
   {
     super("Restart Task Thread");
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/RestoreTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/RestoreTask.java
index d310612..93634e2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/RestoreTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/RestoreTask.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.TaskMessages;
 
 import static org.opends.server.core.DirectoryServer.getAttributeType;
@@ -78,8 +79,8 @@
   /**
    * Stores mapping between configuration attribute name and its label.
    */
-  static private Map<String,Message> argDisplayMap =
-          new HashMap<String,Message>();
+  static private Map<String,LocalizableMessage> argDisplayMap =
+          new HashMap<String,LocalizableMessage>();
   static {
     argDisplayMap.put(
             ATTR_BACKUP_DIRECTORY_PATH,
@@ -105,14 +106,14 @@
   /**
    * {@inheritDoc}
    */
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return INFO_TASK_RESTORE_NAME.get();
   }
 
   /**
    * {@inheritDoc}
    */
-  public Message getAttributeDisplayName(String name) {
+  public LocalizableMessage getAttributeDisplayName(String name) {
     return argDisplayMap.get(name);
   }
 
@@ -129,7 +130,7 @@
       ClientConnection clientConnection = operation.getClientConnection();
       if (! clientConnection.hasPrivilege(Privilege.BACKEND_RESTORE, operation))
       {
-        Message message = ERR_TASK_RESTORE_INSUFFICIENT_PRIVILEGES.get();
+        LocalizableMessage message = ERR_TASK_RESTORE_INSUFFICIENT_PRIVILEGES.get();
         throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                      message);
       }
@@ -179,7 +180,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        Message message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
         return false;
@@ -187,7 +188,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       logError(message);
       return false;
@@ -208,7 +209,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        Message message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
         return false;
@@ -216,7 +217,7 @@
     }
     catch (Exception e)
     {
-      Message message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
+      LocalizableMessage message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       logError(message);
       return false;
@@ -228,7 +229,7 @@
   /**
    * {@inheritDoc}
    */
-  public void interruptTask(TaskState interruptState, Message interruptReason)
+  public void interruptTask(TaskState interruptState, LocalizableMessage interruptReason)
   {
     if (TaskState.STOPPED_BY_ADMINISTRATOR.equals(interruptState) &&
             restoreConfig != null)
@@ -263,7 +264,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY.get(
+      LocalizableMessage message = ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY.get(
           String.valueOf(backupDirectory), getExceptionMessage(e));
       logError(message);
       return TaskState.STOPPED_BY_ERROR;
@@ -277,7 +278,7 @@
       BackupInfo backupInfo = backupDir.getBackupInfo(backupID);
       if (backupInfo == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_RESTOREDB_INVALID_BACKUP_ID.get(
                     backupID, String.valueOf(backupDirectory));
         logError(message);
@@ -289,7 +290,7 @@
       BackupInfo latestBackup = backupDir.getLatestBackup();
       if (latestBackup == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_RESTOREDB_NO_BACKUPS_IN_DIRECTORY.get(
                     String.valueOf(backupDirectory));
         logError(message);
@@ -316,7 +317,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = ERR_RESTOREDB_NO_BACKENDS_FOR_DN.get(
+      LocalizableMessage message = ERR_RESTOREDB_NO_BACKENDS_FOR_DN.get(
           String.valueOf(backupDirectory), configEntryDN.toString());
       logError(message);
       return TaskState.STOPPED_BY_ERROR;
@@ -330,7 +331,7 @@
 
     if (! backend.supportsRestore())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_RESTOREDB_CANNOT_RESTORE.get(backend.getBackendID());
       logError(message);
       return TaskState.STOPPED_BY_ERROR;
@@ -381,7 +382,7 @@
           catch (DirectoryException de)
           {
             DirectoryServer.notifyRestoreEnded(backend, restoreConfig, false);
-            Message message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
+            LocalizableMessage message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
                 backupID, backupDir.getPath(), de.getMessageObject());
             logError(message);
             errorsEncountered = true;
@@ -389,7 +390,7 @@
           catch (Exception e)
           {
             DirectoryServer.notifyRestoreEnded(backend, restoreConfig, false);
-            Message message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
+            LocalizableMessage message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
                 backupID, backupDir.getPath(), getExceptionMessage(e));
             logError(message);
             errorsEncountered = true;
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 995b642..ba66778 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
@@ -32,8 +32,8 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.messages.TaskMessages;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
@@ -61,7 +61,7 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return TaskMessages.INFO_TASK_SET_GENERATION_ID_NAME.get();
   }
 
@@ -91,7 +91,7 @@
       }
       catch(Exception e)
       {
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         mb.append(TaskMessages.ERR_TASK_INITIALIZE_INVALID_GENERATION_ID.get());
         mb.append(e.getMessage());
         throw new DirectoryException(ResultCode.CLIENT_SIDE_PARAM_ERROR,
@@ -113,7 +113,7 @@
     }
     catch(DirectoryException e)
     {
-      MessageBuilder mb = new MessageBuilder();
+      LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
       mb.append(TaskMessages.ERR_TASK_INITIALIZE_INVALID_DN.get());
       mb.append(e.getMessage());
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/ShutdownTask.java b/opendj3-server-dev/src/server/org/opends/server/tasks/ShutdownTask.java
index cb85ba9..3d3288a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/ShutdownTask.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/ShutdownTask.java
@@ -34,7 +34,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
@@ -64,13 +64,13 @@
   private boolean restart;
 
   // The shutdown message that will be used.
-  private Message shutdownMessage;
+  private LocalizableMessage shutdownMessage;
 
 
   /**
    * {@inheritDoc}
    */
-  public Message getDisplayName() {
+  public LocalizableMessage getDisplayName() {
     return INFO_TASK_SHUTDOWN_NAME.get();
   }
 
@@ -140,7 +140,7 @@
         if (! clientConnection.hasPrivilege(Privilege.SERVER_RESTART,
                                             operation))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_TASK_SHUTDOWN_INSUFFICIENT_RESTART_PRIVILEGES.get();
           throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                        message);
@@ -151,7 +151,7 @@
         if (! clientConnection.hasPrivilege(Privilege.SERVER_SHUTDOWN,
                                             operation))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_TASK_SHUTDOWN_INSUFFICIENT_SHUTDOWN_PRIVILEGES.get();
           throw new DirectoryException(ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
                                        message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tasks/ShutdownTaskThread.java b/opendj3-server-dev/src/server/org/opends/server/tasks/ShutdownTaskThread.java
index abffc90..52b42db 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tasks/ShutdownTaskThread.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tasks/ShutdownTaskThread.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -51,7 +52,7 @@
 
 
   // The shutdown message that will be used.
-  private Message shutdownMessage;
+  private LocalizableMessage shutdownMessage;
 
 
 
@@ -61,7 +62,7 @@
    *
    * @param  shutdownMessage  The shutdown message that will be used.
    */
-  public ShutdownTaskThread(Message shutdownMessage)
+  public ShutdownTaskThread(LocalizableMessage shutdownMessage)
   {
     super("Shutdown Task Thread");
 
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 0c00547..828f9ca 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
@@ -41,7 +41,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.TaskMessages;
 import org.opends.server.admin.server.ServerManagementContext;
 import org.opends.server.admin.std.server.BackendCfg;
@@ -95,14 +95,14 @@
     }
     catch (ConfigException ce)
     {
-      Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+      LocalizableMessage message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
           String.valueOf(configEntry.getDN()), ce.getMessage());
       logError(message);
       return null;
     }
     catch (Exception e)
     {
-      Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+      LocalizableMessage message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
           String.valueOf(configEntry.getDN()), getExceptionMessage(e));
       logError(message);
       return null;
@@ -128,14 +128,14 @@
     }
     catch (DirectoryException de)
     {
-      Message message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
+      LocalizableMessage message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
           DN_BACKEND_BASE, de.getMessageObject());
       logError(message);
       return configEntries;
     }
     catch (Exception e)
     {
-      Message message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
+      LocalizableMessage message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
           DN_BACKEND_BASE, getExceptionMessage(e));
       logError(message);
       return configEntries;
@@ -148,14 +148,14 @@
     }
     catch (ConfigException ce)
     {
-      Message message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
+      LocalizableMessage message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
           DN_BACKEND_BASE, ce.getMessage());
       logError(message);
       return configEntries;
     }
     catch (Exception e)
     {
-      Message message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
+      LocalizableMessage message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
           DN_BACKEND_BASE, getExceptionMessage(e));
       logError(message);
       return configEntries;
@@ -190,14 +190,14 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+        LocalizableMessage message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
             String.valueOf(configEntry.getDN()), ce.getMessage());
         logError(message);
         continue;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+        LocalizableMessage message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
             String.valueOf(configEntry.getDN()), getExceptionMessage(e));
         logError(message);
         continue;
@@ -274,7 +274,7 @@
     ResultCode resultCode = internalModify.getResultCode();
     if (resultCode != ResultCode.SUCCESS)
     {
-      Message message =
+      LocalizableMessage message =
           TaskMessages.ERR_TASK_CANNOT_ENABLE_BACKEND.get(backendDNString);
       throw new DirectoryException(resultCode, message);
     }
@@ -324,7 +324,7 @@
     ResultCode resultCode = internalModify.getResultCode();
     if (resultCode != ResultCode.SUCCESS)
     {
-      Message message =
+      LocalizableMessage message =
           TaskMessages.ERR_TASK_CANNOT_DISABLE_BACKEND.get(backendDNString);
       throw new DirectoryException(resultCode, message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/BackUpDB.java b/opendj3-server-dev/src/server/org/opends/server/tools/BackUpDB.java
index ea63095..7a629ee 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/BackUpDB.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/BackUpDB.java
@@ -37,7 +37,7 @@
 import java.util.List;
 import java.util.TimeZone;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.BackendCfg;
 import org.opends.server.api.Backend;
 import org.opends.server.api.DebugLogPublisher;
@@ -266,7 +266,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -290,7 +290,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -318,7 +318,7 @@
     {
       if (backendID.isPresent())
       {
-        Message message = ERR_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID.get(
+        LocalizableMessage message = ERR_BACKUPDB_CANNOT_MIX_BACKUP_ALL_AND_BACKEND_ID.get(
                 backUpAll.getLongIdentifier(),
                 backendID.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -328,7 +328,7 @@
     }
     else if (! backendID.isPresent())
     {
-      Message message = ERR_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID.get(
+      LocalizableMessage message = ERR_BACKUPDB_NEED_BACKUP_ALL_OR_BACKEND_ID.get(
               backUpAll.getLongIdentifier(),
               backendID.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -363,7 +363,7 @@
       }
       if (repeatedBackends.length() > 0)
       {
-        Message message = ERR_BACKUPDB_REPEATED_BACKEND_ID.get(
+        LocalizableMessage message = ERR_BACKUPDB_REPEATED_BACKEND_ID.get(
             repeatedBackends.toString());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
@@ -377,7 +377,7 @@
     {
       if (! incremental.isPresent())
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_BACKUPDB_INCREMENTAL_BASE_REQUIRES_INCREMENTAL.get(
                         incrementalBaseID.getLongIdentifier(),
                         incremental.getLongIdentifier());
@@ -392,7 +392,7 @@
     //  are present, infer an offline backup.
     if ((encrypt.isPresent() || signHash.isPresent())
             && ! argParser.connectionArgumentsPresent()) {
-      Message message =
+      LocalizableMessage message =
               ERR_BACKUPDB_ENCRYPT_OR_SIGN_REQUIRES_ONLINE.get(
                       encrypt.getLongIdentifier(),
                       signHash.getLongIdentifier());
@@ -405,7 +405,7 @@
     // was given.
     if (signHash.isPresent() && (! hash.isPresent()))
     {
-      Message message = ERR_BACKUPDB_SIGN_REQUIRES_HASH.get(
+      LocalizableMessage message = ERR_BACKUPDB_SIGN_REQUIRES_HASH.get(
               signHash.getLongIdentifier(),
               hash.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -563,7 +563,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR.get(
+        LocalizableMessage message = ERR_BACKUPDB_CANNOT_CREATE_BACKUP_DIR.get(
                 backupDirectory.getValue(),
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -608,7 +608,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+        LocalizableMessage message = ERR_SERVER_BOOTSTRAP_ERROR.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -621,13 +621,13 @@
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -641,19 +641,19 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -667,21 +667,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -695,21 +695,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -777,7 +777,7 @@
         {
           if (! b.supportsBackup())
           {
-            Message message =
+            LocalizableMessage message =
                 WARN_BACKUPDB_BACKUP_NOT_SUPPORTED.get(b.getBackendID());
             logError(message);
           }
@@ -794,7 +794,7 @@
       {
         for (String id : requestedBackends)
         {
-          Message message = ERR_BACKUPDB_NO_BACKENDS_FOR_ID.get(id);
+          LocalizableMessage message = ERR_BACKUPDB_NO_BACKENDS_FOR_ID.get(id);
           logError(message);
         }
 
@@ -810,7 +810,7 @@
     // If there are no backends to archive, then print an error and exit.
     if (backendsToArchive.isEmpty())
     {
-      Message message = WARN_BACKUPDB_NO_BACKENDS_TO_ARCHIVE.get();
+      LocalizableMessage message = WARN_BACKUPDB_NO_BACKENDS_TO_ARCHIVE.get();
       logError(message);
       return 1;
     }
@@ -827,7 +827,7 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
         {
-          Message message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
+          LocalizableMessage message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
               b.getBackendID(), String.valueOf(failureReason));
           logError(message);
           errorsEncountered = true;
@@ -836,7 +836,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_BACKUPDB_CANNOT_LOCK_BACKEND.get(
             b.getBackendID(), getExceptionMessage(e));
         logError(message);
         errorsEncountered = true;
@@ -844,7 +844,7 @@
       }
 
 
-      Message message = NOTE_BACKUPDB_STARTING_BACKUP.get(b.getBackendID());
+      LocalizableMessage message = NOTE_BACKUPDB_STARTING_BACKUP.get(b.getBackendID());
       logError(message);
 
 
@@ -1111,13 +1111,13 @@
     int ret = 0;
     if (errorsEncountered)
     {
-      Message message = NOTE_BACKUPDB_COMPLETED_WITH_ERRORS.get();
+      LocalizableMessage message = NOTE_BACKUPDB_COMPLETED_WITH_ERRORS.get();
       logError(message);
       ret = 1;
     }
     else
     {
-      Message message = NOTE_BACKUPDB_COMPLETED_SUCCESSFULLY.get();
+      LocalizableMessage message = NOTE_BACKUPDB_COMPLETED_SUCCESSFULLY.get();
       logError(message);
     }
     return ret;
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 da1cb30..0aa8b33 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
@@ -26,7 +26,7 @@
  */
 package org.opends.server.tools;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.api.Backend;
 import org.opends.server.config.ConfigEntry;
@@ -81,7 +81,7 @@
     }
     catch (DirectoryException de)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(DN_BACKEND_BASE, de
               .getMessageObject());
       logError(message);
@@ -89,7 +89,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(DN_BACKEND_BASE,
               getExceptionMessage(e));
       logError(message);
@@ -103,7 +103,7 @@
     }
     catch (ConfigException ce)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(DN_BACKEND_BASE, ce
               .getMessage());
       logError(message);
@@ -111,7 +111,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(DN_BACKEND_BASE,
               getExceptionMessage(e));
       logError(message);
@@ -146,7 +146,7 @@
       }
       catch (ConfigException ce)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CANNOT_DETERMINE_BACKEND_ID.get(String.valueOf(configEntry
                 .getDN()), ce.getMessage());
         logError(message);
@@ -154,7 +154,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CANNOT_DETERMINE_BACKEND_ID.get(String.valueOf(configEntry
                 .getDN()), getExceptionMessage(e));
         logError(message);
@@ -184,7 +184,7 @@
       }
       catch (ConfigException ce)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CANNOT_DETERMINE_BACKEND_CLASS.get(String.valueOf(configEntry
                 .getDN()), ce.getMessage());
         logError(message);
@@ -192,7 +192,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CANNOT_DETERMINE_BACKEND_CLASS.get(String.valueOf(configEntry
                 .getDN()), getExceptionMessage(e));
         logError(message);
@@ -206,7 +206,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CANNOT_LOAD_BACKEND_CLASS.get(backendClassName, String
                 .valueOf(configEntry.getDN()), getExceptionMessage(e));
         logError(message);
@@ -224,7 +224,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CANNOT_INSTANTIATE_BACKEND_CLASS.get(backendClassName, String
                 .valueOf(configEntry.getDN()), getExceptionMessage(e));
         logError(message);
@@ -245,7 +245,7 @@
             (DNConfigAttribute) configEntry.getConfigAttribute(baseDNStub);
         if (baseDNAttr == null)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_NO_BASES_FOR_BACKEND.get(String.valueOf(configEntry.getDN()));
           logError(message);
         }
@@ -256,7 +256,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CANNOT_DETERMINE_BASES_FOR_BACKEND.get(String
                 .valueOf(configEntry.getDN()), getExceptionMessage(e));
         logError(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/ClientException.java b/opendj3-server-dev/src/server/org/opends/server/tools/ClientException.java
index d32bbba..6901091 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/ClientException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/ClientException.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -63,7 +64,7 @@
    *                    this to be a fatal problem.
    * @param  message    The message that explains the problem that occurred.
    */
-  public ClientException(int exitCode, Message message)
+  public ClientException(int exitCode, LocalizableMessage message)
   {
     super(message);
 
@@ -80,7 +81,7 @@
    * @param  message    The message that explains the problem that occurred.
    * @param  cause      The exception that was caught to trigger this exception.
    */
-  public ClientException(int exitCode, Message message, Throwable cause)
+  public ClientException(int exitCode, LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
 
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 3875ef2..8d287c9 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
@@ -39,7 +39,7 @@
 
 import javax.crypto.Cipher;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.DefaultBehaviorProvider;
 import org.opends.server.admin.DefinedDefaultBehaviorProvider;
 import org.opends.server.admin.StringPropertyDefinition;
@@ -209,7 +209,7 @@
     PrintStream out = NullOutputStream.wrapOrNullStream(outStream);
     PrintStream err = NullOutputStream.wrapOrNullStream(errStream);
 
-    Message toolDescription = INFO_CONFIGDS_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_CONFIGDS_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
     try
@@ -371,7 +371,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -384,7 +384,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -404,7 +404,7 @@
     if (! (baseDNString.isPresent() || ldapPort.isPresent() ||
         jmxPort.isPresent() || rootDNString.isPresent()))
     {
-      Message message = ERR_CONFIGDS_NO_CONFIG_CHANGES.get();
+      LocalizableMessage message = ERR_CONFIGDS_NO_CONFIG_CHANGES.get();
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
       return 1;
@@ -421,7 +421,7 @@
       {
         if (ports.contains(adminConnectorPort.getIntValue()))
         {
-          Message message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
+          LocalizableMessage message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
                   String.valueOf(adminConnectorPort.getIntValue()));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
@@ -436,7 +436,7 @@
       {
         if (ports.contains(ldapsPort.getIntValue()))
         {
-          Message message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
+          LocalizableMessage message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
                   String.valueOf(ldapsPort.getIntValue()));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
@@ -451,7 +451,7 @@
       {
         if (ports.contains(jmxPort.getIntValue()))
         {
-          Message message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
+          LocalizableMessage message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
                   String.valueOf(jmxPort.getIntValue()));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
@@ -465,7 +465,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -491,7 +491,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIGDS_CANNOT_INITIALIZE_JMX.get(
+      LocalizableMessage message = ERR_CONFIGDS_CANNOT_INITIALIZE_JMX.get(
               String.valueOf(configFile.getValue()),
               e.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -505,7 +505,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIGDS_CANNOT_INITIALIZE_CONFIG.get(
+      LocalizableMessage message = ERR_CONFIGDS_CANNOT_INITIALIZE_CONFIG.get(
               String.valueOf(configFile.getValue()),
               e.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -518,7 +518,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_CONFIGDS_CANNOT_INITIALIZE_SCHEMA.get(
+      LocalizableMessage message = ERR_CONFIGDS_CANNOT_INITIALIZE_SCHEMA.get(
               String.valueOf(configFile.getValue()),
               e.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -533,7 +533,7 @@
     if (! LockFileManager.acquireExclusiveLock(serverLockFileName,
                                                failureReason))
     {
-      Message message = ERR_CONFIGDS_CANNOT_ACQUIRE_SERVER_LOCK.get(
+      LocalizableMessage message = ERR_CONFIGDS_CANNOT_ACQUIRE_SERVER_LOCK.get(
               String.valueOf(serverLockFileName),
               String.valueOf(failureReason));
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -557,7 +557,7 @@
           }
           catch (DirectoryException de)
           {
-            Message message = ERR_CONFIGDS_CANNOT_PARSE_BASE_DN.get(
+            LocalizableMessage message = ERR_CONFIGDS_CANNOT_PARSE_BASE_DN.get(
                     String.valueOf(dnString),
                     de.getMessageObject());
             err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -579,7 +579,7 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_CONFIGDS_CANNOT_PARSE_ROOT_DN.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_PARSE_ROOT_DN.get(
                   String.valueOf(rootDNString.getValue()),
                   de.getMessageObject());
           err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -596,7 +596,7 @@
         }
         else
         {
-          Message message = ERR_CONFIGDS_NO_ROOT_PW.get();
+          LocalizableMessage message = ERR_CONFIGDS_NO_ROOT_PW.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
@@ -621,7 +621,7 @@
         }
         catch (DirectoryException de)
         {
-          Message message =
+          LocalizableMessage message =
                   ERR_CONFIGDS_CANNOT_PARSE_KEYMANAGER_PROVIDER_DN.get(
                           keyManagerProviderDN.getValue(),
                           de.getMessageObject());
@@ -657,7 +657,7 @@
           }
           catch (Exception e)
           {
-            Message message =
+            LocalizableMessage message =
               ERR_CONFIG_KEYMANAGER_CANNOT_CREATE_JCEKS_PROVIDER.get(
                 String.valueOf(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -672,7 +672,7 @@
           }
           catch (Exception e)
           {
-            Message message = ERR_CONFIG_KEYMANAGER_CANNOT_GET_BASE.get(
+            LocalizableMessage message = ERR_CONFIG_KEYMANAGER_CANNOT_GET_BASE.get(
                 String.valueOf(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
@@ -693,7 +693,7 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_CONFIGDS_CANNOT_PARSE_TRUSTMANAGER_PROVIDER_DN.
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_PARSE_TRUSTMANAGER_PROVIDER_DN.
                   get(trustManagerProviderDN.getValue(), de.getMessageObject());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -725,7 +725,7 @@
           }
           catch (Exception e)
           {
-            Message message = ERR_CONFIG_KEYMANAGER_CANNOT_GET_BASE.get(
+            LocalizableMessage message = ERR_CONFIG_KEYMANAGER_CANNOT_GET_BASE.get(
                 String.valueOf(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
@@ -739,7 +739,7 @@
           }
           catch (Exception e)
           {
-            Message message = ERR_CONFIG_TRUSTMANAGER_CANNOT_GET_BASE.get(
+            LocalizableMessage message = ERR_CONFIG_TRUSTMANAGER_CANNOT_GET_BASE.get(
                 String.valueOf(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
@@ -752,7 +752,7 @@
       {
         if (!keyManagerProviderDN.isPresent())
         {
-          Message message = ERR_CONFIGDS_KEYMANAGER_PROVIDER_DN_REQUIRED.get(
+          LocalizableMessage message = ERR_CONFIGDS_KEYMANAGER_PROVIDER_DN_REQUIRED.get(
                   keyManagerProviderDN.getLongIdentifier(),
               keyManagerPath.getLongIdentifier());
           err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -778,7 +778,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_CONFIGDS_CANNOT_UPDATE_BASE_DN.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_BASE_DN.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -805,7 +805,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_CONFIGDS_CANNOT_UPDATE_LDAP_PORT.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_LDAP_PORT.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -833,7 +833,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_CONFIGDS_CANNOT_UPDATE_ADMIN_CONNECTOR_PORT.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_ADMIN_CONNECTOR_PORT.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -865,7 +865,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_CONFIGDS_CANNOT_UPDATE_LDAPS_PORT.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_LDAPS_PORT.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -897,7 +897,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_CONFIGDS_CANNOT_UPDATE_JMX_PORT.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_JMX_PORT.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -922,7 +922,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_CONFIGDS_CANNOT_ENABLE_STARTTLS.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_ENABLE_STARTTLS.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -948,7 +948,7 @@
           }
           catch (Exception e)
           {
-            Message message = ERR_CONFIGDS_CANNOT_ENABLE_KEYMANAGER.get(
+            LocalizableMessage message = ERR_CONFIGDS_CANNOT_ENABLE_KEYMANAGER.get(
                     String.valueOf(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
@@ -988,7 +988,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_CONFIGDS_CANNOT_UPDATE_KEYMANAGER_REFERENCE.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_KEYMANAGER_REFERENCE.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -1034,7 +1034,7 @@
           }
           catch (Exception e)
           {
-            Message message = ERR_CONFIGDS_CANNOT_ENABLE_TRUSTMANAGER.get(
+            LocalizableMessage message = ERR_CONFIGDS_CANNOT_ENABLE_TRUSTMANAGER.get(
                     String.valueOf(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return 1;
@@ -1075,7 +1075,7 @@
         }
         catch (Exception e)
         {
-          Message message =
+          LocalizableMessage message =
                   ERR_CONFIGDS_CANNOT_UPDATE_TRUSTMANAGER_REFERENCE.get(
                           String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -1139,7 +1139,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_CONFIGDS_CANNOT_UPDATE_CERT_NICKNAME.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_CERT_NICKNAME.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -1173,7 +1173,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_CONFIGDS_CANNOT_UPDATE_CERT_NICKNAME.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_CERT_NICKNAME.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -1201,13 +1201,13 @@
           String encodedPassword =
                SaltedSHA512PasswordStorageScheme.encodeOffline(rootPWBytes);
           StringConfigAttribute bindPWAttr =
-               new StringConfigAttribute(ATTR_USER_PASSWORD, Message.EMPTY,
+               new StringConfigAttribute(ATTR_USER_PASSWORD, LocalizableMessage.EMPTY,
                                          false, false, false, encodedPassword);
           configEntry.putConfigAttribute(bindPWAttr);
         }
         catch (Exception e)
         {
-          Message message = ERR_CONFIGDS_CANNOT_UPDATE_ROOT_USER.get(
+          LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_ROOT_USER.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -1220,13 +1220,13 @@
         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,
+            "ds-cfg-server-fqdn", LocalizableMessage.EMPTY, false, false, false,
             hostName.getValue());
         configEntry.putConfigAttribute(fqdnAttr);
       }
       catch (Exception e)
       {
-        Message message = ERR_CONFIGDS_CANNOT_UPDATE_DIGEST_MD5_FQDN.get(String
+        LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_DIGEST_MD5_FQDN.get(String
             .valueOf(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -1271,12 +1271,12 @@
               StringConfigAttribute keyWrappingTransformation =
                 new StringConfigAttribute(
                     ATTR_CRYPTO_CIPHER_KEY_WRAPPING_TRANSFORMATION,
-                    Message.EMPTY, false, false, true, alternativeCipher);
+                    LocalizableMessage.EMPTY, false, false, true, alternativeCipher);
               configEntry.putConfigAttribute(keyWrappingTransformation);
             }
             catch (Exception e)
             {
-              Message message = ERR_CONFIGDS_CANNOT_UPDATE_CRYPTO_MANAGER.get(
+              LocalizableMessage message = ERR_CONFIGDS_CANNOT_UPDATE_CRYPTO_MANAGER.get(
                   String.valueOf(e));
               err.println(wrapText(message, MAX_LINE_WIDTH));
               return 1;
@@ -1290,12 +1290,12 @@
       {
         configHandler.writeUpdatedConfig();
 
-        Message message = INFO_CONFIGDS_WROTE_UPDATED_CONFIG.get();
+        LocalizableMessage message = INFO_CONFIGDS_WROTE_UPDATED_CONFIG.get();
         out.println(wrapText(message, MAX_LINE_WIDTH));
       }
       catch (DirectoryException de)
       {
-        Message message = ERR_CONFIGDS_CANNOT_WRITE_UPDATED_CONFIG.get(
+        LocalizableMessage message = ERR_CONFIGDS_CANNOT_WRITE_UPDATED_CONFIG.get(
                 de.getMessageObject());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/ConfigureWindowsService.java b/opendj3-server-dev/src/server/org/opends/server/tools/ConfigureWindowsService.java
index 975889b..7eec715 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/ConfigureWindowsService.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/ConfigureWindowsService.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2013 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.server.tools;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -199,7 +199,7 @@
     PrintStream err = NullOutputStream.wrapOrNullStream(errStream);
 
 //  Define all the arguments that may be used with this program.
-    Message toolDescription =
+    LocalizableMessage toolDescription =
         INFO_CONFIGURE_WINDOWS_SERVICE_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME,
         toolDescription, false);
@@ -239,7 +239,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       returnValue = ERROR;
@@ -254,7 +254,7 @@
       }
       catch (ArgumentException ae)
       {
-        Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+        LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
@@ -286,14 +286,14 @@
       }
       if (nArgs > 1)
       {
-        Message message = ERR_CONFIGURE_WINDOWS_SERVICE_TOO_MANY_ARGS.get();
+        LocalizableMessage message = ERR_CONFIGURE_WINDOWS_SERVICE_TOO_MANY_ARGS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
         returnValue = ERROR;
       }
       if (nArgs == 0)
       {
-        Message message = ERR_CONFIGURE_WINDOWS_SERVICE_TOO_FEW_ARGS.get();
+        LocalizableMessage message = ERR_CONFIGURE_WINDOWS_SERVICE_TOO_FEW_ARGS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
         returnValue = ERROR;
@@ -385,13 +385,13 @@
    */
   public static int enableService(PrintStream out, PrintStream err)
   {
-    Message serviceName = Utils.getCustomizedObject(
+    LocalizableMessage serviceName = Utils.getCustomizedObject(
         "INFO_WINDOWS_SERVICE_NAME",
         INFO_WINDOWS_SERVICE_NAME.get(DynamicConstants.PRODUCT_NAME),
-        Message.class);
-    Message serviceDescription = Utils.getCustomizedObject(
+        LocalizableMessage.class);
+    LocalizableMessage serviceDescription = Utils.getCustomizedObject(
         "INFO_WINDOWS_SERVICE_DESCRIPTION",
-        INFO_WINDOWS_SERVICE_DESCRIPTION.get(getServerRoot()), Message.class);
+        INFO_WINDOWS_SERVICE_DESCRIPTION.get(getServerRoot()), LocalizableMessage.class);
     return enableService(out, err, serviceName.toString(),
         serviceDescription.toString());
   }
@@ -414,7 +414,7 @@
       String serviceName, String serviceDescription)
   {
     int returnValue;
-    Message msg;
+    LocalizableMessage msg;
     String serverRoot = getServerRoot();
 
     String[] cmd;
@@ -527,7 +527,7 @@
   public static int disableService(PrintStream out, PrintStream err)
   {
     int returnValue;
-    Message msg;
+    LocalizableMessage msg;
     String serverRoot = getServerRoot();
     String[] cmd;
     if (SetupUtils.hasUAC())
@@ -608,7 +608,7 @@
       PrintStream err)
   {
     int returnValue;
-    Message msg;
+    LocalizableMessage msg;
     String[] cmd;
     if (SetupUtils.hasUAC())
     {
@@ -685,7 +685,7 @@
   public static int serviceState(PrintStream out, PrintStream err)
   {
     int returnValue;
-    Message msg;
+    LocalizableMessage msg;
     String serviceName = null;
 
     String serverRoot = getServerRoot();
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/ConsoleDebugLogPublisher.java b/opendj3-server-dev/src/server/org/opends/server/tools/ConsoleDebugLogPublisher.java
index 55f4e24..34a6af9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/ConsoleDebugLogPublisher.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/ConsoleDebugLogPublisher.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;
 
@@ -33,8 +33,8 @@
 import org.opends.server.admin.std.server.DebugLogPublisherCfg;
 import org.opends.server.api.DebugLogPublisher;
 import org.opends.server.config.ConfigException;
+import org.opends.server.core.ServerContext;
 import org.opends.server.loggers.LogCategory;
-import org.opends.server.loggers.LogLevel;
 import org.opends.server.loggers.debug.DebugMessageFormatter;
 import org.opends.server.loggers.debug.DebugStackTraceFormatter;
 import org.opends.server.loggers.debug.TraceSettings;
@@ -77,7 +77,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void initializeLogPublisher(DebugLogPublisherCfg config)
+  public void initializeLogPublisher(DebugLogPublisherCfg config, ServerContext serverContext)
       throws ConfigException, InitializationException {
     // This publisher is not configurable.
   }
@@ -86,157 +86,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void traceConstructor(LogLevel level,
-                               TraceSettings settings,
-                               String signature,
-                               String sourceLocation,
-                               Object[] args,
-                               StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.CONSTRUCTOR;
-
-    String msg = "";
-    if(args != null)
-    {
-      msg = buildDefaultEntryMessage(signature, sourceLocation, args);
-    }
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
-                                                      settings.getStackDepth());
-    }
-    publish(category, level, msg, stack);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceMethodEntry(LogLevel level,
-                               TraceSettings settings,
-                               String signature,
-                               String sourceLocation,
-                               Object obj,
-                               Object[] args,
-                               StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.ENTER;
-    String msg = "";
-    if(args != null)
-    {
-      msg = buildDefaultEntryMessage(signature, sourceLocation, args);
-    }
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
-                                                      settings.getStackDepth());
-    }
-    publish(category, level, msg, stack);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceStaticMethodEntry(LogLevel level,
-                                     TraceSettings settings,
-                                     String signature,
-                                     String sourceLocation,
-                                     Object[] args,
-                                     StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.ENTER;
-    String msg = "";
-    if(args != null)
-    {
-      msg = buildDefaultEntryMessage(signature, sourceLocation, args);
-    }
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
-                                                      settings.getStackDepth());
-    }
-    publish(category, level, msg, stack);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceReturn(LogLevel level,
-                          TraceSettings settings,
-                          String signature,
-                          String sourceLocation,
-                          Object ret,
-                          StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.EXIT;
-    String msg = "";
-    if(ret != null)
-    {
-      StringBuilder format = new StringBuilder();
-      format.append("returned={%s} ");
-      format.append(signature);
-      format.append("():");
-      format.append(sourceLocation);
-
-      msg = DebugMessageFormatter.format(format.toString(),
-                                         new Object[] {ret});
-    }
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
-                                                      settings.getStackDepth());
-    }
-    publish(category, level,  msg, stack);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceThrown(LogLevel level,
-                          TraceSettings settings,
-                          String signature,
-                          String sourceLocation,
-                          Throwable ex,
-                          StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.THROWN;
-
-    StringBuilder format = new StringBuilder();
-    format.append("thrown={%s} ");
-    format.append(signature);
-    format.append("():");
-    format.append(sourceLocation);
-
-    String msg = DebugMessageFormatter.format(format.toString(),
-                                              new Object[] {ex});
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(ex,
-                                                       settings.getStackDepth(),
-                                                     settings.isIncludeCause());
-    }
-    publish(category, level, msg, stack);
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceMessage(LogLevel level,
-                           TraceSettings settings,
+  public void traceMessage(TraceSettings settings,
                            String signature,
                            String sourceLocation,
                            String msg,
@@ -250,19 +100,18 @@
       stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
                                                       settings.getStackDepth());
     }
-    publish(category, level, msg, stack);
+    publish(category, msg, stack);
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void traceCaught(LogLevel level,
-                          TraceSettings settings,
+  public void traceCaught(TraceSettings settings,
                           String signature,
                           String sourceLocation,
-                          Throwable ex,
-                          StackTraceElement[] stackTrace)
+                          String msg,
+                          Throwable ex, StackTraceElement[] stackTrace)
   {
     LogCategory category = DebugLogCategory.CAUGHT;
 
@@ -271,34 +120,37 @@
     format.append(signature);
     format.append("():");
     format.append(sourceLocation);
-
-    String msg = DebugMessageFormatter.format("caught={%s}",
-                                              new Object[] {ex});
+    StringBuilder message = new StringBuilder();
+    if (!msg.isEmpty())
+    {
+      message.append(msg).append(" ");
+    }
+    message.append(DebugMessageFormatter.format("caught={%s}",
+        new Object[] { ex }));
 
     String stack = null;
-    if(stackTrace != null)
+    if (stackTrace != null)
     {
-      stack = DebugStackTraceFormatter.formatStackTrace(ex,
-                                                       settings.getStackDepth(),
-                                                     settings.isIncludeCause());
+      stack =
+          DebugStackTraceFormatter.formatStackTrace(ex, settings
+              .getStackDepth(), settings.isIncludeCause());
     }
-    publish(category, level, msg, stack);
+    publish(category, message.toString(), stack);
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void traceJEAccess(LogLevel level,
-                            TraceSettings settings,
+  public void traceJEAccess(TraceSettings settings,
                             String signature,
                             String sourceLocation,
                             OperationStatus status,
-                            Database database, Transaction txn,
-                            DatabaseEntry key, DatabaseEntry data,
-                            StackTraceElement[] stackTrace)
+                            Database database,
+                            Transaction txn, DatabaseEntry key,
+                            DatabaseEntry data, StackTraceElement[] stackTrace)
   {
-    LogCategory category = DebugLogCategory.DATABASE_ACCESS;
+    LogCategory category = DebugLogCategory.MESSAGE;
 
     // Build the string that is common to category DATABASE_ACCESS.
     StringBuilder builder = new StringBuilder();
@@ -358,53 +210,20 @@
       stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
                                                       settings.getStackDepth());
     }
-    publish(category, level, builder.toString(), stack);
+    publish(category, builder.toString(), stack);
   }
 
   /**
    * {@inheritDoc}
    */
   @Override
-  public void traceData(LogLevel level,
-                        TraceSettings settings,
-                        String signature,
-                        String sourceLocation,
-                        byte[] data,
-                        StackTraceElement[] stackTrace)
-  {
-    LogCategory category = DebugLogCategory.DATA;
-    if(data != null)
-    {
-      StringBuilder builder = new StringBuilder();
-      builder.append(ServerConstants.EOL);
-      builder.append("data(len=");
-      builder.append(data.length);
-      builder.append("):");
-      builder.append(ServerConstants.EOL);
-      StaticUtils.byteArrayToHexPlusAscii(builder, data, 4);
-
-    String stack = null;
-    if(stackTrace != null)
-    {
-      stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
-                                                      settings.getStackDepth());
-    }
-    publish(category, level, builder.toString(), stack);
-    }
-  }
-
-  /**
-   * {@inheritDoc}
-   */
-  @Override
-  public void traceProtocolElement(LogLevel level,
-                                   TraceSettings settings,
+  public void traceProtocolElement(TraceSettings settings,
                                    String signature,
                                    String sourceLocation,
                                    String decodedForm,
                                    StackTraceElement[] stackTrace)
   {
-    LogCategory category = DebugLogCategory.PROTOCOL;
+    LogCategory category = DebugLogCategory.MESSAGE;
 
     String stack = null;
     if(stackTrace != null)
@@ -412,7 +231,7 @@
       stack = DebugStackTraceFormatter.formatStackTrace(stackTrace,
                                                       settings.getStackDepth());
     }
-    publish(category, level, decodedForm, stack);
+    publish(category, decodedForm, stack);
   }
 
   /**
@@ -427,8 +246,7 @@
 
   // Publishes a record, optionally performing some "special" work:
   // - injecting a stack trace into the message
-  private void publish(LogCategory category, LogLevel level, String msg,
-                       String stack)
+  private void publish(LogCategory category, String msg, String stack)
   {
     StringBuilder buf = new StringBuilder();
     // Emit the timestamp.
@@ -440,8 +258,7 @@
     buf.append(" ");
 
     // Emit the debug level.
-    buf.append(level);
-    buf.append(" ");
+    buf.append("TRACE ");
 
     // Emit message.
     buf.append(msg);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/CreateRCScript.java b/opendj3-server-dev/src/server/org/opends/server/tools/CreateRCScript.java
index fb84798..88c90d8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/CreateRCScript.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/CreateRCScript.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions Copyright 2010-2013 ForgeRock AS
+ *      Portions Copyright 2010-2014 ForgeRock AS
  */
 package org.opends.server.tools;
 
@@ -33,7 +33,7 @@
 import java.io.PrintStream;
 import java.io.PrintWriter;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.FilePermission;
 import org.opends.server.types.NullOutputStream;
@@ -116,7 +116,7 @@
     }
 
 
-    Message description = INFO_CREATERC_TOOL_DESCRIPTION.get();
+    LocalizableMessage description = INFO_CREATERC_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser(CreateRCScript.class.getName(), description, false);
 
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 7341ff6..86e1ee9 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
@@ -32,7 +32,7 @@
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.BackendCfg;
 import org.opends.server.admin.std.server.LocalDBBackendCfg;
 import org.opends.server.api.Backend;
@@ -159,15 +159,15 @@
     this.out = NullOutputStream.wrapOrNullStream(out);
     this.err = NullOutputStream.wrapOrNullStream(err);
 
-    Message toolDescription = INFO_DESCRIPTION_DBTEST_TOOL.get();
+    LocalizableMessage toolDescription = INFO_DESCRIPTION_DBTEST_TOOL.get();
     this.parser = new SubCommandArgumentParser(this.getClass().getName(),
                                                toolDescription, false);
   }
 
   // Displays the provided message followed by a help usage reference.
-  private void displayMessageAndUsageReference(Message message) {
+  private void displayMessageAndUsageReference(LocalizableMessage message) {
     printMessage(message);
-    printMessage(Message.EMPTY);
+    printMessage(LocalizableMessage.EMPTY);
     printMessage(parser.getHelpUsageReference());
   }
 
@@ -356,7 +356,7 @@
       initializeGlobalArguments();
       initializeSubCommands();
     } catch (ArgumentException e) {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(e.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(e.getMessage());
       printMessage(message);
       return 1;
     }
@@ -365,7 +365,7 @@
     try {
       parser.parseArguments(args);
     } catch (ArgumentException ae) {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       displayMessageAndUsageReference(message);
       return 1;
     }
@@ -403,7 +403,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+        LocalizableMessage message = ERR_SERVER_BOOTSTRAP_ERROR.get(
                 getExceptionMessage(e));
         printMessage(message);
         return 1;
@@ -416,14 +416,14 @@
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(
             ie.getMessage());
         printMessage(message);
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(
             getExceptionMessage(e));
         printMessage(message);
         return 1;
@@ -438,21 +438,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(
             ce.getMessage());
         printMessage(message);
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(
             ie.getMessage());
         printMessage(message);
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(
             getExceptionMessage(e));
         printMessage(message);
         return 1;
@@ -468,21 +468,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
                 ce.getMessage());
         printMessage(message);
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
                 ie.getMessage());
         printMessage(message);
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
                 getExceptionMessage(e));
         printMessage(message);
         return 1;
@@ -496,21 +496,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 ce.getMessage());
         printMessage(message);
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 ie.getMessage());
         printMessage(message);
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 getExceptionMessage(e));
         printMessage(message);
         return 1;
@@ -520,7 +520,7 @@
     // Make sure that we have a sub-command.
     if (parser.getSubCommand() == null)
     {
-      Message message = ERR_DBTEST_MISSING_SUBCOMMAND.get();
+      LocalizableMessage message = ERR_DBTEST_MISSING_SUBCOMMAND.get();
       displayMessageAndUsageReference(message);
       return 1;
     }
@@ -565,7 +565,7 @@
       if (debugEnabled()) {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      printMessage(Message.raw(StaticUtils.stackTraceToString(e)));
+      printMessage(LocalizableMessage.raw(StaticUtils.stackTraceToString(e)));
       return 1;
     }
   }
@@ -624,7 +624,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        Message message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         printMessage(message);
         return 1;
@@ -632,7 +632,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       printMessage(message);
       return 1;
@@ -703,14 +703,14 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-        Message message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
           printMessage(message);
         }
       }
       catch (Exception e)
       {
-      Message message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
+      LocalizableMessage message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
         printMessage(message);
       }
@@ -760,7 +760,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        Message message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         printMessage(message);
         return 1;
@@ -768,7 +768,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       printMessage(message);
       return 1;
@@ -878,14 +878,14 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-          Message message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
+          LocalizableMessage message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
               backend.getBackendID(), String.valueOf(failureReason));
           printMessage(message);
         }
       }
       catch (Exception e)
       {
-        Message message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
             backend.getBackendID(), getExceptionMessage(e));
         printMessage(message);
       }
@@ -935,7 +935,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        Message message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         printMessage(message);
         return 1;
@@ -943,7 +943,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       printMessage(message);
       return 1;
@@ -976,9 +976,9 @@
       builder.appendHeading(INFO_LABEL_DBTEST_JE_RECORD_COUNT.get());
       builder.appendHeading(
           INFO_LABEL_DBTEST_INDEX_UNDEFINED_RECORD_COUNT.get());
-      builder.appendHeading(Message.raw("95%"));
-      builder.appendHeading(Message.raw("90%"));
-      builder.appendHeading(Message.raw("85%"));
+      builder.appendHeading(LocalizableMessage.raw("95%"));
+      builder.appendHeading(LocalizableMessage.raw("90%"));
+      builder.appendHeading(LocalizableMessage.raw("85%"));
 
 
       EntryContainer ec = rc.getEntryContainer(base);
@@ -1134,14 +1134,14 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-        Message message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
           printMessage(message);
         }
       }
       catch (Exception e)
       {
-      Message message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
+      LocalizableMessage message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
         printMessage(message);
       }
@@ -1191,7 +1191,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        Message message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         printMessage(message);
         return 1;
@@ -1199,7 +1199,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_DBTEST_CANNOT_LOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       printMessage(message);
       return 1;
@@ -1464,8 +1464,8 @@
 
           if (!statsOnly.isPresent())
           {
-            Message keyLabel = INFO_LABEL_DBTEST_KEY.get();
-            Message dataLabel = INFO_LABEL_DBTEST_DATA.get();
+            LocalizableMessage keyLabel = INFO_LABEL_DBTEST_KEY.get();
+            LocalizableMessage dataLabel = INFO_LABEL_DBTEST_DATA.get();
 
             String formatedKey = null;
             String formatedData = null;
@@ -1483,7 +1483,7 @@
                 }
                 catch(Exception e)
                 {
-                  Message message =
+                  LocalizableMessage message =
                     ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
                   printMessage(message);
                 }
@@ -1507,7 +1507,7 @@
                 }
                 catch(Exception e)
                 {
-                  Message message =
+                  LocalizableMessage message =
                     ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
                   printMessage(message);
                 }
@@ -1521,7 +1521,7 @@
                 }
                 catch(Exception e)
                 {
-                  Message message =
+                  LocalizableMessage message =
                     ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
                   printMessage(message);
                 }
@@ -1659,7 +1659,7 @@
                 }
                 catch(Exception e)
                 {
-                  Message message =
+                  LocalizableMessage message =
                     ERR_DBTEST_DECODE_FAIL.get(getExceptionMessage(e));
                   printMessage(message);
                 }
@@ -1733,14 +1733,14 @@
         StringBuilder failureReason = new StringBuilder();
         if (! LockFileManager.releaseLock(lockFile, failureReason))
         {
-          Message message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
+          LocalizableMessage message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
               backend.getBackendID(), String.valueOf(failureReason));
           printMessage(message);
         }
       }
       catch (Exception e)
       {
-        Message message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_DBTEST_CANNOT_UNLOCK_BACKEND.get(
             backend.getBackendID(), getExceptionMessage(e));
         printMessage(message);
       }
@@ -1776,7 +1776,7 @@
    * @param msg
    *          The message.
    */
-  public final void printMessage(Message msg) {
+  public final void printMessage(LocalizableMessage msg) {
     err.println(wrapText(msg.toString(), MAX_LINE_WIDTH));
   }
 }
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 e34b0c9..4d1e8df 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
@@ -35,7 +35,7 @@
 import java.util.HashSet;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ServerManagementContext;
 import org.opends.server.admin.std.server.BackendCfg;
 import org.opends.server.admin.std.server.LDIFBackendCfg;
@@ -154,7 +154,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    Message toolDescription = INFO_ENCPW_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_ENCPW_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.EncodePassword",
                             toolDescription, false);
@@ -254,7 +254,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return OPERATIONS_ERROR;
@@ -268,7 +268,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -297,7 +297,7 @@
     // Check for conflicting arguments.
     if (clearPassword.isPresent() && clearPasswordFile.isPresent())
     {
-      Message message =
+      LocalizableMessage message =
               ERR_TOOL_CONFLICTING_ARGS.get(clearPassword.getLongIdentifier(),
                                   clearPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -306,7 +306,7 @@
 
     if (clearPassword.isPresent() && interactivePassword.isPresent())
     {
-      Message message =
+      LocalizableMessage message =
               ERR_TOOL_CONFLICTING_ARGS.get(clearPassword.getLongIdentifier(),
                   interactivePassword.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -315,7 +315,7 @@
 
     if (clearPasswordFile.isPresent() && interactivePassword.isPresent())
     {
-      Message message =
+      LocalizableMessage message =
               ERR_TOOL_CONFLICTING_ARGS.get(
                   clearPasswordFile.getLongIdentifier(),
                   interactivePassword.getLongIdentifier());
@@ -325,7 +325,7 @@
 
     if (encodedPassword.isPresent() && encodedPasswordFile.isPresent())
     {
-      Message message =
+      LocalizableMessage message =
               ERR_TOOL_CONFLICTING_ARGS.get(encodedPassword.getLongIdentifier(),
                                   encodedPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -342,7 +342,7 @@
       if ((! encodedPassword.isPresent()) && (! encodedPasswordFile.isPresent())
            && (! schemeName.isPresent()))
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_ENCPW_NO_SCHEME.get(schemeName.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
@@ -384,7 +384,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_SERVER_BOOTSTRAP_ERROR.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
@@ -397,13 +397,13 @@
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
       }
@@ -417,19 +417,19 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
       }
@@ -443,21 +443,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
       }
       catch (InitializationException ie)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
@@ -476,7 +476,7 @@
       }
       catch (ConfigException ce)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES.get(
                         ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -484,14 +484,14 @@
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES.get(
+        LocalizableMessage message = ERR_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
       }
       catch (Exception e)
       {
-        Message message = ERR_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES.get(
+        LocalizableMessage message = ERR_ENCPW_CANNOT_INITIALIZE_STORAGE_SCHEMES.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return OPERATIONS_ERROR;
@@ -508,7 +508,7 @@
              DirectoryServer.getAuthPasswordStorageSchemes();
         if (storageSchemes.isEmpty())
         {
-          Message message = ERR_ENCPW_NO_STORAGE_SCHEMES.get();
+          LocalizableMessage message = ERR_ENCPW_NO_STORAGE_SCHEMES.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
         }
         else
@@ -539,7 +539,7 @@
              DirectoryServer.getPasswordStorageSchemes();
         if (storageSchemes.isEmpty())
         {
-          Message message = ERR_ENCPW_NO_STORAGE_SCHEMES.get();
+          LocalizableMessage message = ERR_ENCPW_NO_STORAGE_SCHEMES.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
         }
         else
@@ -590,14 +590,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_ENCPW_INVALID_ENCODED_AUTHPW.get(
+          LocalizableMessage message = ERR_ENCPW_INVALID_ENCODED_AUTHPW.get(
                   de.getMessageObject());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return OPERATIONS_ERROR;
         }
         catch (Exception e)
         {
-          Message message = ERR_ENCPW_INVALID_ENCODED_AUTHPW.get(
+          LocalizableMessage message = ERR_ENCPW_INVALID_ENCODED_AUTHPW.get(
                   String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return OPERATIONS_ERROR;
@@ -607,7 +607,7 @@
              DirectoryServer.getAuthPasswordStorageScheme(scheme);
         if (storageScheme == null)
         {
-          Message message = ERR_ENCPW_NO_SUCH_AUTH_SCHEME.get(
+          LocalizableMessage message = ERR_ENCPW_NO_SUCH_AUTH_SCHEME.get(
                   scheme);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return OPERATIONS_ERROR;
@@ -648,21 +648,21 @@
                  DirectoryServer.getPasswordStorageScheme(userPWElements[0]);
             if (storageScheme == null)
             {
-              Message message = ERR_ENCPW_NO_SUCH_SCHEME.get(userPWElements[0]);
+              LocalizableMessage message = ERR_ENCPW_NO_SUCH_SCHEME.get(userPWElements[0]);
               err.println(wrapText(message, MAX_LINE_WIDTH));
               return OPERATIONS_ERROR;
             }
           }
           catch (DirectoryException de)
           {
-            Message message = ERR_ENCPW_INVALID_ENCODED_USERPW.get(
+            LocalizableMessage message = ERR_ENCPW_INVALID_ENCODED_USERPW.get(
                     de.getMessageObject());
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return OPERATIONS_ERROR;
           }
           catch (Exception e)
           {
-            Message message = ERR_ENCPW_INVALID_ENCODED_USERPW.get(
+            LocalizableMessage message = ERR_ENCPW_INVALID_ENCODED_USERPW.get(
                     String.valueOf(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return OPERATIONS_ERROR;
@@ -672,7 +672,7 @@
         {
           if (! schemeName.isPresent())
           {
-            Message message = ERR_ENCPW_NO_SCHEME.get(
+            LocalizableMessage message = ERR_ENCPW_NO_SCHEME.get(
                     schemeName.getLongIdentifier());
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return OPERATIONS_ERROR;
@@ -684,7 +684,7 @@
           storageScheme = DirectoryServer.getPasswordStorageScheme(scheme);
           if (storageScheme == null)
           {
-            Message message = ERR_ENCPW_NO_SUCH_SCHEME.get(scheme);
+            LocalizableMessage message = ERR_ENCPW_NO_SUCH_SCHEME.get(scheme);
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return OPERATIONS_ERROR;
           }
@@ -720,7 +720,7 @@
         storageScheme = DirectoryServer.getAuthPasswordStorageScheme(scheme);
         if (storageScheme == null)
         {
-          Message message = ERR_ENCPW_NO_SUCH_AUTH_SCHEME.get(scheme);
+          LocalizableMessage message = ERR_ENCPW_NO_SUCH_AUTH_SCHEME.get(scheme);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return OPERATIONS_ERROR;
         }
@@ -731,7 +731,7 @@
         storageScheme = DirectoryServer.getPasswordStorageScheme(scheme);
         if (storageScheme == null)
         {
-          Message message = ERR_ENCPW_NO_SUCH_SCHEME.get(scheme);
+          LocalizableMessage message = ERR_ENCPW_NO_SUCH_SCHEME.get(scheme);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return OPERATIONS_ERROR;
         }
@@ -752,19 +752,19 @@
           }
           encodedPW = storageScheme.encodeAuthPassword(clearPW);
 
-          Message message = ERR_ENCPW_ENCODED_PASSWORD.get(
+          LocalizableMessage message = ERR_ENCPW_ENCODED_PASSWORD.get(
                   encodedPW.toString());
           out.println(message);
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_ENCPW_CANNOT_ENCODE.get(de.getMessageObject());
+          LocalizableMessage message = ERR_ENCPW_CANNOT_ENCODE.get(de.getMessageObject());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return OPERATIONS_ERROR;
         }
         catch (Exception e)
         {
-          Message message = ERR_ENCPW_CANNOT_ENCODE.get(getExceptionMessage(e));
+          LocalizableMessage message = ERR_ENCPW_CANNOT_ENCODE.get(getExceptionMessage(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return OPERATIONS_ERROR;
         }
@@ -784,19 +784,19 @@
           }
           encodedPW = storageScheme.encodePasswordWithScheme(clearPW);
 
-          Message message =
+          LocalizableMessage message =
                   ERR_ENCPW_ENCODED_PASSWORD.get(encodedPW.toString());
           out.println(message);
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_ENCPW_CANNOT_ENCODE.get(de.getMessageObject());
+          LocalizableMessage message = ERR_ENCPW_CANNOT_ENCODE.get(de.getMessageObject());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return OPERATIONS_ERROR;
         }
         catch (Exception e)
         {
-          Message message = ERR_ENCPW_CANNOT_ENCODE.get(getExceptionMessage(e));
+          LocalizableMessage message = ERR_ENCPW_CANNOT_ENCODE.get(getExceptionMessage(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return OPERATIONS_ERROR;
         }
@@ -809,7 +809,7 @@
 
 
 
-  private static Message getOutputMessage(boolean passwordMatches)
+  private static LocalizableMessage getOutputMessage(boolean passwordMatches)
   {
     if (passwordMatches)
     {
@@ -831,21 +831,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return false;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return false;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return false;
@@ -868,12 +868,12 @@
           //Load the crypto-manager key cache among other things.
          new CryptoManagerSync();
     } catch (InitializationException ie) {
-        Message message = ERR_ENCPW_CANNOT_INITIALIZE_SERVER_COMPONENTS.get(
+        LocalizableMessage message = ERR_ENCPW_CANNOT_INITIALIZE_SERVER_COMPONENTS.get(
                 getExceptionMessage(ie));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return false;
     } catch (ConfigException ce) {
-        Message message = ERR_ENCPW_CANNOT_INITIALIZE_SERVER_COMPONENTS.get(
+        LocalizableMessage message = ERR_ENCPW_CANNOT_INITIALIZE_SERVER_COMPONENTS.get(
                 getExceptionMessage(ce));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return false;
@@ -894,12 +894,12 @@
       if (debugEnabled()) {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message = ERR_CONFIG_BACKEND_CANNOT_GET_CONFIG_BASE.get(
+      LocalizableMessage message = ERR_CONFIG_BACKEND_CANNOT_GET_CONFIG_BASE.get(
           getExceptionMessage(e));
       throw new ConfigException(message, e);
     }
     if (backendRoot == null) {
-      Message message = ERR_CONFIG_BACKEND_BASE_DOES_NOT_EXIST.get();
+      LocalizableMessage message = ERR_CONFIG_BACKEND_BASE_DOES_NOT_EXIST.get();
       throw new ConfigException(message);
     }
     for (String name : root.listBackends()) {
@@ -918,7 +918,7 @@
             if (debugEnabled()) {
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
-            Message message =
+            LocalizableMessage message =
               ERR_CONFIG_BACKEND_CANNOT_INSTANTIATE.get(
                   String.valueOf(className),
                   String.valueOf(backendCfg.dn()),
@@ -936,7 +936,7 @@
             {
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
-            Message message =
+            LocalizableMessage message =
               ERR_CONFIG_BACKEND_CANNOT_INITIALIZE.get(
                   String.valueOf(className),
                   String.valueOf(backendCfg.dn()),
@@ -950,7 +950,7 @@
             if (debugEnabled()) {
               TRACER.debugCaught(DebugLogLevel.ERROR, e);
             }
-            Message message =
+            LocalizableMessage message =
               WARN_CONFIG_BACKEND_CANNOT_REGISTER_BACKEND.get(
                   backendCfg.getBackendId(),
                   getExceptionMessage(e));
@@ -991,7 +991,7 @@
       try
       {
         String pwd1, pwd2;
-        Message msg = INFO_ENCPW_INPUT_PWD_1.get();
+        LocalizableMessage msg = INFO_ENCPW_INPUT_PWD_1.get();
         pwd1 = encodePassword.getPassword(out, msg.toString());
 
         msg = INFO_ENCPW_INPUT_PWD_2.get();
@@ -1002,14 +1002,14 @@
         }
         else
         {
-          Message message = ERR_ENCPW_NOT_SAME_PW.get();
+          LocalizableMessage message = ERR_ENCPW_NOT_SAME_PW.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return null;
         }
       }
       catch (IOException e)
       {
-        Message message = ERR_ENCPW_CANNOT_READ_PW.get(e.getMessage());
+        LocalizableMessage message = ERR_ENCPW_CANNOT_READ_PW.get(e.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return null;
       }
@@ -1017,7 +1017,7 @@
     }
     else
     {
-      Message message = ERR_ENCPW_NO_CLEAR_PW.get(clearPassword
+      LocalizableMessage message = ERR_ENCPW_NO_CLEAR_PW.get(clearPassword
           .getLongIdentifier(), clearPasswordFile.getLongIdentifier(),
           interactivePassword.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
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 943e619..4d9e06c 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
@@ -57,7 +57,7 @@
 import org.opends.server.util.args.LDAPConnectionArgumentParser;
 import org.opends.server.util.cli.CLIException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.server.util.ServerConstants.*;
@@ -295,7 +295,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -320,7 +320,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -516,7 +516,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_SERVER_BOOTSTRAP_ERROR.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -529,13 +529,13 @@
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -549,19 +549,19 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -575,21 +575,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -603,21 +603,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                         getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -653,21 +653,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_LDIFEXPORT_CANNOT_INITIALIZE_PLUGINS.get(
                         getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -736,14 +736,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
               filterString, de.getMessageObject());
           logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
               filterString, getExceptionMessage(e));
           logError(message);
           return 1;
@@ -767,14 +767,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
               filterString, de.getMessageObject());
           logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
               filterString, getExceptionMessage(e));
           logError(message);
           return 1;
@@ -814,7 +814,7 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDIFEXPORT_MULTIPLE_BACKENDS_FOR_ID.get(backendID.getValue());
         logError(message);
         return 1;
@@ -823,14 +823,14 @@
 
     if (backend == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDIFEXPORT_NO_BACKENDS_FOR_ID.get(backendID.getValue());
       logError(message);
       return 1;
     }
     else if (! backend.supportsLDIFExport())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDIFEXPORT_CANNOT_EXPORT_BACKEND.get(backendID.getValue());
       logError(message);
       return 1;
@@ -848,14 +848,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
               s, de.getMessageObject());
           logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
               s, getExceptionMessage(e));
           logError(message);
           return 1;
@@ -882,14 +882,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
               s, de.getMessageObject());
           logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
               s, getExceptionMessage(e));
           logError(message);
           return 1;
@@ -898,7 +898,7 @@
         if (! Backend.handlesEntry(includeBranch, defaultIncludeBranches,
                                    excludeBranches))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_LDIFEXPORT_INVALID_INCLUDE_BASE.get(s, backendID.getValue());
           logError(message);
           return 1;
@@ -947,7 +947,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_LDIFEXPORT_CANNOT_DECODE_WRAP_COLUMN_AS_INTEGER.get(
+      LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_DECODE_WRAP_COLUMN_AS_INTEGER.get(
           wrapColumn.getValue());
       logError(message);
       return 1;
@@ -966,7 +966,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
         return 1;
@@ -974,7 +974,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_LDIFEXPORT_CANNOT_LOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       logError(message);
       return 1;
@@ -989,14 +989,14 @@
     }
     catch (DirectoryException de)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(de.getMessageObject());
       logError(message);
       errorOccurred = true;
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDIFEXPORT_ERROR_DURING_EXPORT.get(getExceptionMessage(e));
       logError(message);
       errorOccurred = true;
@@ -1010,14 +1010,14 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
       }
     }
     catch (Exception e)
     {
-      Message message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
+      LocalizableMessage message = WARN_LDIFEXPORT_CANNOT_UNLOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       logError(message);
     }
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 f8f2aca..14b8002 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
@@ -43,7 +43,7 @@
 import java.util.List;
 import java.util.Random;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.BackendCfg;
 import org.opends.server.api.Backend;
 import org.opends.server.api.ErrorLogPublisher;
@@ -393,7 +393,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -417,7 +417,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -446,7 +446,7 @@
     {
       if (templateFile.isPresent())
       {
-        Message message = ERR_LDIFIMPORT_CONFLICTING_OPTIONS.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CONFLICTING_OPTIONS.get(
                 ldifFiles.getLongIdentifier(),
                 templateFile.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -455,7 +455,7 @@
     }
     else if (! templateFile.isPresent())
     {
-      Message message = ERR_LDIFIMPORT_MISSING_REQUIRED_ARGUMENT.get(
+      LocalizableMessage message = ERR_LDIFIMPORT_MISSING_REQUIRED_ARGUMENT.get(
               ldifFiles.getLongIdentifier(),
               templateFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -466,7 +466,7 @@
     // "backendID" argument was provided.
     if(!includeBranchStrings.isPresent() && !backendID.isPresent())
     {
-      Message message = ERR_LDIFIMPORT_MISSING_BACKEND_ARGUMENT.get(
+      LocalizableMessage message = ERR_LDIFIMPORT_MISSING_BACKEND_ARGUMENT.get(
               includeBranchStrings.getLongIdentifier(),
               backendID.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -479,7 +479,7 @@
     if (countRejects.isPresent()
         && argParser.connectionArgumentsPresent())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDIFIMPORT_COUNT_REJECTS_REQUIRES_OFFLINE
               .get(countRejects.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -747,7 +747,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+        LocalizableMessage message = ERR_SERVER_BOOTSTRAP_ERROR.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -760,13 +760,13 @@
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -780,19 +780,19 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -806,21 +806,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
                 ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -834,21 +834,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -878,14 +878,14 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_INITIALIZE_ROOTDN_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_ROOTDN_MANAGER.get(
                 ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_INITIALIZE_ROOTDN_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_ROOTDN_MANAGER.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -899,21 +899,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
                 ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -926,7 +926,7 @@
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_INITIALIZE_SUBENTRY_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_SUBENTRY_MANAGER.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -939,21 +939,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY.get(
                 ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PWPOLICY.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -971,21 +971,21 @@
     }
     catch (ConfigException ce)
     {
-      Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
+      LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
               ce.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
     catch (InitializationException ie)
     {
-      Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
+      LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
               ie.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
+      LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_INITIALIZE_PLUGINS.get(
               getExceptionMessage(e));
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -1077,14 +1077,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
               filterString, de.getMessageObject());
           logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_PARSE_EXCLUDE_FILTER.get(
               filterString, getExceptionMessage(e));
           logError(message);
           return 1;
@@ -1108,14 +1108,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
               filterString, de.getMessageObject());
           logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_PARSE_INCLUDE_FILTER.get(
               filterString, getExceptionMessage(e));
           logError(message);
           return 1;
@@ -1145,14 +1145,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
               s, de.getMessageObject());
           logError(message);
           return 1;
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_INCLUDE_BASE.get(
               s, getExceptionMessage(e));
           logError(message);
           return 1;
@@ -1214,7 +1214,7 @@
       }
       else
       {
-        Message message = ERR_LDIFIMPORT_MULTIPLE_BACKENDS_FOR_ID.get();
+        LocalizableMessage message = ERR_LDIFIMPORT_MULTIPLE_BACKENDS_FOR_ID.get();
         logError(message);
         return 1;
       }
@@ -1222,14 +1222,14 @@
 
     if (backend == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDIFIMPORT_NO_BACKENDS_FOR_ID.get();
       logError(message);
       return 1;
     }
     else if (! backend.supportsLDIFImport())
     {
-      Message message = ERR_LDIFIMPORT_CANNOT_IMPORT.get(backendID.getValue());
+      LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_IMPORT.get(backendID.getValue());
       logError(message);
       return 1;
     }
@@ -1271,7 +1271,7 @@
         builder.append(" / ");
         builder.append(backend.getBaseDNs()[i].toNormalizedString());
       }
-      Message message = ERR_LDIFIMPORT_MISSING_CLEAR_BACKEND.get(
+      LocalizableMessage message = ERR_LDIFIMPORT_MISSING_CLEAR_BACKEND.get(
               builder.toString(), clearBackend.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -1286,14 +1286,14 @@
       }
       catch (DirectoryException de)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
             s, de.getMessageObject());
         logError(message);
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_DECODE_EXCLUDE_BASE.get(
             s, getExceptionMessage(e));
         logError(message);
         return 1;
@@ -1317,7 +1317,7 @@
         if (! Backend.handlesEntry(includeBranch, defaultIncludeBranches,
                                    excludeBranches))
         {
-          Message message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
+          LocalizableMessage message = ERR_LDIFIMPORT_INVALID_INCLUDE_BASE.get(
               includeBranch.toNormalizedString(), backendID.getValue());
           logError(message);
           return 1;
@@ -1337,7 +1337,7 @@
         File f = new File(pathname);
         if (!f.canRead())
         {
-          Message message = ERR_LDIFIMPORT_CANNOT_READ_FILE.get(pathname);
+          LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_READ_FILE.get(pathname);
           logError(message);
           badFileCount++;
         }
@@ -1368,14 +1368,14 @@
                             PATH_MAKELDIF_RESOURCE_DIR;
       TemplateFile tf = new TemplateFile(resourcePath, random);
 
-      ArrayList<Message> warnings = new ArrayList<Message>();
+      ArrayList<LocalizableMessage> warnings = new ArrayList<LocalizableMessage>();
       try
       {
         tf.parse(templateFile.getValue(), warnings);
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_PARSE_TEMPLATE_FILE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_PARSE_TEMPLATE_FILE.get(
             templateFile.getValue(), e.getMessage());
         logError(message);
         return 1;
@@ -1407,7 +1407,7 @@
       }
       catch(Exception e)
       {
-          Message msg = ERR_LDIFIMPORT_CANNOT_PARSE_THREAD_COUNT.get(
+          LocalizableMessage msg = ERR_LDIFIMPORT_CANNOT_PARSE_THREAD_COUNT.get(
                   threadCount.getValue(), e.getMessage());
           logError(msg);
           return 1;
@@ -1444,7 +1444,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_OPEN_REJECTS_FILE.get(
             rejectFile.getValue(), getExceptionMessage(e));
         logError(message);
         return 1;
@@ -1470,7 +1470,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_OPEN_SKIP_FILE.get(
             skipFile.getValue(), getExceptionMessage(e));
         logError(message);
         return 1;
@@ -1489,7 +1489,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        Message message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
         return 1;
@@ -1497,7 +1497,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_LDIFIMPORT_CANNOT_LOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       logError(message);
       return 1;
@@ -1523,7 +1523,7 @@
     }
     catch (DirectoryException de)
     {
-      Message message = null;
+      LocalizableMessage message = null;
       if (de.getResultCode() == ResultCode.CONSTRAINT_VIOLATION)
       {
         message =
@@ -1539,7 +1539,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDIFIMPORT_ERROR_DURING_IMPORT.get(getExceptionMessage(e));
       logError(message);
       retCode = 1;
@@ -1553,7 +1553,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        Message message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
         retCode = 1;
@@ -1561,7 +1561,7 @@
     }
     catch (Exception e)
     {
-      Message message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
+      LocalizableMessage message = WARN_LDIFIMPORT_CANNOT_UNLOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       logError(message);
       retCode = 1;
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/InstallDS.java b/opendj3-server-dev/src/server/org/opends/server/tools/InstallDS.java
index 14e4e67..a68b07a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/InstallDS.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/InstallDS.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 2011 profiq s.r.o.
  */
 package org.opends.server.tools;
@@ -45,7 +45,7 @@
 
 import javax.naming.ldap.LdapName;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.QuickSetupMessages;
 import org.opends.messages.ToolMessages;
 import org.opends.quicksetup.ApplicationException;
@@ -331,7 +331,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message =
+      LocalizableMessage message =
         ToolMessages.ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       println(message);
       return ErrorReturnCode.ERROR_UNEXPECTED.getReturnCode();
@@ -344,10 +344,10 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       println(message);
       println();
-      println(Message.raw(argParser.getUsage()));
+      println(LocalizableMessage.raw(argParser.getUsage()));
 
       return ErrorReturnCode.ERROR_USER_DATA.getReturnCode();
     }
@@ -604,13 +604,13 @@
         {
           if (!confirmAction(INFO_CLI_DO_YOU_WANT_TO_CONTINUE.get(), true))
           {
-            throw new InitializationException(Message.EMPTY, null);
+            throw new InitializationException(LocalizableMessage.EMPTY, null);
           }
         }
         catch (CLIException ce)
         {
           LOG.log(Level.SEVERE, "Unexpected error: "+ce, ce);
-          throw new InitializationException(Message.EMPTY, null);
+          throw new InitializationException(LocalizableMessage.EMPTY, null);
         }
       }
       else
@@ -686,7 +686,7 @@
   private void initializeUserDataWithParser(UserData uData)
   throws UserDataException
   {
-    List<Message> errorMessages = new LinkedList<Message>();
+    List<LocalizableMessage> errorMessages = new LinkedList<LocalizableMessage>();
     uData.setQuiet(isQuiet());
     uData.setVerbose(isVerbose());
     uData.setConnectTimeout(getConnectTimeout());
@@ -703,7 +703,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
         ERR_INSTALLDS_CANNOT_PARSE_DN.get(dmDN, e.getMessage());
       errorMessages.add(message);
     }
@@ -724,7 +724,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
           ERR_INSTALLDS_CANNOT_PARSE_DN.get(baseDN, e.getMessage());
         errorMessages.add(message);
       }
@@ -907,7 +907,7 @@
     }
   }
 
-  private void checkCanUsePort(int port, List<Message> errorMessages)
+  private void checkCanUsePort(int port, List<LocalizableMessage> errorMessages)
   {
     if (!SetupUtils.canUseAsPort(port))
     {
@@ -915,7 +915,7 @@
     }
   }
 
-  private Message getCannotBindErrorMessage(int port)
+  private LocalizableMessage getCannotBindErrorMessage(int port)
   {
     if (SetupUtils.isPriviledgedPort(port))
     {
@@ -1016,7 +1016,7 @@
    * @throws UserDataException if something went wrong checking the data.
    */
   private LinkedList<String> promptIfRequiredForDNs(StringArgument arg,
-      Message promptMsg, boolean includeLineBreak) throws UserDataException
+      LocalizableMessage promptMsg, boolean includeLineBreak) throws UserDataException
   {
     LinkedList<String> dns = new LinkedList<String>();
 
@@ -1069,7 +1069,7 @@
         catch (Exception e)
         {
           toRemove.add(dn);
-          Message message = prompted ? ERR_INSTALLDS_INVALID_DN_RESPONSE.get() :
+          LocalizableMessage message = prompted ? ERR_INSTALLDS_INVALID_DN_RESPONSE.get() :
             ERR_INSTALLDS_CANNOT_PARSE_DN.get(dn, e.getMessage());
           println(message);
         }
@@ -1136,7 +1136,7 @@
    * @return a valid port number.
    */
   private int promptIfRequiredForPortData(IntegerArgument portArg,
-      Message promptMsg, Collection<Integer> usedPorts,
+      LocalizableMessage promptMsg, Collection<Integer> usedPorts,
       boolean includeLineBreak)
   {
     int portNumber = -1;
@@ -1184,7 +1184,7 @@
         {
           if (!SetupUtils.canUseAsPort(portNumber))
           {
-            Message message = getCannotBindErrorMessage(portNumber);
+            LocalizableMessage message = getCannotBindErrorMessage(portNumber);
             if (prompted || includeLineBreak)
             {
               println();
@@ -1201,7 +1201,7 @@
         {
           if (usedPorts.contains(portNumber))
           {
-            Message message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
+            LocalizableMessage message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
                 String.valueOf(portNumber));
             println(message);
             println();
@@ -1367,7 +1367,7 @@
       {
         println();
         println(ae.getMessageObject());
-        Message message = INFO_INSTALLDS_PROMPT_NUM_ENTRIES.get();
+        LocalizableMessage message = INFO_INSTALLDS_PROMPT_NUM_ENTRIES.get();
         numUsers = promptForInteger(message, 2000, 0, Integer.MAX_VALUE);
       }
       dataOptions = NewSuffixOptions.createAutomaticallyGenerated(baseDNs,
@@ -1382,7 +1382,7 @@
 
       int[] indexes = {POPULATE_TYPE_BASE_ONLY, POPULATE_TYPE_LEAVE_EMPTY,
           POPULATE_TYPE_IMPORT_FROM_LDIF, POPULATE_TYPE_GENERATE_SAMPLE_DATA};
-      Message[] msgs = new Message[] {
+      LocalizableMessage[] msgs = new LocalizableMessage[] {
           INFO_INSTALLDS_POPULATE_OPTION_BASE_ONLY.get(),
           INFO_INSTALLDS_POPULATE_OPTION_LEAVE_EMPTY.get(),
           INFO_INSTALLDS_POPULATE_OPTION_IMPORT_LDIF.get(),
@@ -1399,7 +1399,7 @@
 
       if (lastResetPopulateOption == null)
       {
-        builder.setDefault(Message.raw(
+        builder.setDefault(LocalizableMessage.raw(
             String.valueOf(POPULATE_TYPE_BASE_ONLY)),
             MenuResult.success(POPULATE_TYPE_BASE_ONLY));
       }
@@ -1408,22 +1408,22 @@
         switch (lastResetPopulateOption)
         {
         case LEAVE_DATABASE_EMPTY:
-          builder.setDefault(Message.raw(
+          builder.setDefault(LocalizableMessage.raw(
               String.valueOf(POPULATE_TYPE_LEAVE_EMPTY)),
               MenuResult.success(POPULATE_TYPE_LEAVE_EMPTY));
           break;
         case IMPORT_FROM_LDIF_FILE:
-          builder.setDefault(Message.raw(
+          builder.setDefault(LocalizableMessage.raw(
               String.valueOf(POPULATE_TYPE_IMPORT_FROM_LDIF)),
               MenuResult.success(POPULATE_TYPE_IMPORT_FROM_LDIF));
           break;
         case IMPORT_AUTOMATICALLY_GENERATED_DATA:
-          builder.setDefault(Message.raw(
+          builder.setDefault(LocalizableMessage.raw(
               String.valueOf(POPULATE_TYPE_GENERATE_SAMPLE_DATA)),
               MenuResult.success(POPULATE_TYPE_GENERATE_SAMPLE_DATA));
           break;
         default:
-          builder.setDefault(Message.raw(
+          builder.setDefault(LocalizableMessage.raw(
               String.valueOf(POPULATE_TYPE_BASE_ONLY)),
               MenuResult.success(POPULATE_TYPE_BASE_ONLY));
         }
@@ -1455,7 +1455,7 @@
         List<String> importLDIFFiles = new LinkedList<String>();
         while (importLDIFFiles.isEmpty())
         {
-          Message message = INFO_INSTALLDS_PROMPT_IMPORT_FILE.get();
+          LocalizableMessage message = INFO_INSTALLDS_PROMPT_IMPORT_FILE.get();
           println();
           try
           {
@@ -1520,7 +1520,7 @@
       }
       else if (populateType == POPULATE_TYPE_GENERATE_SAMPLE_DATA)
       {
-        Message message = INFO_INSTALLDS_PROMPT_NUM_ENTRIES.get();
+        LocalizableMessage message = INFO_INSTALLDS_PROMPT_NUM_ENTRIES.get();
         int defaultValue;
         if (lastResetNumEntries == null)
         {
@@ -1675,7 +1675,7 @@
         final int PKCS12 = 4;
         final int PKCS11 = 5;
         int[] indexes = {SELF_SIGNED, JKS, JCEKS, PKCS12, PKCS11};
-        Message[] msgs = {
+        LocalizableMessage[] msgs = {
             INFO_INSTALLDS_CERT_OPTION_SELF_SIGNED.get(),
             INFO_INSTALLDS_CERT_OPTION_JKS.get(),
             INFO_INSTALLDS_CERT_OPTION_JCEKS.get(),
@@ -1694,7 +1694,7 @@
 
         if (lastResetCertType == null)
         {
-          builder.setDefault(Message.raw(String.valueOf(SELF_SIGNED)),
+          builder.setDefault(LocalizableMessage.raw(String.valueOf(SELF_SIGNED)),
             MenuResult.success(SELF_SIGNED));
         }
         else
@@ -1702,23 +1702,23 @@
           switch (lastResetCertType)
           {
           case JKS:
-            builder.setDefault(Message.raw(String.valueOf(JKS)),
+            builder.setDefault(LocalizableMessage.raw(String.valueOf(JKS)),
                 MenuResult.success(JKS));
             break;
           case JCEKS:
-            builder.setDefault(Message.raw(String.valueOf(JCEKS)),
+            builder.setDefault(LocalizableMessage.raw(String.valueOf(JCEKS)),
                 MenuResult.success(JCEKS));
             break;
           case PKCS11:
-            builder.setDefault(Message.raw(String.valueOf(PKCS11)),
+            builder.setDefault(LocalizableMessage.raw(String.valueOf(PKCS11)),
                 MenuResult.success(PKCS11));
             break;
           case PKCS12:
-            builder.setDefault(Message.raw(String.valueOf(PKCS12)),
+            builder.setDefault(LocalizableMessage.raw(String.valueOf(PKCS12)),
                 MenuResult.success(PKCS12));
             break;
           default:
-            builder.setDefault(Message.raw(String.valueOf(SELF_SIGNED)),
+            builder.setDefault(LocalizableMessage.raw(String.valueOf(SELF_SIGNED)),
                 MenuResult.success(SELF_SIGNED));
           }
         }
@@ -1804,7 +1804,7 @@
       else
       {
         println();
-        Message message = INFO_INSTALLDS_PROMPT_ENABLE_SERVICE.get();
+        LocalizableMessage message = INFO_INSTALLDS_PROMPT_ENABLE_SERVICE.get();
         try
         {
           boolean defaultValue = (lastResetEnableWindowsService == null) ?
@@ -1833,7 +1833,7 @@
     if (!argParser.doNotStartArg.isPresent())
     {
       println();
-      Message message = INFO_INSTALLDS_PROMPT_START_SERVER.get();
+      LocalizableMessage message = INFO_INSTALLDS_PROMPT_START_SERVER.get();
       try
       {
         boolean defaultValue = (lastResetStartServer == null) ?
@@ -1852,7 +1852,7 @@
   /**
    * Checks that the provided parameters are valid to access an existing
    * key store.  This method adds the encountered errors to the provided
-   * list of Message.  It also adds the alias (nicknames) found to the provided
+   * list of LocalizableMessage.  It also adds the alias (nicknames) found to the provided
    * list of String.
    * @param type the type of key store.
    * @param path the path of the key store.
@@ -1867,7 +1867,7 @@
   public static void checkCertificateInKeystore(
       SecurityOptions.CertificateType type,
       String path, String pwd, String certNickname,
-      Collection<Message> errorMessages, Collection<String> nicknameList)
+      Collection<LocalizableMessage> errorMessages, Collection<String> nicknameList)
   {
     boolean errorWithPath = false;
     if (type != SecurityOptions.CertificateType.PKCS11)
@@ -2031,7 +2031,7 @@
         pwd = null;
       }
     }
-    Message pathPrompt;
+    LocalizableMessage pathPrompt;
     String defaultPathValue;
 
     switch (type)
@@ -2072,7 +2072,7 @@
       throw new IllegalStateException(
           "Called promptIfRequiredCertificate with invalid type: "+type);
     }
-    List<Message> errorMessages = new LinkedList<Message>();
+    List<LocalizableMessage> errorMessages = new LinkedList<LocalizableMessage>();
     LinkedList<String> keystoreAliases = new LinkedList<String>();
     boolean firstTry = true;
     int nPasswordPrompts = 0;
@@ -2189,21 +2189,21 @@
    * to a problem with the key store path and <CODE>false</CODE> otherwise.
    */
   public static boolean containsKeyStorePathErrorMessage(
-      Collection<Message> msgs)
+      Collection<LocalizableMessage> msgs)
   {
     boolean found = false;
-    for (Message msg : msgs)
+    for (LocalizableMessage msg : msgs)
     {
-      if (msg.getDescriptor().equals(INFO_KEYSTORE_PATH_DOES_NOT_EXIST) ||
-          msg.getDescriptor().equals(INFO_KEYSTORE_PATH_NOT_A_FILE) ||
-          msg.getDescriptor().equals(INFO_JKS_KEYSTORE_DOES_NOT_EXIST) ||
-          msg.getDescriptor().equals(INFO_JCEKS_KEYSTORE_DOES_NOT_EXIST) ||
-          msg.getDescriptor().equals(INFO_PKCS12_KEYSTORE_DOES_NOT_EXIST) ||
-          msg.getDescriptor().equals(INFO_PKCS11_KEYSTORE_DOES_NOT_EXIST) ||
-          msg.getDescriptor().equals(INFO_ERROR_ACCESSING_JKS_KEYSTORE) ||
-          msg.getDescriptor().equals(INFO_ERROR_ACCESSING_JCEKS_KEYSTORE) ||
-          msg.getDescriptor().equals(INFO_ERROR_ACCESSING_PKCS12_KEYSTORE) ||
-          msg.getDescriptor().equals(INFO_ERROR_ACCESSING_PKCS11_KEYSTORE))
+      if (StaticUtils.hasDescriptor(msg, INFO_KEYSTORE_PATH_DOES_NOT_EXIST) ||
+          StaticUtils.hasDescriptor(msg, INFO_KEYSTORE_PATH_NOT_A_FILE) ||
+          StaticUtils.hasDescriptor(msg, INFO_JKS_KEYSTORE_DOES_NOT_EXIST) ||
+          StaticUtils.hasDescriptor(msg, INFO_JCEKS_KEYSTORE_DOES_NOT_EXIST) ||
+          StaticUtils.hasDescriptor(msg, INFO_PKCS12_KEYSTORE_DOES_NOT_EXIST) ||
+          StaticUtils.hasDescriptor(msg, INFO_PKCS11_KEYSTORE_DOES_NOT_EXIST) ||
+          StaticUtils.hasDescriptor(msg, INFO_ERROR_ACCESSING_JKS_KEYSTORE) ||
+          StaticUtils.hasDescriptor(msg, INFO_ERROR_ACCESSING_JCEKS_KEYSTORE) ||
+          StaticUtils.hasDescriptor(msg, INFO_ERROR_ACCESSING_PKCS12_KEYSTORE) ||
+          StaticUtils.hasDescriptor(msg, INFO_ERROR_ACCESSING_PKCS11_KEYSTORE))
       {
         found = true;
         break;
@@ -2220,20 +2220,20 @@
    * to a problem with the key store password and <CODE>false</CODE> otherwise.
    */
   public static boolean containsKeyStorePasswordErrorMessage(
-      Collection<Message> msgs)
+      Collection<LocalizableMessage> msgs)
   {
     boolean found = false;
-    for (Message msg : msgs)
+    for (LocalizableMessage msg : msgs)
     {
-      if (msg.getDescriptor().equals(INFO_JKS_KEYSTORE_DOES_NOT_EXIST) ||
-          msg.getDescriptor().equals(INFO_JCEKS_KEYSTORE_DOES_NOT_EXIST) ||
-          msg.getDescriptor().equals(INFO_PKCS12_KEYSTORE_DOES_NOT_EXIST) ||
-          msg.getDescriptor().equals(INFO_PKCS11_KEYSTORE_DOES_NOT_EXIST) ||
-          msg.getDescriptor().equals(INFO_ERROR_ACCESSING_JKS_KEYSTORE) ||
-          msg.getDescriptor().equals(INFO_ERROR_ACCESSING_JCEKS_KEYSTORE) ||
-          msg.getDescriptor().equals(INFO_ERROR_ACCESSING_PKCS12_KEYSTORE) ||
-          msg.getDescriptor().equals(INFO_ERROR_ACCESSING_PKCS11_KEYSTORE) ||
-          msg.getDescriptor().equals(INFO_ERROR_ACCESSING_KEYSTORE_JDK_BUG))
+      if (StaticUtils.hasDescriptor(msg, INFO_JKS_KEYSTORE_DOES_NOT_EXIST) ||
+          StaticUtils.hasDescriptor(msg, INFO_JCEKS_KEYSTORE_DOES_NOT_EXIST) ||
+          StaticUtils.hasDescriptor(msg, INFO_PKCS12_KEYSTORE_DOES_NOT_EXIST) ||
+          StaticUtils.hasDescriptor(msg, INFO_PKCS11_KEYSTORE_DOES_NOT_EXIST) ||
+          StaticUtils.hasDescriptor(msg, INFO_ERROR_ACCESSING_JKS_KEYSTORE) ||
+          StaticUtils.hasDescriptor(msg, INFO_ERROR_ACCESSING_JCEKS_KEYSTORE) ||
+          StaticUtils.hasDescriptor(msg, INFO_ERROR_ACCESSING_PKCS12_KEYSTORE) ||
+          StaticUtils.hasDescriptor(msg, INFO_ERROR_ACCESSING_PKCS11_KEYSTORE) ||
+          StaticUtils.hasDescriptor(msg, INFO_ERROR_ACCESSING_KEYSTORE_JDK_BUG))
       {
         found = true;
         break;
@@ -2251,13 +2251,13 @@
    * otherwise.
    */
   public static boolean containsCertNicknameErrorMessage(
-      Collection<Message> msgs)
+      Collection<LocalizableMessage> msgs)
   {
     boolean found = false;
-    for (Message msg : msgs)
+    for (LocalizableMessage msg : msgs)
     {
-      if (msg.getDescriptor().equals(ERR_INSTALLDS_CERTNICKNAME_NOT_FOUND) ||
-          msg.getDescriptor().equals(ERR_INSTALLDS_MUST_PROVIDE_CERTNICKNAME))
+      if (StaticUtils.hasDescriptor(msg, ERR_INSTALLDS_CERTNICKNAME_NOT_FOUND) ||
+          StaticUtils.hasDescriptor(msg, ERR_INSTALLDS_MUST_PROVIDE_CERTNICKNAME))
       {
         found = true;
         break;
@@ -2273,10 +2273,9 @@
    * @return <CODE>true</CODE> if the error message provided corresponds to a
    * problem with the password tries and <CODE>false</CODE> otherwise.
    */
-  private boolean isPasswordTriesError(Message msg)
+  private boolean isPasswordTriesError(LocalizableMessage msg)
   {
-    return msg.getDescriptor().equals(
-        ERR_INSTALLDS_TOO_MANY_KEYSTORE_PASSWORD_TRIES);
+    return StaticUtils.hasDescriptor(msg, ERR_INSTALLDS_TOO_MANY_KEYSTORE_PASSWORD_TRIES);
   }
 
   /**
@@ -2297,7 +2296,7 @@
    *
    * @return  The <CODE>int</CODE> value read from the user input.
    */
-  private int promptForInteger(Message prompt, Integer defaultValue,
+  private int promptForInteger(LocalizableMessage prompt, Integer defaultValue,
                                       Integer lowerBound, Integer upperBound)
   {
     int returnValue = -1;
@@ -2317,7 +2316,7 @@
       {
         if (defaultValue == null)
         {
-          Message message = ERR_INSTALLDS_INVALID_INTEGER_RESPONSE.get();
+          LocalizableMessage message = ERR_INSTALLDS_INVALID_INTEGER_RESPONSE.get();
           println(message);
           println();
         }
@@ -2333,14 +2332,14 @@
           int intValue = Integer.parseInt(s);
           if ((lowerBound != null) && (intValue < lowerBound))
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_INSTALLDS_INTEGER_BELOW_LOWER_BOUND.get(lowerBound);
             println(message);
             println();
           }
           else if ((upperBound != null) && (intValue > upperBound))
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_INSTALLDS_INTEGER_ABOVE_UPPER_BOUND.get(upperBound);
             println(message);
             println();
@@ -2352,7 +2351,7 @@
         }
         catch (NumberFormatException nfe)
         {
-          Message message = ERR_INSTALLDS_INVALID_INTEGER_RESPONSE.get();
+          LocalizableMessage message = ERR_INSTALLDS_INVALID_INTEGER_RESPONSE.get();
           println(message);
           println();
         }
@@ -2400,7 +2399,7 @@
     println();
     println();
     println(INFO_INSTALLDS_SUMMARY.get());
-    Message[] labels =
+    LocalizableMessage[] labels =
     {
         INFO_SERVER_PORT_LABEL.get(),
         INFO_ADMIN_CONNECTOR_PORT_LABEL.get(),
@@ -2412,18 +2411,18 @@
 
     int jmxPort = uData.getServerJMXPort();
 
-    Message[] values =
+    LocalizableMessage[] values =
     {
-        Message.raw(String.valueOf(uData.getServerPort())),
-        Message.raw(String.valueOf(uData.getAdminConnectorPort())),
-        Message.raw(jmxPort != -1 ? String.valueOf(jmxPort) : null),
-        Message.raw(
+        LocalizableMessage.raw(String.valueOf(uData.getServerPort())),
+        LocalizableMessage.raw(String.valueOf(uData.getAdminConnectorPort())),
+        LocalizableMessage.raw(jmxPort != -1 ? String.valueOf(jmxPort) : null),
+        LocalizableMessage.raw(
             Utils.getSecurityOptionsString(uData.getSecurityOptions(), false)),
-        Message.raw(uData.getDirectoryManagerDn()),
-        Message.raw(Utils.getDataDisplayString(uData)),
+        LocalizableMessage.raw(uData.getDirectoryManagerDn()),
+        LocalizableMessage.raw(Utils.getDataDisplayString(uData)),
     };
     int maxWidth = 0;
-    for (Message l : labels)
+    for (LocalizableMessage l : labels)
     {
       maxWidth = Math.max(maxWidth, l.length());
     }
@@ -2433,7 +2432,7 @@
       StringBuilder sb = new StringBuilder();
       if (values[i] != null)
       {
-        Message l = labels[i];
+        LocalizableMessage l = labels[i];
         sb.append(l.toString()).append(" ");
 
         String[] lines = values[i].toString().split(Constants.LINE_SEPARATOR);
@@ -2454,7 +2453,7 @@
             }
           }
           sb.append(lines[j]);
-          println(Message.raw(sb));
+          println(LocalizableMessage.raw(sb));
           sb = new StringBuilder();
         }
       }
@@ -2490,7 +2489,7 @@
     println(INFO_INSTALL_SETUP_EQUIVALENT_COMMAND_LINE.get());
     println();
     ArrayList<String> cmd = Utils.getSetupEquivalentCommandLine(uData);
-    println(Message.raw(
+    println(LocalizableMessage.raw(
         Utils.getFormattedEquivalentCommandLine(cmd, formatter)));
   }
 
@@ -2508,7 +2507,7 @@
     println();
     println();
 
-    Message[] msgs = new Message[] {
+    LocalizableMessage[] msgs = new LocalizableMessage[] {
         INFO_INSTALLDS_CONFIRM_INSTALL.get(),
         INFO_INSTALLDS_PROVIDE_DATA_AGAIN.get(),
         INFO_INSTALLDS_PRINT_EQUIVALENT_COMMAND_LINE.get(),
@@ -2525,7 +2524,7 @@
       i++;
     }
 
-    builder.setDefault(Message.raw(
+    builder.setDefault(LocalizableMessage.raw(
             String.valueOf(ConfirmCode.CONTINUE.getReturnCode())),
             MenuResult.success(ConfirmCode.CONTINUE));
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/InstallDSArgumentParser.java b/opendj3-server-dev/src/server/org/opends/server/tools/InstallDSArgumentParser.java
index a0deec4..f57d3d6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/InstallDSArgumentParser.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/InstallDSArgumentParser.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.tools;
 
@@ -37,7 +37,7 @@
 import java.util.logging.Logger;
 
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.UserData;
@@ -432,7 +432,7 @@
   @Override()
   public void parseArguments(String[] args) throws ArgumentException
   {
-    LinkedHashSet<Message> errorMessages = new LinkedHashSet<Message>();
+    LinkedHashSet<LocalizableMessage> errorMessages = new LinkedHashSet<LocalizableMessage>();
     try
     {
       super.parseArguments(args);
@@ -452,7 +452,7 @@
 
       if (errorMessages.size() > 0)
       {
-        Message message = ERR_CANNOT_INITIALIZE_ARGS.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(
             Utils.getMessageFromCollection(errorMessages,
                 Constants.LINE_SEPARATOR));
         throw new ArgumentException(message);
@@ -505,12 +505,12 @@
    * messages describing the problems encountered during the execution of the
    * checking.
    */
-  private void checkServerPassword(Collection<Message> errorMessages)
+  private void checkServerPassword(Collection<LocalizableMessage> errorMessages)
   {
     if (directoryManagerPwdStringArg.isPresent() &&
         directoryManagerPwdFileArg.isPresent())
     {
-      Message message = ERR_INSTALLDS_TWO_CONFLICTING_ARGUMENTS.get(
+      LocalizableMessage message = ERR_INSTALLDS_TWO_CONFLICTING_ARGUMENTS.get(
           directoryManagerPwdStringArg.getLongIdentifier(),
           directoryManagerPwdFileArg.getLongIdentifier());
       errorMessages.add(message);
@@ -519,7 +519,7 @@
     if (noPromptArg.isPresent() && !directoryManagerPwdStringArg.isPresent() &&
         !directoryManagerPwdFileArg.isPresent())
     {
-      Message message = ERR_INSTALLDS_NO_ROOT_PASSWORD.get(
+      LocalizableMessage message = ERR_INSTALLDS_NO_ROOT_PASSWORD.get(
           directoryManagerPwdStringArg.getLongIdentifier(),
           directoryManagerPwdFileArg.getLongIdentifier());
       errorMessages.add(message);
@@ -533,7 +533,7 @@
    * messages describing the problems encountered during the execution of the
    * checking.
    */
-  private void checkProvidedPorts(Collection<Message> errorMessages)
+  private void checkProvidedPorts(Collection<LocalizableMessage> errorMessages)
   {
     /**
      * Check that the provided ports do not match.
@@ -545,7 +545,7 @@
 
       if (ports.contains(adminConnectorPortArg.getIntValue()))
       {
-        Message message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
+        LocalizableMessage message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
             String.valueOf(adminConnectorPortArg.getIntValue()));
         errorMessages.add(message);
       }
@@ -558,7 +558,7 @@
       {
         if (ports.contains(jmxPortArg.getIntValue()))
         {
-          Message message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
+          LocalizableMessage message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
                   String.valueOf(jmxPortArg.getIntValue()));
           errorMessages.add(message);
         }
@@ -571,7 +571,7 @@
       {
         if (ports.contains(ldapsPortArg.getIntValue()))
         {
-          Message message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
+          LocalizableMessage message = ERR_CONFIGDS_PORT_ALREADY_SPECIFIED.get(
                   String.valueOf(ldapsPortArg.getIntValue()));
           errorMessages.add(message);
         }
@@ -594,21 +594,21 @@
    * messages describing the problems encountered during the execution of the
    * checking.
    */
-  private void checkImportDataArguments(Collection<Message> errorMessages)
+  private void checkImportDataArguments(Collection<LocalizableMessage> errorMessages)
   {
     //  Make sure that the user didn't provide conflicting arguments.
     if (addBaseEntryArg.isPresent())
     {
       if (importLDIFArg.isPresent())
       {
-        Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+        LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
                 addBaseEntryArg.getLongIdentifier(),
                 importLDIFArg.getLongIdentifier());
         errorMessages.add(message);
       }
       else if (sampleDataArg.isPresent())
       {
-        Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+        LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
                 addBaseEntryArg.getLongIdentifier(),
                 sampleDataArg.getLongIdentifier());
         errorMessages.add(message);
@@ -616,7 +616,7 @@
     }
     else if (importLDIFArg.isPresent() && sampleDataArg.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               importLDIFArg.getLongIdentifier(),
               sampleDataArg.getLongIdentifier());
       errorMessages.add(message);
@@ -624,14 +624,14 @@
 
     if (rejectedImportFileArg.isPresent() && addBaseEntryArg.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           addBaseEntryArg.getLongIdentifier(),
           rejectedImportFileArg.getLongIdentifier());
       errorMessages.add(message);
     }
     else if (rejectedImportFileArg.isPresent() && sampleDataArg.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           rejectedImportFileArg.getLongIdentifier(),
           sampleDataArg.getLongIdentifier());
       errorMessages.add(message);
@@ -639,14 +639,14 @@
 
     if (skippedImportFileArg.isPresent() && addBaseEntryArg.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           addBaseEntryArg.getLongIdentifier(),
           skippedImportFileArg.getLongIdentifier());
       errorMessages.add(message);
     }
     else if (skippedImportFileArg.isPresent() && sampleDataArg.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           skippedImportFileArg.getLongIdentifier(),
           sampleDataArg.getLongIdentifier());
       errorMessages.add(message);
@@ -676,7 +676,7 @@
    * messages describing the problems encountered during the execution of the
    * checking.
    */
-  private void checkSecurityArguments(Collection<Message> errorMessages)
+  private void checkSecurityArguments(Collection<LocalizableMessage> errorMessages)
   {
     boolean certificateRequired = ldapsPortArg.isPresent() ||
     enableStartTLSArg.isPresent();
@@ -723,7 +723,7 @@
         if (keyStorePasswordArg.isPresent() &&
             keyStorePasswordFileArg.isPresent())
         {
-          Message message = ERR_INSTALLDS_TWO_CONFLICTING_ARGUMENTS.get(
+          LocalizableMessage message = ERR_INSTALLDS_TWO_CONFLICTING_ARGUMENTS.get(
               keyStorePasswordArg.getLongIdentifier(),
               keyStorePasswordFileArg.getLongIdentifier());
           errorMessages.add(message);
@@ -733,7 +733,7 @@
         if (noPromptArg.isPresent() && !keyStorePasswordArg.isPresent() &&
             !keyStorePasswordFileArg.isPresent())
         {
-          Message message = ERR_INSTALLDS_NO_KEYSTORE_PASSWORD.get(
+          LocalizableMessage message = ERR_INSTALLDS_NO_KEYSTORE_PASSWORD.get(
               keyStorePasswordArg.getLongIdentifier(),
               keyStorePasswordFileArg.getLongIdentifier());
           errorMessages.add(message);
@@ -742,7 +742,7 @@
       if (noPromptArg.isPresent() && !ldapsPortArg.isPresent() &&
           !enableStartTLSArg.isPresent())
       {
-        Message message = ERR_INSTALLDS_SSL_OR_STARTTLS_REQUIRED.get(
+        LocalizableMessage message = ERR_INSTALLDS_SSL_OR_STARTTLS_REQUIRED.get(
             ldapsPortArg.getLongIdentifier(),
             enableStartTLSArg.getLongIdentifier());
         errorMessages.add(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/JavaPropertiesTool.java b/opendj3-server-dev/src/server/org/opends/server/tools/JavaPropertiesTool.java
index 4d89ff8..6c3e469 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/JavaPropertiesTool.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/JavaPropertiesTool.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.tools;
@@ -43,7 +43,7 @@
 import java.util.Enumeration;
 import java.util.Properties;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.ToolMessages;
 import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.util.Utils;
@@ -202,7 +202,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message =
+      LocalizableMessage message =
         ToolMessages.ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       println(message);
       return ErrorReturnCode.ERROR_UNEXPECTED.getReturnCode();
@@ -215,10 +215,10 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       println(message);
       println();
-      println(Message.raw(argParser.getUsage()));
+      println(LocalizableMessage.raw(argParser.getUsage()));
 
       return ErrorReturnCode.ERROR_USER_DATA.getReturnCode();
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/JavaPropertiesToolArgumentParser.java b/opendj3-server-dev/src/server/org/opends/server/tools/JavaPropertiesToolArgumentParser.java
index bcd47fb..ed45e50 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/JavaPropertiesToolArgumentParser.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/JavaPropertiesToolArgumentParser.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools;
 
@@ -31,7 +32,7 @@
 import java.io.File;
 import java.util.LinkedHashSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.Installation;
 import org.opends.quicksetup.util.Utils;
@@ -111,7 +112,7 @@
   @Override()
   public void parseArguments(String[] args) throws ArgumentException
   {
-    LinkedHashSet<Message> errorMessages = new LinkedHashSet<Message>();
+    LinkedHashSet<LocalizableMessage> errorMessages = new LinkedHashSet<LocalizableMessage>();
     try
     {
       super.parseArguments(args);
@@ -144,7 +145,7 @@
       }
       if (errorMessages.size() > 0)
       {
-        Message message = ERR_CANNOT_INITIALIZE_ARGS.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(
             Utils.getMessageFromCollection(errorMessages,
                 Constants.LINE_SEPARATOR));
         throw new ArgumentException(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPAuthenticationHandler.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPAuthenticationHandler.java
index 8d7323d..0d777b1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPAuthenticationHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPAuthenticationHandler.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.tools;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -209,7 +209,7 @@
    *          specified SASL mechanism, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,Message> getSASLProperties(
+  public static LinkedHashMap<String,LocalizableMessage> getSASLProperties(
           String mechanism)
   {
     String upperName = toUpperCase(mechanism);
@@ -310,14 +310,14 @@
     }
     catch (IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_SEND_SIMPLE_BIND.get(getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_SEND_SIMPLE_BIND.get(getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
                                 message, e);
@@ -331,7 +331,7 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                   message);
@@ -339,28 +339,28 @@
     }
     catch (IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, ae);
     }
     catch (LDAPException le)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, le);
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -392,21 +392,21 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+          LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.
               get(extendedResponse.getResultCode(),
                   extendedResponse.getErrorMessage());
           throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+          LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
               String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                     message);
         }
 
       default:
-        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+        LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
             String.valueOf(responseMessage.getProtocolOp()));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
@@ -425,7 +425,7 @@
 
     // FIXME -- Add support for referrals.
 
-    Message message = ERR_LDAPAUTH_SIMPLE_BIND_FAILED.get();
+    LocalizableMessage message = ERR_LDAPAUTH_SIMPLE_BIND_FAILED.get();
     throw new LDAPException(resultCode, bindResponse.getErrorMessage(),
                             message, bindResponse.getMatchedDN(), null);
   }
@@ -479,7 +479,7 @@
 
     if ((mechanism == null) || (mechanism.length() == 0))
     {
-      Message message = ERR_LDAPAUTH_NO_SASL_MECHANISM.get();
+      LocalizableMessage message = ERR_LDAPAUTH_NO_SASL_MECHANISM.get();
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
     }
@@ -520,7 +520,7 @@
     }
     else
     {
-      Message message = ERR_LDAPAUTH_UNSUPPORTED_SASL_MECHANISM.get(mechanism);
+      LocalizableMessage message = ERR_LDAPAUTH_UNSUPPORTED_SASL_MECHANISM.get(mechanism);
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_AUTH_UNKNOWN, message);
     }
@@ -584,7 +584,7 @@
 
             if (iterator.hasNext())
             {
-              Message message = ERR_LDAPAUTH_TRACE_SINGLE_VALUED.get();
+              LocalizableMessage message = ERR_LDAPAUTH_TRACE_SINGLE_VALUED.get();
               throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                         message);
             }
@@ -592,7 +592,7 @@
         }
         else
         {
-          Message message = ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(
+          LocalizableMessage message = ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(
               name, SASL_MECHANISM_ANONYMOUS);
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                     message);
@@ -625,14 +625,14 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
           SASL_MECHANISM_ANONYMOUS, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
           SASL_MECHANISM_ANONYMOUS, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
                                 message, e);
@@ -646,7 +646,7 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                   message);
@@ -654,28 +654,28 @@
     }
     catch (IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, ae);
     }
     catch (LDAPException le)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, le);
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -707,21 +707,21 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+          LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.
               get(extendedResponse.getResultCode(),
                   extendedResponse.getErrorMessage());
           throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+          LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
               String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                     message);
         }
 
       default:
-        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+        LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
             String.valueOf(responseMessage.getProtocolOp()));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                   message);
@@ -740,7 +740,7 @@
 
     // FIXME -- Add support for referrals.
 
-    Message message =
+    LocalizableMessage message =
         ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_ANONYMOUS);
     throw new LDAPException(resultCode, bindResponse.getErrorMessage(),
                             message, bindResponse.getMatchedDN(), null);
@@ -757,10 +757,10 @@
    *          SASL ANONYMOUS bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String, Message> getSASLAnonymousProperties()
+  public static LinkedHashMap<String, LocalizableMessage> getSASLAnonymousProperties()
   {
-    LinkedHashMap<String,Message> properties =
-         new LinkedHashMap<String,Message>(1);
+    LinkedHashMap<String,LocalizableMessage> properties =
+         new LinkedHashMap<String,LocalizableMessage>(1);
 
     properties.put(SASL_PROPERTY_TRACE,
                    INFO_LDAPAUTH_PROPERTY_DESCRIPTION_TRACE.get());
@@ -809,7 +809,7 @@
     // properties are allowed.
     if ((saslProperties == null) || saslProperties.isEmpty())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_NO_SASL_PROPERTIES.get(SASL_MECHANISM_CRAM_MD5);
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
@@ -831,7 +831,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -839,7 +839,7 @@
       }
       else
       {
-        Message message = ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(
+        LocalizableMessage message = ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(
             name, SASL_MECHANISM_CRAM_MD5);
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
@@ -850,7 +850,7 @@
     // Make sure that the authID was provided.
     if ((authID == null) || (authID.length() == 0))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_SASL_AUTHID_REQUIRED.get(SASL_MECHANISM_CRAM_MD5);
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
@@ -881,14 +881,14 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
                                 message, e);
@@ -902,7 +902,7 @@
       responseMessage1 = reader.readMessage();
       if (responseMessage1 == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                   message);
@@ -910,28 +910,28 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, ae);
     }
     catch (LDAPException le)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, le);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -954,21 +954,21 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+          LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.
               get(extendedResponse.getResultCode(),
                   extendedResponse.getErrorMessage());
           throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+          LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
               String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                     message);
         }
 
       default:
-        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+        LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
             String.valueOf(responseMessage1.getProtocolOp()));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
@@ -982,13 +982,13 @@
     int resultCode1 = bindResponse1.getResultCode();
     if (resultCode1 != LDAPResultCode.SASL_BIND_IN_PROGRESS)
     {
-      Message errorMessage = bindResponse1.getErrorMessage();
+      LocalizableMessage errorMessage = bindResponse1.getErrorMessage();
       if (errorMessage == null)
       {
-        errorMessage = Message.EMPTY;
+        errorMessage = LocalizableMessage.EMPTY;
       }
 
-      Message message = ERR_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE.
+      LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE.
           get(SASL_MECHANISM_CRAM_MD5, resultCode1,
               LDAPResultCode.toString(resultCode1), errorMessage);
       throw new LDAPException(resultCode1, errorMessage, message,
@@ -1001,7 +1001,7 @@
     ByteString serverChallenge = bindResponse1.getServerSASLCredentials();
     if (serverChallenge == null)
     {
-      Message message = ERR_LDAPAUTH_NO_CRAMMD5_SERVER_CREDENTIALS.get();
+      LocalizableMessage message = ERR_LDAPAUTH_NO_CRAMMD5_SERVER_CREDENTIALS.get();
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
@@ -1028,14 +1028,14 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -1049,7 +1049,7 @@
       responseMessage2 = reader.readMessage();
       if (responseMessage2 == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                   message);
@@ -1057,28 +1057,28 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, ae);
     }
     catch (LDAPException le)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, le);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
           SASL_MECHANISM_CRAM_MD5, getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -1110,21 +1110,21 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+          LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.
               get(extendedResponse.getResultCode(),
                   extendedResponse.getErrorMessage());
           throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+          LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
               String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                     message);
         }
 
       default:
-        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+        LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
             String.valueOf(responseMessage2.getProtocolOp()));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
@@ -1143,7 +1143,7 @@
 
     // FIXME -- Add support for referrals.
 
-    Message message =
+    LocalizableMessage message =
         ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_CRAM_MD5);
     throw new LDAPException(resultCode2, bindResponse2.getErrorMessage(),
                             message, bindResponse2.getMatchedDN(), null);
@@ -1178,7 +1178,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST.get(
+        LocalizableMessage message = ERR_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST.get(
             getExceptionMessage(e));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                 message, e);
@@ -1255,10 +1255,10 @@
    *          SASL CRAM-MD5 bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,Message> getSASLCRAMMD5Properties()
+  public static LinkedHashMap<String,LocalizableMessage> getSASLCRAMMD5Properties()
   {
-    LinkedHashMap<String,Message> properties =
-         new LinkedHashMap<String,Message>(1);
+    LinkedHashMap<String,LocalizableMessage> properties =
+         new LinkedHashMap<String,LocalizableMessage>(1);
 
     properties.put(SASL_PROPERTY_AUTHID,
                    INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID.get());
@@ -1312,7 +1312,7 @@
     // QoP, digest URI, and authzID are optional.
     if ((saslProperties == null) || saslProperties.isEmpty())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_NO_SASL_PROPERTIES.get(SASL_MECHANISM_DIGEST_MD5);
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
               message);
@@ -1334,7 +1334,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -1351,7 +1351,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_REALM_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_REALM_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -1367,7 +1367,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_QOP_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_QOP_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -1379,14 +1379,14 @@
           else if (qop.equals("auth-int") || qop.equals("auth-conf"))
           {
             // FIXME -- Add support for integrity and confidentiality.
-            Message message = ERR_LDAPAUTH_DIGESTMD5_QOP_NOT_SUPPORTED.get(qop);
+            LocalizableMessage message = ERR_LDAPAUTH_DIGESTMD5_QOP_NOT_SUPPORTED.get(qop);
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
           else
           {
             // This is an illegal value.
-            Message message = ERR_LDAPAUTH_DIGESTMD5_INVALID_QOP.get(qop);
+            LocalizableMessage message = ERR_LDAPAUTH_DIGESTMD5_INVALID_QOP.get(qop);
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -1402,7 +1402,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_DIGEST_URI_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_DIGEST_URI_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -1418,7 +1418,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_AUTHZID_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_AUTHZID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -1426,7 +1426,7 @@
       }
       else
       {
-        Message message = ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(
+        LocalizableMessage message = ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(
             name, SASL_MECHANISM_DIGEST_MD5);
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                 message);
@@ -1437,7 +1437,7 @@
     // Make sure that the authID was provided.
     if ((authID == null) || (authID.length() == 0))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_SASL_AUTHID_REQUIRED.get(SASL_MECHANISM_DIGEST_MD5);
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
               message);
@@ -1468,14 +1468,14 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_INITIAL_SASL_BIND.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
                                 message, e);
@@ -1489,7 +1489,7 @@
       responseMessage1 = reader.readMessage();
       if (responseMessage1 == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                   message);
@@ -1497,28 +1497,28 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, ae);
     }
     catch (LDAPException le)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, le);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_INITIAL_BIND_RESPONSE.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -1541,21 +1541,21 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+          LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.
               get(extendedResponse.getResultCode(),
                   extendedResponse.getErrorMessage());
           throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+          LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
               String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                     message);
         }
 
       default:
-        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+        LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
             String.valueOf(responseMessage1.getProtocolOp()));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
@@ -1569,13 +1569,13 @@
     int resultCode1 = bindResponse1.getResultCode();
     if (resultCode1 != LDAPResultCode.SASL_BIND_IN_PROGRESS)
     {
-      Message errorMessage = bindResponse1.getErrorMessage();
+      LocalizableMessage errorMessage = bindResponse1.getErrorMessage();
       if (errorMessage == null)
       {
-        errorMessage = Message.EMPTY;
+        errorMessage = LocalizableMessage.EMPTY;
       }
 
-      Message message = ERR_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE.
+      LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_INITIAL_BIND_RESPONSE.
           get(SASL_MECHANISM_DIGEST_MD5, resultCode1,
               LDAPResultCode.toString(resultCode1), errorMessage);
       throw new LDAPException(resultCode1, errorMessage, message,
@@ -1589,7 +1589,7 @@
          bindResponse1.getServerSASLCredentials();
     if (serverCredentials == null)
     {
-      Message message = ERR_LDAPAUTH_NO_DIGESTMD5_SERVER_CREDENTIALS.get();
+      LocalizableMessage message = ERR_LDAPAUTH_NO_DIGESTMD5_SERVER_CREDENTIALS.get();
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
@@ -1611,7 +1611,7 @@
       {
         // This is bad because we're not at the end of the string but we don't
         // have a name/value delimiter.
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_DIGESTMD5_INVALID_TOKEN_IN_CREDENTIALS.get(
                     credString, pos);
         throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
@@ -1629,7 +1629,7 @@
         // The value must be the string "utf-8".  If not, that's an error.
         if (! tokenValue.equalsIgnoreCase("utf-8"))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_LDAPAUTH_DIGESTMD5_INVALID_CHARSET.get(tokenValue);
           throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
         }
@@ -1677,7 +1677,7 @@
 
         if (! qopModes.contains(qop))
         {
-          Message message = ERR_LDAPAUTH_REQUESTED_QOP_NOT_SUPPORTED_BY_SERVER.
+          LocalizableMessage message = ERR_LDAPAUTH_REQUESTED_QOP_NOT_SUPPORTED_BY_SERVER.
               get(qop, tokenValue);
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                     message);
@@ -1696,7 +1696,7 @@
     // Make sure that the nonce was included in the response from the server.
     if (nonce == null)
     {
-      Message message = ERR_LDAPAUTH_DIGESTMD5_NO_NONCE.get();
+      LocalizableMessage message = ERR_LDAPAUTH_DIGESTMD5_NO_NONCE.get();
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
@@ -1723,7 +1723,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_DIGESTMD5_CANNOT_CREATE_RESPONSE_DIGEST.
+      LocalizableMessage message = ERR_LDAPAUTH_DIGESTMD5_CANNOT_CREATE_RESPONSE_DIGEST.
           get(getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -1784,14 +1784,14 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SECOND_SASL_BIND.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
                                 message, e);
@@ -1805,7 +1805,7 @@
       responseMessage2 = reader.readMessage();
       if (responseMessage2 == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                   message);
@@ -1813,28 +1813,28 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, ae);
     }
     catch (LDAPException le)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, le);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_SECOND_BIND_RESPONSE.get(
           SASL_MECHANISM_DIGEST_MD5, getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -1866,21 +1866,21 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+          LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.
               get(extendedResponse.getResultCode(),
                   extendedResponse.getErrorMessage());
           throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+          LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
               String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                     message);
         }
 
       default:
-        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+        LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
             String.valueOf(responseMessage2.getProtocolOp()));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
@@ -1894,7 +1894,7 @@
     {
       // FIXME -- Add support for referrals.
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_DIGEST_MD5);
       throw new LDAPException(resultCode2, bindResponse2.getErrorMessage(),
                               message, bindResponse2.getMatchedDN(),
@@ -1907,14 +1907,14 @@
     ByteString rspAuthCreds = bindResponse2.getServerSASLCredentials();
     if (rspAuthCreds == null)
     {
-      Message message = ERR_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS.get();
+      LocalizableMessage message = ERR_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS.get();
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
     String credStr = toLowerCase(rspAuthCreds.toString());
     if (! credStr.startsWith("rspauth="))
     {
-      Message message = ERR_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS.get();
+      LocalizableMessage message = ERR_LDAPAUTH_DIGESTMD5_NO_RSPAUTH_CREDS.get();
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
 
@@ -1926,7 +1926,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_DIGESTMD5_COULD_NOT_DECODE_RSPAUTH.get(
+      LocalizableMessage message = ERR_LDAPAUTH_DIGESTMD5_COULD_NOT_DECODE_RSPAUTH.get(
           getExceptionMessage(e));
       throw new LDAPException(LDAPResultCode.PROTOCOL_ERROR, message);
     }
@@ -1941,7 +1941,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_DIGESTMD5_COULD_NOT_CALCULATE_RSPAUTH.get(
+      LocalizableMessage message = ERR_LDAPAUTH_DIGESTMD5_COULD_NOT_CALCULATE_RSPAUTH.get(
           getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
@@ -1949,7 +1949,7 @@
 
     if (! Arrays.equals(serverRspAuth, clientRspAuth))
     {
-      Message message = ERR_LDAPAUTH_DIGESTMD5_RSPAUTH_MISMATCH.get();
+      LocalizableMessage message = ERR_LDAPAUTH_DIGESTMD5_RSPAUTH_MISMATCH.get();
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
@@ -2075,7 +2075,7 @@
             {
               // We found the closing quote before the end of the token.  This
               // is not fine.
-              Message message =
+              LocalizableMessage message =
                   ERR_LDAPAUTH_DIGESTMD5_INVALID_CLOSING_QUOTE_POS.get((pos-2));
               throw new LDAPException(LDAPResultCode.INVALID_CREDENTIALS,
                                       message);
@@ -2173,7 +2173,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST.get(
+        LocalizableMessage message = ERR_LDAPAUTH_CANNOT_INITIALIZE_MD5_DIGEST.get(
             getExceptionMessage(e));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                 message, e);
@@ -2376,10 +2376,10 @@
    *          SASL DIGEST-MD5 bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,Message> getSASLDigestMD5Properties()
+  public static LinkedHashMap<String,LocalizableMessage> getSASLDigestMD5Properties()
   {
-    LinkedHashMap<String,Message> properties =
-         new LinkedHashMap<String,Message>(5);
+    LinkedHashMap<String,LocalizableMessage> properties =
+         new LinkedHashMap<String,LocalizableMessage>(5);
 
     properties.put(SASL_PROPERTY_AUTHID,
                    INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID.get());
@@ -2431,7 +2431,7 @@
     // Make sure that no SASL properties were provided.
     if ((saslProperties != null) && (! saslProperties.isEmpty()))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_NO_ALLOWED_SASL_PROPERTIES.get(SASL_MECHANISM_EXTERNAL);
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
@@ -2452,14 +2452,14 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
           SASL_MECHANISM_EXTERNAL, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
           SASL_MECHANISM_EXTERNAL, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
                                 message, e);
@@ -2473,7 +2473,7 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                   message);
@@ -2481,28 +2481,28 @@
     }
     catch (IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, ae);
     }
     catch (LDAPException le)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, le);
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -2534,21 +2534,21 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+          LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.
               get(extendedResponse.getResultCode(),
                   extendedResponse.getErrorMessage());
           throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+          LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
               String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                     message);
         }
 
       default:
-        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+        LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
             String.valueOf(responseMessage.getProtocolOp()));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
@@ -2567,7 +2567,7 @@
 
     // FIXME -- Add support for referrals.
 
-    Message message =
+    LocalizableMessage message =
         ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_EXTERNAL);
     throw new LDAPException(resultCode, bindResponse.getErrorMessage(),
                             message, bindResponse.getMatchedDN(), null);
@@ -2584,10 +2584,10 @@
    *          SASL EXTERNAL bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,Message> getSASLExternalProperties()
+  public static LinkedHashMap<String,LocalizableMessage> getSASLExternalProperties()
   {
     // There are no properties for the SASL EXTERNAL mechanism.
-    return new LinkedHashMap<String,Message>(0);
+    return new LinkedHashMap<String,LocalizableMessage>(0);
   }
 
 
@@ -2648,7 +2648,7 @@
     // KDC, QoP, and realm are optional.
     if ((saslProperties == null) || saslProperties.isEmpty())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_NO_SASL_PROPERTIES.get(SASL_MECHANISM_GSSAPI);
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
@@ -2670,7 +2670,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -2686,7 +2686,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_AUTHZID_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_AUTHZID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -2702,7 +2702,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_KDC_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_KDC_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -2718,7 +2718,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_QOP_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_QOP_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -2731,7 +2731,7 @@
                    gssapiQoP.equals("auth-conf"))
           {
             // FIXME -- Add support for integrity and confidentiality.
-            Message message =
+            LocalizableMessage message =
                 ERR_LDAPAUTH_DIGESTMD5_QOP_NOT_SUPPORTED.get(gssapiQoP);
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
@@ -2739,7 +2739,7 @@
           else
           {
             // This is an illegal value.
-            Message message = ERR_LDAPAUTH_GSSAPI_INVALID_QOP.get(gssapiQoP);
+            LocalizableMessage message = ERR_LDAPAUTH_GSSAPI_INVALID_QOP.get(gssapiQoP);
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -2755,7 +2755,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_REALM_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_REALM_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -2763,7 +2763,7 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(name, SASL_MECHANISM_GSSAPI);
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
@@ -2774,7 +2774,7 @@
     // Make sure that the authID was provided.
     if ((gssapiAuthID == null) || (gssapiAuthID.length() == 0))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_SASL_AUTHID_REQUIRED.get(SASL_MECHANISM_GSSAPI);
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
@@ -2829,7 +2829,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_JAAS_CONFIG.get(
+      LocalizableMessage message = ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_JAAS_CONFIG.get(
           getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -2849,7 +2849,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_GSSAPI_LOCAL_AUTHENTICATION_FAILED.get(
+      LocalizableMessage message = ERR_LDAPAUTH_GSSAPI_LOCAL_AUTHENTICATION_FAILED.get(
           getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -2870,7 +2870,7 @@
         throw (LDAPException) e;
       }
 
-      Message message = ERR_LDAPAUTH_GSSAPI_REMOTE_AUTHENTICATION_FAILED.get(
+      LocalizableMessage message = ERR_LDAPAUTH_GSSAPI_REMOTE_AUTHENTICATION_FAILED.get(
               getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -2894,10 +2894,10 @@
    *          SASL EXTERNAL bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,Message> getSASLGSSAPIProperties()
+  public static LinkedHashMap<String,LocalizableMessage> getSASLGSSAPIProperties()
   {
-    LinkedHashMap<String,Message> properties =
-         new LinkedHashMap<String,Message>(4);
+    LinkedHashMap<String,LocalizableMessage> properties =
+         new LinkedHashMap<String,LocalizableMessage>(4);
 
     properties.put(SASL_PROPERTY_AUTHID,
                    INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID.get());
@@ -2953,7 +2953,7 @@
     // optional.
     if ((saslProperties == null) || saslProperties.isEmpty())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_NO_SASL_PROPERTIES.get(SASL_MECHANISM_PLAIN);
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
@@ -2975,7 +2975,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_AUTHID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -2991,7 +2991,7 @@
 
           if (iterator.hasNext())
           {
-            Message message = ERR_LDAPAUTH_AUTHZID_SINGLE_VALUED.get();
+            LocalizableMessage message = ERR_LDAPAUTH_AUTHZID_SINGLE_VALUED.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_PARAM_ERROR,
                                       message);
           }
@@ -2999,7 +2999,7 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_INVALID_SASL_PROPERTY.get(name, SASL_MECHANISM_PLAIN);
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
@@ -3010,7 +3010,7 @@
     // Make sure that at least the authID was provided.
     if ((authID == null) || (authID.length() == 0))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_SASL_AUTHID_REQUIRED.get(SASL_MECHANISM_PLAIN);
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_PARAM_ERROR, message);
@@ -3050,14 +3050,14 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
           SASL_MECHANISM_PLAIN, getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
           SASL_MECHANISM_PLAIN, getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
                                 message, e);
@@ -3071,7 +3071,7 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                   message);
@@ -3079,28 +3079,28 @@
     }
     catch (IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, ae);
     }
     catch (LDAPException le)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, le);
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -3132,21 +3132,21 @@
         if ((responseOID != null) &&
             responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
         {
-          Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+          LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.
               get(extendedResponse.getResultCode(),
                   extendedResponse.getErrorMessage());
           throw new LDAPException(extendedResponse.getResultCode(), message);
         }
         else
         {
-          Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+          LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
               String.valueOf(extendedResponse));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                     message);
         }
 
       default:
-        Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+        LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
             String.valueOf(responseMessage.getProtocolOp()));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
@@ -3165,7 +3165,7 @@
 
     // FIXME -- Add support for referrals.
 
-    Message message = ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_PLAIN);
+    LocalizableMessage message = ERR_LDAPAUTH_SASL_BIND_FAILED.get(SASL_MECHANISM_PLAIN);
     throw new LDAPException(resultCode, bindResponse.getErrorMessage(),
                             message, bindResponse.getMatchedDN(), null);
   }
@@ -3181,10 +3181,10 @@
    *          SASL PLAIN bind, mapped from the property names to their
    *          corresponding descriptions.
    */
-  public static LinkedHashMap<String,Message> getSASLPlainProperties()
+  public static LinkedHashMap<String,LocalizableMessage> getSASLPlainProperties()
   {
-    LinkedHashMap<String,Message> properties =
-         new LinkedHashMap<String,Message>(2);
+    LinkedHashMap<String,LocalizableMessage> properties =
+         new LinkedHashMap<String,LocalizableMessage>(2);
 
     properties.put(SASL_PROPERTY_AUTHID,
                    INFO_LDAPAUTH_PROPERTY_DESCRIPTION_AUTHID.get());
@@ -3215,7 +3215,7 @@
   {
     if (saslMechanism == null)
     {
-      Message message = ERR_LDAPAUTH_NONSASL_RUN_INVOCATION.get(getBacktrace());
+      LocalizableMessage message = ERR_LDAPAUTH_NONSASL_RUN_INVOCATION.get(getBacktrace());
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
     }
@@ -3239,7 +3239,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_SASL_CLIENT.get(
+        LocalizableMessage message = ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_SASL_CLIENT.get(
             getExceptionMessage(e));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -3257,7 +3257,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_INITIAL_CHALLENGE.
+          LocalizableMessage message = ERR_LDAPAUTH_GSSAPI_CANNOT_CREATE_INITIAL_CHALLENGE.
               get(getExceptionMessage(e));
           throw new ClientException(
                   LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
@@ -3283,14 +3283,14 @@
       }
       catch (IOException ioe)
       {
-        Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+        LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
             SASL_MECHANISM_GSSAPI, getExceptionMessage(ioe));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
       }
       catch (Exception e)
       {
-        Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+        LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
             SASL_MECHANISM_GSSAPI, getExceptionMessage(e));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
                                   message, e);
@@ -3304,7 +3304,7 @@
         responseMessage = reader.readMessage();
         if (responseMessage == null)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                     message);
@@ -3312,28 +3312,28 @@
       }
       catch (IOException ioe)
       {
-        Message message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
+        LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
             getExceptionMessage(ioe));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
       }
       catch (ASN1Exception ae)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(ae));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                   message, ae);
       }
       catch (LDAPException le)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(le));
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                   message, le);
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(getExceptionMessage(e));
         throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -3359,21 +3359,21 @@
           if ((responseOID != null) &&
               responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
           {
-            Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+            LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.
                 get(extendedResponse.getResultCode(),
                     extendedResponse.getErrorMessage());
             throw new LDAPException(extendedResponse.getResultCode(), message);
           }
           else
           {
-            Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+            LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
                 String.valueOf(extendedResponse));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                       message);
           }
 
         default:
-          Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+          LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
               String.valueOf(responseMessage.getProtocolOp()));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                     message);
@@ -3399,7 +3399,7 @@
             }
             catch (Exception e)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_LDAPAUTH_GSSAPI_CANNOT_VALIDATE_SERVER_CREDS.
                     get(getExceptionMessage(e));
               throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
@@ -3411,7 +3411,7 @@
           // Just to be sure, check that the login really is complete.
           if (! saslClient.isComplete())
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_LDAPAUTH_GSSAPI_UNEXPECTED_SUCCESS_RESPONSE.get();
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                       message);
@@ -3439,7 +3439,7 @@
           }
           catch (Exception e)
           {
-            Message message = ERR_LDAPAUTH_GSSAPI_CANNOT_VALIDATE_SERVER_CREDS.
+            LocalizableMessage message = ERR_LDAPAUTH_GSSAPI_CANNOT_VALIDATE_SERVER_CREDS.
                 get(getExceptionMessage(e));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                       message, e);
@@ -3461,14 +3461,14 @@
           }
           catch (IOException ioe)
           {
-            Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+            LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
                 SASL_MECHANISM_GSSAPI, getExceptionMessage(ioe));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                       message, ioe);
           }
           catch (Exception e)
           {
-            Message message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
+            LocalizableMessage message = ERR_LDAPAUTH_CANNOT_SEND_SASL_BIND.get(
                 SASL_MECHANISM_GSSAPI, getExceptionMessage(e));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
                                       message, e);
@@ -3481,7 +3481,7 @@
             responseMessage = reader.readMessage();
             if (responseMessage == null)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
               throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                         message);
@@ -3489,28 +3489,28 @@
           }
           catch (IOException ioe)
           {
-            Message message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
+            LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
                 getExceptionMessage(ioe));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                       message, ioe);
           }
           catch (ASN1Exception ae)
           {
-            Message message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
+            LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
                 getExceptionMessage(ae));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                       message, ae);
           }
           catch (LDAPException le)
           {
-            Message message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
+            LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
                 getExceptionMessage(le));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                       message, le);
           }
           catch (Exception e)
           {
-            Message message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
+            LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_BIND_RESPONSE.get(
                 getExceptionMessage(e));
             throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                       message, e);
@@ -3537,7 +3537,7 @@
               if ((responseOID != null) &&
                   responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
               {
-                Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.
+                LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.
                     get(extendedResponse.getResultCode(),
                         extendedResponse.getErrorMessage());
                 throw new LDAPException(extendedResponse.getResultCode(),
@@ -3545,14 +3545,14 @@
               }
               else
               {
-                Message message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
+                LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_EXTENDED_RESPONSE.get(
                     String.valueOf(extendedResponse));
                 throw new ClientException(
                                LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
               }
 
             default:
-              Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+              LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
                   String.valueOf(responseMessage.getProtocolOp()));
               throw new ClientException(LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
                                         message);
@@ -3561,7 +3561,7 @@
         else
         {
           // This is an error.
-          Message message = ERR_LDAPAUTH_GSSAPI_BIND_FAILED.get();
+          LocalizableMessage message = ERR_LDAPAUTH_GSSAPI_BIND_FAILED.get();
           throw new LDAPException(resultCode, bindResponse.getErrorMessage(),
                                   message, bindResponse.getMatchedDN(),
                                   null);
@@ -3570,7 +3570,7 @@
     }
     else
     {
-      Message message = ERR_LDAPAUTH_UNEXPECTED_RUN_INVOCATION.get(
+      LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RUN_INVOCATION.get(
           saslMechanism, getBacktrace());
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
@@ -3600,7 +3600,7 @@
   {
     if (saslMechanism ==  null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_NONSASL_CALLBACK_INVOCATION.get(getBacktrace());
       throw new UnsupportedCallbackException(callbacks[0], message.toString());
     }
@@ -3624,7 +3624,7 @@
         }
         else
         {
-          Message message =
+          LocalizableMessage message =
               ERR_LDAPAUTH_UNEXPECTED_GSSAPI_CALLBACK.get(String.valueOf(cb));
           throw new UnsupportedCallbackException(cb, message.toString());
         }
@@ -3632,7 +3632,7 @@
     }
     else
     {
-      Message message = ERR_LDAPAUTH_UNEXPECTED_CALLBACK_INVOCATION.get(
+      LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_CALLBACK_INVOCATION.get(
           saslMechanism, getBacktrace());
       throw new UnsupportedCallbackException(callbacks[0], message.toString());
     }
@@ -3669,14 +3669,14 @@
     }
     catch (IOException ioe)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_SEND_WHOAMI_REQUEST.get(getExceptionMessage(ioe));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
               message, ioe);
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_SEND_WHOAMI_REQUEST.get(getExceptionMessage(e));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_ENCODING_ERROR,
                                 message, e);
@@ -3690,7 +3690,7 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_LDAPAUTH_CONNECTION_CLOSED_WITHOUT_BIND_RESPONSE.get();
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
                                   message);
@@ -3698,28 +3698,28 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE.get(
           getExceptionMessage(ioe));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, message, ioe);
     }
     catch (ASN1Exception ae)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE.get(getExceptionMessage(ae));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, ae);
     }
     catch (LDAPException le)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE.get(getExceptionMessage(le));
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_DECODING_ERROR,
                                 message, le);
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPAUTH_CANNOT_READ_WHOAMI_RESPONSE.get(getExceptionMessage(e));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message, e);
@@ -3729,7 +3729,7 @@
     // If the protocol op isn't an extended response, then that's a problem.
     if (responseMessage.getProtocolOpType() != OP_TYPE_EXTENDED_RESPONSE)
     {
-      Message message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPAUTH_UNEXPECTED_RESPONSE.get(
           String.valueOf(responseMessage.getProtocolOp()));
       throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR, message);
@@ -3744,7 +3744,7 @@
     if ((responseOID != null) &&
         responseOID.equals(OID_NOTICE_OF_DISCONNECTION))
     {
-      Message message = ERR_LDAPAUTH_SERVER_DISCONNECT.get(
+      LocalizableMessage message = ERR_LDAPAUTH_SERVER_DISCONNECT.get(
           extendedResponse.getResultCode(), extendedResponse.getErrorMessage());
       throw new LDAPException(extendedResponse.getResultCode(), message);
     }
@@ -3756,7 +3756,7 @@
     int resultCode = extendedResponse.getResultCode();
     if (resultCode != LDAPResultCode.SUCCESS)
     {
-      Message message = ERR_LDAPAUTH_WHOAMI_FAILED.get();
+      LocalizableMessage message = ERR_LDAPAUTH_WHOAMI_FAILED.get();
       throw new LDAPException(resultCode, extendedResponse.getErrorMessage(),
                               message, extendedResponse.getMatchedDN(),
                               null);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPCompare.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPCompare.java
index d012a82..7848411 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPCompare.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPCompare.java
@@ -38,7 +38,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.controls.LDAPAssertionRequestControl;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.protocols.asn1.ASN1Exception;
@@ -266,7 +266,7 @@
         }
         else
         {
-          Message msg = INFO_OPERATION_FAILED.get("COMPARE");
+          LocalizableMessage msg = INFO_OPERATION_FAILED.get("COMPARE");
           err.println(wrapText(msg, MAX_LINE_WIDTH));
           err.println(wrapText(ae.getMessage(), MAX_LINE_WIDTH));
           return OPERATIONS_ERROR;
@@ -276,12 +276,12 @@
       CompareResponseProtocolOp op =
         responseMessage.getCompareResponseProtocolOp();
       int resultCode = op.getResultCode();
-      Message errorMessage = op.getErrorMessage();
+      LocalizableMessage errorMessage = op.getErrorMessage();
 
       if(resultCode != COMPARE_TRUE && resultCode != COMPARE_FALSE
          && !compareOptions.continueOnError())
       {
-        Message msg = INFO_OPERATION_FAILED.get("COMPARE");
+        LocalizableMessage msg = INFO_OPERATION_FAILED.get("COMPARE");
         throw new LDAPException(resultCode, errorMessage, msg,
                                 op.getMatchedDN(), null);
       } else
@@ -308,7 +308,7 @@
           }
         } else
         {
-          Message msg = INFO_OPERATION_FAILED.get("COMPARE");
+          LocalizableMessage msg = INFO_OPERATION_FAILED.get("COMPARE");
           LDAPToolUtils.printErrorMessage(err, msg, resultCode, errorMessage,
                                           op.getMatchedDN());
         }
@@ -413,7 +413,7 @@
     Reader rdr = null;
 
     // Create the command-line argument parser for use with this program.
-    Message toolDescription = INFO_LDAPCOMPARE_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_LDAPCOMPARE_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                         false, true, 1, 0,
                                         " \'attribute:value\' \"DN\" ...");
@@ -666,7 +666,7 @@
       argParser.setUsageArgument(showUsage, out);
     } catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CLIENT_SIDE_PARAM_ERROR;
@@ -679,7 +679,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -695,7 +695,7 @@
 
     if(bindPassword.isPresent() && bindPasswordFile.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               bindPassword.getLongIdentifier(),
               bindPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -706,7 +706,7 @@
 
     if(attrAndDNStrings.isEmpty())
     {
-      Message message = ERR_LDAPCOMPARE_NO_ATTR.get();
+      LocalizableMessage message = ERR_LDAPCOMPARE_NO_ATTR.get();
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CLIENT_SIDE_PARAM_ERROR;
     }
@@ -741,7 +741,7 @@
     int idx = attributeString.indexOf(":");
     if(idx == -1)
     {
-      Message message =
+      LocalizableMessage message =
               ERR_LDAPCOMPARE_INVALID_ATTR_STRING.get(attributeString);
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CLIENT_SIDE_PARAM_ERROR;
@@ -907,7 +907,7 @@
         Control ctrl = LDAPToolUtils.getControl(ctrlString, err);
         if(ctrl == null)
         {
-          Message message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
+          LocalizableMessage message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
           return CLIENT_SIDE_PARAM_ERROR;
@@ -930,7 +930,7 @@
       }
       catch (LDAPException le)
       {
-        Message message = ERR_LDAP_ASSERTION_INVALID_FILTER.get(
+        LocalizableMessage message = ERR_LDAP_ASSERTION_INVALID_FILTER.get(
                 le.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
@@ -969,13 +969,13 @@
     {
       if(!connectionOptions.useSSL() && !connectionOptions.useStartTLS())
       {
-        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
+        LocalizableMessage message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
       }
       if(keyStorePathValue == null)
       {
-        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
+        LocalizableMessage message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPConnection.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPConnection.java
index 3e49937..8046fde 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPConnection.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPConnection.java
@@ -35,7 +35,7 @@
 import java.util.ArrayList;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.controls.AuthorizationIdentityResponseControl;
 import org.opends.server.controls.PasswordExpiringControl;
 import org.opends.server.controls.PasswordPolicyErrorType;
@@ -212,7 +212,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, ex);
         }
-        throw new LDAPConnectionException(Message.raw(ex.getMessage()), ex);
+        throw new LDAPConnectionException(LocalizableMessage.raw(ex.getMessage()), ex);
       }
 
       // Send the StartTLS extended request.
@@ -233,7 +233,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, ex1);
         }
-        throw new LDAPConnectionException(Message.raw(ex1.getMessage()), ex1
+        throw new LDAPConnectionException(LocalizableMessage.raw(ex1.getMessage()), ex1
             .getResultCode(), null, ex1);
       } catch (Exception ex1)
       {
@@ -241,7 +241,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, ex1);
         }
-        throw new LDAPConnectionException(Message.raw(ex1.getMessage()), ex1);
+        throw new LDAPConnectionException(LocalizableMessage.raw(ex1.getMessage()), ex1);
       }
       ExtendedResponseProtocolOp res = msg.getExtendedResponseProtocolOp();
       resultCode = res.getResultCode();
@@ -262,12 +262,12 @@
       ldapReader = new LDAPReader(socket);
     } catch(UnknownHostException uhe)
     {
-      Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
+      LocalizableMessage msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
       throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
                                         uhe);
     } catch(ConnectException ce)
     {
-      Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
+      LocalizableMessage msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
       throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
                                         ce);
     } catch (LDAPConnectionException e)
@@ -279,7 +279,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ex2);
       }
-      throw new LDAPConnectionException(Message.raw(ex2.getMessage()), ex2);
+      throw new LDAPConnectionException(LocalizableMessage.raw(ex2.getMessage()), ex2);
     }
 
     // We need this so that we don't run out of addresses when the tool
@@ -376,7 +376,7 @@
             control = (AuthorizationIdentityResponseControl)c;
           }
 
-          Message message =
+          LocalizableMessage message =
               INFO_BIND_AUTHZID_RETURNED.get(
                   control.getAuthorizationID());
           out.println(message);
@@ -384,7 +384,7 @@
         else if (c.getOID().equals(OID_NS_PASSWORD_EXPIRED))
         {
 
-          Message message = INFO_BIND_PASSWORD_EXPIRED.get();
+          LocalizableMessage message = INFO_BIND_PASSWORD_EXPIRED.get();
           out.println(message);
         }
         else if (c.getOID().equals(OID_NS_PASSWORD_EXPIRING))
@@ -401,11 +401,11 @@
             // Control should already have been decoded.
             control = (PasswordExpiringControl)c;
           }
-          Message timeString =
+          LocalizableMessage timeString =
                secondsToTimeString(control.getSecondsUntilExpiration());
 
 
-          Message message = INFO_BIND_PASSWORD_EXPIRING.get(timeString);
+          LocalizableMessage message = INFO_BIND_PASSWORD_EXPIRING.get(timeString);
           out.println(message);
         }
         else if (c.getOID().equals(OID_PASSWORD_POLICY_CONTROL))
@@ -429,7 +429,7 @@
             {
               case PASSWORD_EXPIRED:
 
-                Message message = INFO_BIND_PASSWORD_EXPIRED.get();
+                LocalizableMessage message = INFO_BIND_PASSWORD_EXPIRED.get();
                 out.println(message);
                 break;
               case ACCOUNT_LOCKED:
@@ -452,11 +452,11 @@
             switch (warningType)
             {
               case TIME_BEFORE_EXPIRATION:
-                Message timeString =
+                LocalizableMessage timeString =
                      secondsToTimeString(pwPolicyControl.getWarningValue());
 
 
-                Message message = INFO_BIND_PASSWORD_EXPIRING.get(timeString);
+                LocalizableMessage message = INFO_BIND_PASSWORD_EXPIRING.get(timeString);
                 out.println(message);
                 break;
               case GRACE_LOGINS_REMAINING:
@@ -495,7 +495,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, ex);
       }
       throw new LDAPConnectionException(
-              Message.raw(ex.getLocalizedMessage()),ex);
+              LocalizableMessage.raw(ex.getLocalizedMessage()),ex);
     }
     finally
     {
@@ -554,7 +554,7 @@
     }
     catch (UnknownHostException uhe)
     {
-      Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
+      LocalizableMessage msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
       throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
           uhe);
     }
@@ -566,11 +566,11 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ex);
       }
-      throw new LDAPConnectionException(Message.raw(ex.getMessage()), ex);
+      throw new LDAPConnectionException(LocalizableMessage.raw(ex.getMessage()), ex);
     }
     if (ce != null)
     {
-      Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
+      LocalizableMessage msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
       throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
           ce);
     }
@@ -614,7 +614,7 @@
     }
     catch (UnknownHostException uhe)
     {
-      Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
+      LocalizableMessage msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
       throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
           uhe);
     }
@@ -626,11 +626,11 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, ex);
       }
-      throw new LDAPConnectionException(Message.raw(ex.getMessage()), ex);
+      throw new LDAPConnectionException(LocalizableMessage.raw(ex.getMessage()), ex);
     }
     if (ce != null)
     {
-      Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
+      LocalizableMessage msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
       throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
           ce);
     }
@@ -674,7 +674,7 @@
       }
       catch (IOException e)
       {
-        Message msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
+        LocalizableMessage msg = INFO_RESULT_CLIENT_SIDE_CONNECT_ERROR.get();
         throw new LDAPConnectionException(msg, CLIENT_SIDE_CONNECT_ERROR, null,
             e);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPConnectionException.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPConnectionException.java
index 460a686..0a71e64 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPConnectionException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPConnectionException.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import org.opends.server.types.DN;
@@ -63,7 +64,7 @@
   /**
    * The server-provided error message for this exception.
    */
-  private final Message errorMessage;
+  private final LocalizableMessage errorMessage;
 
 
   /**
@@ -71,7 +72,7 @@
    *
    * @param  message    The message to use for this exception.
    */
-  public LDAPConnectionException(Message message)
+  public LDAPConnectionException(LocalizableMessage message)
   {
     super(message);
 
@@ -88,8 +89,8 @@
    * @param  resultCode    The result code for this exception.
    * @param  errorMessage  The server-provided error message for this exception.
    */
-  public LDAPConnectionException(Message message, int resultCode,
-                                 Message errorMessage)
+  public LDAPConnectionException(LocalizableMessage message, int resultCode,
+                                 LocalizableMessage errorMessage)
   {
     super(message);
 
@@ -108,7 +109,7 @@
    * @param  cause      The underlying cause that triggered this
    *                    exception.
    */
-  public LDAPConnectionException(Message message, Throwable cause)
+  public LDAPConnectionException(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
 
@@ -128,8 +129,8 @@
    * @param  cause         The underlying cause that triggered this
    *                       exception.
    */
-  public LDAPConnectionException(Message message, int resultCode,
-                                 Message errorMessage, Throwable cause)
+  public LDAPConnectionException(LocalizableMessage message, int resultCode,
+                                 LocalizableMessage errorMessage, Throwable cause)
   {
     super(message, cause);
 
@@ -152,8 +153,8 @@
    * @param  cause         The underlying cause that triggered this
    *                       exception.
    */
-  public LDAPConnectionException(Message message, int resultCode,
-                                 Message errorMessage, DN matchedDN,
+  public LDAPConnectionException(LocalizableMessage message, int resultCode,
+                                 LocalizableMessage errorMessage, DN matchedDN,
                                  Throwable cause)
   {
     super(message, cause);
@@ -181,7 +182,7 @@
    *
    * @return  The server-provided error message associated with this exception.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return this.errorMessage;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPDelete.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPDelete.java
index f450312..bbc26e7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPDelete.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPDelete.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.tools;
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.BufferedReader;
 import java.io.FileReader;
@@ -208,7 +208,7 @@
         else
         {
 
-          Message msg = INFO_OPERATION_FAILED.get("DELETE");
+          LocalizableMessage msg = INFO_OPERATION_FAILED.get("DELETE");
           err.println(wrapText(msg, MAX_LINE_WIDTH));
           err.println(wrapText(ae.getMessage(), MAX_LINE_WIDTH));
           return;
@@ -218,11 +218,11 @@
       DeleteResponseProtocolOp op =
            responseMessage.getDeleteResponseProtocolOp();
       int resultCode = op.getResultCode();
-      Message errorMessage = op.getErrorMessage();
+      LocalizableMessage errorMessage = op.getErrorMessage();
       if(resultCode != SUCCESS && resultCode != REFERRAL &&
          !deleteOptions.continueOnError())
       {
-        Message msg = INFO_OPERATION_FAILED.get("DELETE");
+        LocalizableMessage msg = INFO_OPERATION_FAILED.get("DELETE");
         throw new LDAPException(resultCode, errorMessage, msg,
                                 op.getMatchedDN(), null);
       } else
@@ -230,13 +230,13 @@
         if(resultCode != SUCCESS && resultCode != REFERRAL)
         {
 
-          Message msg = INFO_OPERATION_FAILED.get("DELETE");
+          LocalizableMessage msg = INFO_OPERATION_FAILED.get("DELETE");
           LDAPToolUtils.printErrorMessage(err, msg, resultCode, errorMessage,
                                           op.getMatchedDN());
         } else
         {
 
-          Message msg = INFO_OPERATION_SUCCESSFUL.get("DELETE", line);
+          LocalizableMessage msg = INFO_OPERATION_SUCCESSFUL.get("DELETE", line);
           out.println(msg);
         }
       }
@@ -335,7 +335,7 @@
     ArrayList<String> dnStrings = new ArrayList<String> ();
 
     // Create the command-line argument parser for use with this program.
-    Message toolDescription = INFO_LDAPDELETE_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_LDAPDELETE_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false, true, 0, 1, "\"DN\"");
     try
@@ -567,7 +567,7 @@
       argParser.setUsageArgument(showUsage, out);
     } catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CLIENT_SIDE_PARAM_ERROR;
     }
@@ -579,7 +579,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
       return CLIENT_SIDE_PARAM_ERROR;
@@ -594,7 +594,7 @@
 
     if(bindPassword.isPresent() && bindPasswordFile.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               bindPassword.getLongIdentifier(),
               bindPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -713,7 +713,7 @@
         Control ctrl = LDAPToolUtils.getControl(ctrlString, err);
         if(ctrl == null)
         {
-          Message message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
+          LocalizableMessage message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
           return CLIENT_SIDE_PARAM_ERROR;
@@ -766,13 +766,13 @@
     {
       if(!connectionOptions.useSSL() && !connectionOptions.useStartTLS())
       {
-        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
+        LocalizableMessage message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
       }
       if(keyStorePathValue == null)
       {
-        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
+        LocalizableMessage message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPModify.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPModify.java
index 86969d7..05a9dd9 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPModify.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPModify.java
@@ -27,7 +27,7 @@
  */
 package org.opends.server.tools;
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -165,7 +165,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message =
+      LocalizableMessage message =
           ERR_LDIF_FILE_CANNOT_OPEN_FOR_READ.get(fileNameValue,
                   e.getLocalizedMessage());
       throw new FileNotFoundException(message.toString());
@@ -204,13 +204,13 @@
             }
           }
 
-          Message message = ERR_LDIF_FILE_INVALID_LDIF_ENTRY.get(
+          LocalizableMessage message = ERR_LDIF_FILE_INVALID_LDIF_ENTRY.get(
               le.getLineNumber(), fileNameValue, String.valueOf(le));
           throw new IOException(message.toString());
         }
         else
         {
-          Message message = ERR_LDIF_FILE_INVALID_LDIF_ENTRY.get(
+          LocalizableMessage message = ERR_LDIF_FILE_INVALID_LDIF_ENTRY.get(
                   le.getLineNumber(), fileNameValue, String.valueOf(le));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           continue;
@@ -236,13 +236,13 @@
             }
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_LDIF_FILE_READ_ERROR.get(fileNameValue, String.valueOf(e));
           throw new IOException(message.toString());
         }
         else
         {
-          Message message = ERR_LDIF_FILE_READ_ERROR.get(
+          LocalizableMessage message = ERR_LDIF_FILE_READ_ERROR.get(
               fileNameValue, String.valueOf(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           continue;
@@ -344,7 +344,7 @@
           {
             TRACER.debugCaught(DebugLogLevel.ERROR, ae);
           }
-          Message message = INFO_OPERATION_FAILED.get(operationType);
+          LocalizableMessage message = INFO_OPERATION_FAILED.get(operationType);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(wrapText(ae.getMessage(), MAX_LINE_WIDTH));
           if (!modifyOptions.continueOnError())
@@ -356,7 +356,7 @@
         }
 
         int resultCode = 0;
-        Message errorMessage = null;
+        LocalizableMessage errorMessage = null;
         DN matchedDN = null;
         List<String> referralURLs = null;
         try
@@ -430,7 +430,7 @@
 
         if(resultCode != SUCCESS && resultCode != REFERRAL)
         {
-          Message msg = INFO_OPERATION_FAILED.get(operationType);
+          LocalizableMessage msg = INFO_OPERATION_FAILED.get(operationType);
 
           if(!modifyOptions.continueOnError())
           {
@@ -443,7 +443,7 @@
           }
         } else
         {
-          Message msg = INFO_OPERATION_SUCCESSFUL.get(
+          LocalizableMessage msg = INFO_OPERATION_SUCCESSFUL.get(
                   operationType, asn1OctetStr.toString());
           out.println(msg);
 
@@ -643,7 +643,7 @@
     BooleanArgument   noPropertiesFileArgument = null;
 
     // Create the command-line argument parser for use with this program.
-    Message toolDescription = INFO_LDAPMODIFY_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_LDAPMODIFY_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
     try
@@ -921,7 +921,7 @@
       argParser.setUsageArgument(showUsage, out);
     } catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CLIENT_SIDE_PARAM_ERROR;
@@ -934,7 +934,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -950,7 +950,7 @@
 
     if(bindPassword.isPresent() && bindPasswordFile.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               bindPassword.getLongIdentifier(),
               bindPasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -1068,7 +1068,7 @@
         Control ctrl = LDAPToolUtils.getControl(ctrlString, err);
         if(ctrl == null)
         {
-          Message message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
+          LocalizableMessage message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
           return CLIENT_SIDE_PARAM_ERROR;
@@ -1099,7 +1099,7 @@
       }
       catch (LDAPException le)
       {
-        Message message = ERR_LDAP_ASSERTION_INVALID_FILTER.get(
+        LocalizableMessage message = ERR_LDAP_ASSERTION_INVALID_FILTER.get(
                 le.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
@@ -1169,13 +1169,13 @@
     {
       if(!connectionOptions.useSSL() && !connectionOptions.useStartTLS())
       {
-        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
+        LocalizableMessage message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
       }
       if(keyStorePathValue == null)
       {
-        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
+        LocalizableMessage message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPPasswordModify.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPPasswordModify.java
index d59931c..8e86c51 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPPasswordModify.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPPasswordModify.java
@@ -33,7 +33,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.controls.PasswordPolicyErrorType;
 import org.opends.server.controls.PasswordPolicyResponseControl;
 import org.opends.server.controls.PasswordPolicyWarningType;
@@ -174,7 +174,7 @@
 
 
     // Initialize the argument parser.
-    Message toolDescription = INFO_LDAPPWMOD_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_LDAPPWMOD_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
 
@@ -407,7 +407,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CLIENT_SIDE_PARAM_ERROR;
@@ -421,7 +421,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -440,7 +440,7 @@
     // Make sure that the user didn't specify any conflicting arguments.
     if (bindPW.isPresent() && bindPWFile.isPresent())
     {
-      Message message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
               bindPW.getLongIdentifier(),
               bindPWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -449,7 +449,7 @@
 
     if (newPW.isPresent() && newPWFile.isPresent())
     {
-      Message message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
               newPW.getLongIdentifier(),
               newPWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -458,7 +458,7 @@
 
     if (currentPW.isPresent() && currentPWFile.isPresent())
     {
-      Message message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
               currentPW.getLongIdentifier(),
               currentPWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -467,7 +467,7 @@
 
     if (useSSL.isPresent() && useStartTLS.isPresent())
     {
-      Message message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_LDAPPWMOD_CONFLICTING_ARGS.get(
               useSSL.getLongIdentifier(),
               useStartTLS.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -476,7 +476,7 @@
 
     if (sslKeyStorePIN.isPresent() && sslKeyStorePINFile.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               sslKeyStorePIN.getLongIdentifier(),
               sslKeyStorePINFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -485,7 +485,7 @@
 
     if (sslTrustStorePIN.isPresent() && sslTrustStorePINFile.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               sslTrustStorePIN.getLongIdentifier(),
               sslTrustStorePINFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -501,7 +501,7 @@
     {
       if (! (bindPW.isPresent() || bindPWFile.isPresent()))
       {
-        Message message = ERR_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER.get();
+        LocalizableMessage message = ERR_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER.get();
 
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
@@ -510,7 +510,7 @@
     }
     else if (bindPW.isPresent() || bindPWFile.isPresent())
     {
-      Message message = ERR_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER.get();
+      LocalizableMessage message = ERR_LDAPPWMOD_BIND_DN_AND_PW_MUST_BE_TOGETHER.get();
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -520,7 +520,7 @@
     {
       if (provideDNForAuthzID.isPresent())
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_LDAPPWMOD_DEPENDENT_ARGS.get(
                         provideDNForAuthzID.getLongIdentifier(),
                         bindDN.getLongIdentifier());
@@ -532,7 +532,7 @@
       if (! (authzID.isPresent() &&
              (currentPW.isPresent() || currentPWFile.isPresent())))
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_LDAPPWMOD_ANON_REQUIRES_AUTHZID_AND_CURRENTPW.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
@@ -565,7 +565,7 @@
         LDAPControl ctrl = LDAPToolUtils.getControl(ctrlString, err);
         if(ctrl == null)
         {
-          Message message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
+          LocalizableMessage message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
           return CLIENT_SIDE_PARAM_ERROR;
@@ -629,7 +629,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_LDAPPWMOD_ERROR_INITIALIZING_SSL.get(String.valueOf(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
@@ -663,7 +663,7 @@
     }
     catch (LDAPConnectionException lce)
     {
-      Message message = ERR_LDAPPWMOD_CANNOT_CONNECT.get(lce.getMessage());
+      LocalizableMessage message = ERR_LDAPPWMOD_CANNOT_CONNECT.get(lce.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return lce.getResultCode();
     }
@@ -744,7 +744,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPPWMOD_CANNOT_SEND_PWMOD_REQUEST.get(
+      LocalizableMessage message = ERR_LDAPPWMOD_CANNOT_SEND_PWMOD_REQUEST.get(
               String.valueOf(e));
       err.println(wrapText(message, MAX_LINE_WIDTH));
 
@@ -774,7 +774,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDAPPWMOD_CANNOT_READ_PWMOD_RESPONSE.get(
+      LocalizableMessage message = ERR_LDAPPWMOD_CANNOT_READ_PWMOD_RESPONSE.get(
               String.valueOf(e));
       err.println(wrapText(message, MAX_LINE_WIDTH));
 
@@ -802,10 +802,10 @@
     int resultCode = extendedResponse.getResultCode();
     if (resultCode != LDAPResultCode.SUCCESS)
     {
-      Message message = ERR_LDAPPWMOD_FAILED.get(resultCode);
+      LocalizableMessage message = ERR_LDAPPWMOD_FAILED.get(resultCode);
       err.println(wrapText(message, MAX_LINE_WIDTH));
 
-      Message errorMessage = extendedResponse.getErrorMessage();
+      LocalizableMessage errorMessage = extendedResponse.getErrorMessage();
       if ((errorMessage != null) && (errorMessage.length() > 0))
       {
 
@@ -839,10 +839,10 @@
     }
     else
     {
-      Message message = INFO_LDAPPWMOD_SUCCESSFUL.get();
+      LocalizableMessage message = INFO_LDAPPWMOD_SUCCESSFUL.get();
       out.println(wrapText(message, MAX_LINE_WIDTH));
 
-      Message additionalInfo = extendedResponse.getErrorMessage();
+      LocalizableMessage additionalInfo = extendedResponse.getErrorMessage();
       if ((additionalInfo != null) && (additionalInfo.length() > 0))
       {
 
@@ -871,7 +871,7 @@
                  pwPolicyControl.getWarningType();
             if (pwPolicyWarningType != null)
             {
-              Message message = INFO_LDAPPWMOD_PWPOLICY_WARNING.get(
+              LocalizableMessage message = INFO_LDAPPWMOD_PWPOLICY_WARNING.get(
                       pwPolicyWarningType.toString(),
                       pwPolicyControl.getWarningValue());
               out.println(wrapText(message, MAX_LINE_WIDTH));
@@ -881,14 +881,14 @@
                  pwPolicyControl.getErrorType();
             if (pwPolicyErrorType != null)
             {
-              Message message = INFO_LDAPPWMOD_PWPOLICY_ERROR.get(
+              LocalizableMessage message = INFO_LDAPPWMOD_PWPOLICY_ERROR.get(
                       pwPolicyErrorType.toString());
               out.println(wrapText(message, MAX_LINE_WIDTH));
             }
           }
           catch (Exception e)
           {
-            Message message = ERR_LDAPPWMOD_CANNOT_DECODE_PWPOLICY_CONTROL.get(
+            LocalizableMessage message = ERR_LDAPPWMOD_CANNOT_DECODE_PWPOLICY_CONTROL.get(
                     String.valueOf(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
           }
@@ -909,13 +909,13 @@
         {
           if (asn1Reader.peekType() == TYPE_PASSWORD_MODIFY_GENERATED_PASSWORD)
           {
-            Message message = INFO_LDAPPWMOD_GENERATED_PASSWORD.get(
+            LocalizableMessage message = INFO_LDAPPWMOD_GENERATED_PASSWORD.get(
                     asn1Reader.readOctetStringAsString());
             out.println(wrapText(message, MAX_LINE_WIDTH));
           }
           else
           {
-            Message message = ERR_LDAPPWMOD_UNRECOGNIZED_VALUE_TYPE.get(
+            LocalizableMessage message = ERR_LDAPPWMOD_UNRECOGNIZED_VALUE_TYPE.get(
                     asn1Reader.readOctetStringAsString());
             err.println(wrapText(message, MAX_LINE_WIDTH));
           }
@@ -924,7 +924,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDAPPWMOD_COULD_NOT_DECODE_RESPONSE_VALUE.get(
+        LocalizableMessage message = ERR_LDAPPWMOD_COULD_NOT_DECODE_RESPONSE_VALUE.get(
                 String.valueOf(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPSearch.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPSearch.java
index 3ac40f2..4ff4d9e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPSearch.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPSearch.java
@@ -35,7 +35,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.controls.*;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.protocols.ldap.*;
@@ -163,7 +163,7 @@
           do
           {
             int resultCode = 0;
-            Message errorMessage = null;
+            LocalizableMessage errorMessage = null;
             DN matchedDN = null;
             LDAPMessage responseMessage =
                  connection.getLDAPReader().readMessage();
@@ -211,7 +211,7 @@
                         if (acrc.getSecondsBeforeExpiration() > 0)
                         {
                           int timeToExp = acrc.getSecondsBeforeExpiration();
-                          Message timeToExpStr = secondsToTimeString(timeToExp);
+                          LocalizableMessage timeToExpStr = secondsToTimeString(timeToExp);
 
                           out.println(
                                INFO_LDAPSEARCH_ACCTUSABLE_TIME_UNTIL_EXPIRATION.
@@ -255,7 +255,7 @@
                           if (acrc.getSecondsBeforeUnlock() > 0)
                           {
                             int timeToUnlock = acrc.getSecondsBeforeUnlock();
-                            Message timeToUnlockStr =
+                            LocalizableMessage timeToUnlockStr =
                                         secondsToTimeString(timeToUnlock);
 
                             out.println(
@@ -320,14 +320,14 @@
                       int rc = sortResponse.getResultCode();
                       if (rc != LDAPResultCode.SUCCESS)
                       {
-                        Message msg   = WARN_LDAPSEARCH_SORT_ERROR.get(
+                        LocalizableMessage msg   = WARN_LDAPSEARCH_SORT_ERROR.get(
                                 LDAPResultCode.toString(rc));
                         err.println(msg);
                       }
                     }
                     catch (Exception e)
                     {
-                      Message msg   =
+                      LocalizableMessage msg   =
                               WARN_LDAPSEARCH_CANNOT_DECODE_SORT_RESPONSE.get(
                                       getExceptionMessage(e));
                       err.println(msg);
@@ -343,7 +343,7 @@
                       int rc = vlvResponse.getVLVResultCode();
                       if (rc == LDAPResultCode.SUCCESS)
                       {
-                        Message msg = INFO_LDAPSEARCH_VLV_TARGET_OFFSET.get(
+                        LocalizableMessage msg = INFO_LDAPSEARCH_VLV_TARGET_OFFSET.get(
                                 vlvResponse.getTargetPosition());
                         out.println(msg);
 
@@ -354,14 +354,14 @@
                       }
                       else
                       {
-                        Message msg = WARN_LDAPSEARCH_VLV_ERROR.get(
+                        LocalizableMessage msg = WARN_LDAPSEARCH_VLV_ERROR.get(
                                 LDAPResultCode.toString(rc));
                         err.println(msg);
                       }
                     }
                     catch (Exception e)
                     {
-                      Message msg   =
+                      LocalizableMessage msg   =
                               WARN_LDAPSEARCH_CANNOT_DECODE_VLV_RESPONSE.get(
                                       getExceptionMessage(e));
                       err.println(msg);
@@ -384,14 +384,14 @@
                   }
                 }
                 // FIXME - throw exception?
-                Message msg = INFO_SEARCH_OPERATION_INVALID_PROTOCOL.get(
+                LocalizableMessage msg = INFO_SEARCH_OPERATION_INVALID_PROTOCOL.get(
                         String.valueOf(opType));
                 err.println(wrapText(msg, MAX_LINE_WIDTH));
             }
 
             if(resultCode != SUCCESS)
             {
-              Message msg = INFO_OPERATION_FAILED.get("SEARCH");
+              LocalizableMessage msg = INFO_OPERATION_FAILED.get("SEARCH");
               throw new LDAPException(resultCode, errorMessage, msg,
                                       matchedDN, null);
             }
@@ -416,7 +416,7 @@
 
     if (searchOptions.countMatchingEntries())
     {
-      Message message =
+      LocalizableMessage message =
               INFO_LDAPSEARCH_MATCHING_ENTRY_COUNT.get(matchingEntries);
       out.println(message);
       out.println();
@@ -703,7 +703,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    Message toolDescription = INFO_LDAPSEARCH_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_LDAPSEARCH_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false, true, 0, 0,
                                                   "[filter] [attributes ...]");
@@ -1088,7 +1088,7 @@
     } catch (ArgumentException ae)
     {
 
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return CLIENT_SIDE_PARAM_ERROR;
@@ -1101,7 +1101,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -1151,7 +1151,7 @@
 
     if(bindPassword.isPresent() && bindPasswordFile.isPresent())
     {
-      Message message =
+      LocalizableMessage message =
               ERR_TOOL_CONFLICTING_ARGS.get(
                       bindPassword.getLongIdentifier(),
                       bindPasswordFile.getLongIdentifier());
@@ -1161,7 +1161,7 @@
 
     if (useSSL.isPresent() && startTLS.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               useSSL.getLongIdentifier(),
               startTLS.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -1170,7 +1170,7 @@
 
     if (keyStorePassword.isPresent() && keyStorePasswordFile.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               keyStorePassword.getLongIdentifier(),
               keyStorePasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -1179,7 +1179,7 @@
 
     if (trustStorePassword.isPresent() && trustStorePasswordFile.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               trustStorePassword.getLongIdentifier(),
               trustStorePasswordFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -1328,7 +1328,7 @@
         Control ctrl = LDAPToolUtils.getControl(ctrlString, err);
         if(ctrl == null)
         {
-          Message message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
+          LocalizableMessage message = ERR_TOOL_INVALID_CONTROL_STRING.get(ctrlString);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           err.println(argParser.getUsage());
           return CLIENT_SIDE_PARAM_ERROR;
@@ -1340,7 +1340,7 @@
     if(effectiveRightsUser.isPresent()) {
       String authzID=effectiveRightsUser.getValue();
       if (!authzID.startsWith("dn:")) {
-        Message message = ERR_EFFECTIVERIGHTS_INVALID_AUTHZID.get(authzID);
+        LocalizableMessage message = ERR_EFFECTIVERIGHTS_INVALID_AUTHZID.get(authzID);
         err.println(wrapText(message, MAX_LINE_WIDTH));
         err.println(argParser.getUsage());
         return CLIENT_SIDE_PARAM_ERROR;
@@ -1371,7 +1371,7 @@
 
       if (! tokenizer.hasMoreTokens())
       {
-        Message message = ERR_PSEARCH_MISSING_DESCRIPTOR.get();
+        LocalizableMessage message = ERR_PSEARCH_MISSING_DESCRIPTOR.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
       }
@@ -1380,7 +1380,7 @@
         String token = tokenizer.nextToken();
         if (! token.equals("ps"))
         {
-          Message message = ERR_PSEARCH_DOESNT_START_WITH_PS.get(
+          LocalizableMessage message = ERR_PSEARCH_DOESNT_START_WITH_PS.get(
                   String.valueOf(infoString));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return CLIENT_SIDE_PARAM_ERROR;
@@ -1419,7 +1419,7 @@
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
                     ERR_PSEARCH_INVALID_CHANGE_TYPE.get(String.valueOf(token));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             return CLIENT_SIDE_PARAM_ERROR;
@@ -1449,7 +1449,7 @@
         }
         else
         {
-          Message message = ERR_PSEARCH_INVALID_CHANGESONLY.get(
+          LocalizableMessage message = ERR_PSEARCH_INVALID_CHANGESONLY.get(
                   String.valueOf(token));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return CLIENT_SIDE_PARAM_ERROR;
@@ -1470,7 +1470,7 @@
         }
         else
         {
-          Message message = ERR_PSEARCH_INVALID_RETURN_ECS.get(
+          LocalizableMessage message = ERR_PSEARCH_INVALID_RETURN_ECS.get(
                   String.valueOf(token));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return CLIENT_SIDE_PARAM_ERROR;
@@ -1498,7 +1498,7 @@
       }
       catch (LDAPException le)
       {
-        Message message = ERR_LDAP_ASSERTION_INVALID_FILTER.get(
+        LocalizableMessage message = ERR_LDAP_ASSERTION_INVALID_FILTER.get(
                 le.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
@@ -1519,7 +1519,7 @@
         }
         catch (LDAPException le)
         {
-          Message message = ERR_LDAP_MATCHEDVALUES_INVALID_FILTER.get(
+          LocalizableMessage message = ERR_LDAP_MATCHEDVALUES_INVALID_FILTER.get(
                   le.getMessage());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return CLIENT_SIDE_PARAM_ERROR;
@@ -1539,7 +1539,7 @@
       }
       catch (LDAPException le)
       {
-        Message message = ERR_LDAP_SORTCONTROL_INVALID_ORDER.get(
+        LocalizableMessage message = ERR_LDAP_SORTCONTROL_INVALID_ORDER.get(
                 le.getErrorMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
@@ -1550,7 +1550,7 @@
     {
       if (! sortOrder.isPresent())
       {
-        Message message = ERR_LDAPSEARCH_VLV_REQUIRES_SORT.get(
+        LocalizableMessage message = ERR_LDAPSEARCH_VLV_REQUIRES_SORT.get(
                 vlvDescriptor.getLongIdentifier(),
                 sortOrder.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -1572,7 +1572,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_LDAPSEARCH_VLV_INVALID_DESCRIPTOR.get();
+          LocalizableMessage message = ERR_LDAPSEARCH_VLV_INVALID_DESCRIPTOR.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return CLIENT_SIDE_PARAM_ERROR;
         }
@@ -1591,14 +1591,14 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_LDAPSEARCH_VLV_INVALID_DESCRIPTOR.get();
+          LocalizableMessage message = ERR_LDAPSEARCH_VLV_INVALID_DESCRIPTOR.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return CLIENT_SIDE_PARAM_ERROR;
         }
       }
       else
       {
-        Message message = ERR_LDAPSEARCH_VLV_INVALID_DESCRIPTOR.get();
+        LocalizableMessage message = ERR_LDAPSEARCH_VLV_INVALID_DESCRIPTOR.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
       }
@@ -1642,13 +1642,13 @@
     {
       if(!connectionOptions.useSSL() && !connectionOptions.useStartTLS())
       {
-        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
+        LocalizableMessage message = ERR_TOOL_SASLEXTERNAL_NEEDS_SSL_OR_TLS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
       }
       if(keyStorePathValue == null)
       {
-        Message message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
+        LocalizableMessage message = ERR_TOOL_SASLEXTERNAL_NEEDS_KEYSTORE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return CLIENT_SIDE_PARAM_ERROR;
       }
@@ -1764,7 +1764,7 @@
       {
         if (filters.size() > 1)
         {
-          Message message = ERR_PAGED_RESULTS_REQUIRES_SINGLE_FILTER.get();
+          LocalizableMessage message = ERR_PAGED_RESULTS_REQUIRES_SINGLE_FILTER.get();
           throw new LDAPException(CLIENT_SIDE_PARAM_ERROR, message);
         }
 
@@ -1803,7 +1803,7 @@
               }
               catch (DirectoryException de)
               {
-                Message message =
+                LocalizableMessage message =
                     ERR_PAGED_RESULTS_CANNOT_DECODE.get(de.getMessage());
                 throw new LDAPException(
                         CLIENT_SIDE_DECODING_ERROR, message, de);
@@ -1813,7 +1813,7 @@
 
           if (! responseFound)
           {
-            Message message = ERR_PAGED_RESULTS_RESPONSE_NOT_FOUND.get();
+            LocalizableMessage message = ERR_PAGED_RESULTS_RESPONSE_NOT_FOUND.get();
             throw new LDAPException(CLIENT_SIDE_CONTROL_NOT_FOUND, message);
           }
           else if (cookieValue.length() == 0)
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPToolUtils.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPToolUtils.java
index c545168..8446943 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDAPToolUtils.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDAPToolUtils.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2011-2014 ForgeRock AS
  */
 package org.opends.server.tools;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -259,8 +259,8 @@
    * @param  matchedDN     The matched DN returned from the server, or
    *                       {@code null} if there was none.
    */
-  public static void printErrorMessage(PrintStream err, Message explanation,
-                                       int resultCode, Message errorMessage,
+  public static void printErrorMessage(PrintStream err, LocalizableMessage explanation,
+                                       int resultCode, LocalizableMessage errorMessage,
                                        DN matchedDN)
   {
     if ((explanation != null) && (explanation.length() > 0))
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 24c7b8e..4d67b91 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
@@ -39,7 +39,7 @@
 import java.util.ListIterator;
 import java.util.TreeMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.extensions.ConfigFileHandler;
 import org.opends.server.types.Attribute;
@@ -161,7 +161,7 @@
     StringArgument  ignoreEntriesFile;
 
 
-    Message toolDescription = INFO_LDIFDIFF_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_LDIFDIFF_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
     try
@@ -246,7 +246,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(message);
       return OPERATIONS_ERROR;
     }
@@ -259,7 +259,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       err.println(message);
       err.println(argParser.getUsage());
       return CLIENT_SIDE_PARAM_ERROR;
@@ -280,7 +280,7 @@
       {
         scriptName = "ldif-diff";
       }
-      Message message = WARN_LDIFDIFF_NO_CONFIG_FILE.get(scriptName);
+      LocalizableMessage message = WARN_LDIFDIFF_NO_CONFIG_FILE.get(scriptName);
       err.println(message);
     }
 
@@ -304,7 +304,7 @@
         catch (Exception e)
         {
 
-          Message message = ERR_LDIFDIFF_CANNOT_INITIALIZE_JMX.get(
+          LocalizableMessage message = ERR_LDIFDIFF_CANNOT_INITIALIZE_JMX.get(
                   String.valueOf(configFile.getValue()),
                                       e.getMessage());
           err.println(message);
@@ -318,7 +318,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFDIFF_CANNOT_INITIALIZE_CONFIG.get(
+          LocalizableMessage message = ERR_LDIFDIFF_CANNOT_INITIALIZE_CONFIG.get(
                   String.valueOf(configFile.getValue()),
                                       e.getMessage());
           err.println(message);
@@ -331,7 +331,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFDIFF_CANNOT_INITIALIZE_SCHEMA.get(
+          LocalizableMessage message = ERR_LDIFDIFF_CANNOT_INITIALIZE_SCHEMA.get(
                   String.valueOf(configFile.getValue()),
                   e.getMessage());
           err.println(message);
@@ -360,7 +360,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFDIFF_CANNOT_READ_FILE_IGNORE_ATTRIBS.get(
+        LocalizableMessage message = ERR_LDIFDIFF_CANNOT_READ_FILE_IGNORE_ATTRIBS.get(
                 ignoreAttrsFile.getValue(),
                 String.valueOf(e));
         err.println(message);
@@ -392,7 +392,7 @@
           }
           catch (DirectoryException e)
           {
-            Message message = INFO_LDIFDIFF_CANNOT_PARSE_STRING_AS_DN.get(
+            LocalizableMessage message = INFO_LDIFDIFF_CANNOT_PARSE_STRING_AS_DN.get(
                     line, ignoreEntriesFile.getValue());
             err.println(message);
           }
@@ -401,7 +401,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFDIFF_CANNOT_READ_FILE_IGNORE_ENTRIES.get(
+        LocalizableMessage message = ERR_LDIFDIFF_CANNOT_READ_FILE_IGNORE_ENTRIES.get(
                 ignoreEntriesFile.getValue(),
                 String.valueOf(e));
         err.println(message);
@@ -426,7 +426,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFDIFF_CANNOT_OPEN_SOURCE_LDIF.get(
+      LocalizableMessage message = ERR_LDIFDIFF_CANNOT_OPEN_SOURCE_LDIF.get(
               sourceLDIF.getValue(),
               String.valueOf(e));
       err.println(message);
@@ -452,7 +452,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFDIFF_ERROR_READING_SOURCE_LDIF.get(
+      LocalizableMessage message = ERR_LDIFDIFF_ERROR_READING_SOURCE_LDIF.get(
               sourceLDIF.getValue(),
               String.valueOf(e));
       err.println(message);
@@ -475,7 +475,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFDIFF_CANNOT_OPEN_TARGET_LDIF.get(
+      LocalizableMessage message = ERR_LDIFDIFF_CANNOT_OPEN_TARGET_LDIF.get(
               targetLDIF.getValue(),
               String.valueOf(e));
       err.println(message);
@@ -501,7 +501,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFDIFF_ERROR_READING_TARGET_LDIF.get(
+      LocalizableMessage message = ERR_LDIFDIFF_ERROR_READING_TARGET_LDIF.get(
               targetLDIF.getValue(),
               String.valueOf(e));
       err.println(message);
@@ -543,7 +543,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFDIFF_CANNOT_OPEN_OUTPUT.get(String.valueOf(e));
+      LocalizableMessage message = ERR_LDIFDIFF_CANNOT_OPEN_OUTPUT.get(String.valueOf(e));
       err.println(message);
       return OPERATIONS_ERROR;
     }
@@ -710,7 +710,7 @@
 
       if (!differenceFound)
       {
-        Message message = INFO_LDIFDIFF_NO_DIFFERENCES.get();
+        LocalizableMessage message = INFO_LDIFDIFF_NO_DIFFERENCES.get();
         writer.writeComment(message, 0);
       }
       if (useCompareResultCode.isPresent())
@@ -720,7 +720,7 @@
     }
     catch (IOException e)
     {
-      Message message =
+      LocalizableMessage message =
               ERR_LDIFDIFF_ERROR_WRITING_OUTPUT.get(String.valueOf(e));
       err.println(message);
       return OPERATIONS_ERROR;
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/LDIFModify.java b/opendj3-server-dev/src/server/org/opends/server/tools/LDIFModify.java
index 81af056..cf45c3b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/LDIFModify.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/LDIFModify.java
@@ -37,7 +37,7 @@
 import java.util.Map;
 import java.util.TreeMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.extensions.ConfigFileHandler;
 import org.opends.server.protocols.ldap.LDAPResultCode;
@@ -124,7 +124,7 @@
   public static boolean modifyLDIF(LDIFReader sourceReader,
                                    LDIFReader changeReader,
                                    LDIFWriter targetWriter,
-                                   List<Message> errorList)
+                                   List<LocalizableMessage> errorList)
          throws IOException, LDIFException
   {
     // Read the changes into memory.
@@ -438,7 +438,7 @@
     StringArgument  sourceFile;
     StringArgument  targetFile;
 
-    Message toolDescription = INFO_LDIFMODIFY_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_LDIFMODIFY_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
 
@@ -494,7 +494,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(message);
       return 1;
     }
@@ -507,7 +507,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(message);
       err.println(argParser.getUsage());
@@ -551,7 +551,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFMODIFY_CANNOT_INITIALIZE_JMX.get(
+          LocalizableMessage message = ERR_LDIFMODIFY_CANNOT_INITIALIZE_JMX.get(
                   String.valueOf(configFile.getValue()),
                                       e.getMessage());
           err.println(message);
@@ -565,7 +565,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFMODIFY_CANNOT_INITIALIZE_CONFIG.get(
+          LocalizableMessage message = ERR_LDIFMODIFY_CANNOT_INITIALIZE_CONFIG.get(
                   String.valueOf(configFile.getValue()),
                                       e.getMessage());
           err.println(message);
@@ -578,7 +578,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFMODIFY_CANNOT_INITIALIZE_SCHEMA.get(
+          LocalizableMessage message = ERR_LDIFMODIFY_CANNOT_INITIALIZE_SCHEMA.get(
                   String.valueOf(configFile.getValue()),
                                       e.getMessage());
           err.println(message);
@@ -592,7 +592,7 @@
     File source = new File(sourceFile.getValue());
     if (! source.exists())
     {
-      Message message = ERR_LDIFMODIFY_SOURCE_DOES_NOT_EXIST.get(
+      LocalizableMessage message = ERR_LDIFMODIFY_SOURCE_DOES_NOT_EXIST.get(
               sourceFile.getValue());
       err.println(message);
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
@@ -606,7 +606,7 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDIFMODIFY_CANNOT_OPEN_SOURCE.get(
+      LocalizableMessage message = ERR_LDIFMODIFY_CANNOT_OPEN_SOURCE.get(
               sourceFile.getValue(),
                                   String.valueOf(ioe));
       err.println(message);
@@ -617,7 +617,7 @@
     File changes = new File(changesFile.getValue());
     if (! changes.exists())
     {
-      Message message = ERR_LDIFMODIFY_CHANGES_DOES_NOT_EXIST.get(
+      LocalizableMessage message = ERR_LDIFMODIFY_CHANGES_DOES_NOT_EXIST.get(
               changesFile.getValue());
       err.println(message);
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
@@ -631,7 +631,7 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDIFMODIFY_CANNOT_OPEN_CHANGES.get(
+      LocalizableMessage message = ERR_LDIFMODIFY_CANNOT_OPEN_CHANGES.get(
               sourceFile.getValue(), ioe.getMessage());
       err.println(message);
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
@@ -648,7 +648,7 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_LDIFMODIFY_CANNOT_OPEN_TARGET.get(
+      LocalizableMessage message = ERR_LDIFMODIFY_CANNOT_OPEN_TARGET.get(
               sourceFile.getValue(), ioe.getMessage());
       err.println(message);
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
@@ -656,7 +656,7 @@
 
 
     // Actually invoke the LDIF procesing.
-    LinkedList<Message> errorList = new LinkedList<Message>();
+    LinkedList<LocalizableMessage> errorList = new LinkedList<LocalizableMessage>();
     boolean successful;
     try
     {
@@ -665,7 +665,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFMODIFY_ERROR_PROCESSING_LDIF.get(
+      LocalizableMessage message = ERR_LDIFMODIFY_ERROR_PROCESSING_LDIF.get(
               String.valueOf(e));
       err.println(message);
 
@@ -687,7 +687,7 @@
       targetWriter.close();
     } catch (Exception e) {}
 
-    for (Message s : errorList)
+    for (LocalizableMessage s : errorList)
     {
       err.println(s);
     }
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 2a56cd0..33c346e 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
@@ -35,7 +35,7 @@
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.extensions.ConfigFileHandler;
 import org.opends.server.protocols.ldap.LDAPResultCode;
@@ -173,7 +173,7 @@
     StringArgument      outputFile;
 
 
-    Message toolDescription = INFO_LDIFSEARCH_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_LDIFSEARCH_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false, true, 0, 0,
                                                   "[filter] [attributes ...]");
@@ -261,7 +261,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(message);
       return 1;
     }
@@ -274,7 +274,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(message);
       err.println(argParser.getUsage());
@@ -380,7 +380,7 @@
       ArrayList<String> trailingArguments = argParser.getTrailingArguments();
       if ((trailingArguments == null) || trailingArguments.isEmpty())
       {
-        Message message = ERR_LDIFSEARCH_NO_FILTER.get();
+        LocalizableMessage message = ERR_LDIFSEARCH_NO_FILTER.get();
         err.println(message);
         return 1;
       }
@@ -456,7 +456,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFSEARCH_CANNOT_INITIALIZE_JMX.get(
+        LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_INITIALIZE_JMX.get(
                 String.valueOf(configFile.getValue()),
                 e.getMessage());
         err.println(message);
@@ -470,7 +470,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFSEARCH_CANNOT_INITIALIZE_CONFIG.get(
+        LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_INITIALIZE_CONFIG.get(
                 String.valueOf(configFile.getValue()),
                 e.getMessage());
         err.println(message);
@@ -483,7 +483,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFSEARCH_CANNOT_INITIALIZE_SCHEMA.get(
+        LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_INITIALIZE_SCHEMA.get(
                 String.valueOf(configFile.getValue()),
                 e.getMessage());
         err.println(message);
@@ -530,7 +530,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFSEARCH_CANNOT_PARSE_FILTER.get(
+        LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_PARSE_FILTER.get(
                 filterString, e.getMessage());
         err.println(message);
         return 1;
@@ -597,7 +597,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_LDIFSEARCH_CANNOT_PARSE_BASE_DN.get(
+          LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_PARSE_BASE_DN.get(
                   dnString, e.getMessage());
           err.println(message);
           return 1;
@@ -625,7 +625,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFSEARCH_CANNOT_PARSE_TIME_LIMIT.get(
+      LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_PARSE_TIME_LIMIT.get(
               String.valueOf(e));
       err.println(message);
       return 1;
@@ -647,7 +647,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFSEARCH_CANNOT_PARSE_SIZE_LIMIT.get(
+      LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_PARSE_SIZE_LIMIT.get(
               String.valueOf(e));
       err.println(message);
       return 1;
@@ -708,7 +708,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_LDIFSEARCH_CANNOT_CREATE_READER.get(
+      LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_CREATE_READER.get(
               String.valueOf(e));
       err.println(message);
       return 1;
@@ -725,7 +725,7 @@
         reader.close();
       } catch (Exception e2) {}
 
-      Message message = ERR_LDIFSEARCH_CANNOT_CREATE_WRITER.get(
+      LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_CREATE_WRITER.get(
               String.valueOf(e));
       err.println(message);
       return 1;
@@ -744,7 +744,7 @@
       {
         resultCode = LDAPResultCode.TIME_LIMIT_EXCEEDED;
 
-        Message message = WARN_LDIFSEARCH_TIME_LIMIT_EXCEEDED.get();
+        LocalizableMessage message = WARN_LDIFSEARCH_TIME_LIMIT_EXCEEDED.get();
         err.println(message);
         break;
       }
@@ -831,7 +831,7 @@
         {
           resultCode = LDAPResultCode.SIZE_LIMIT_EXCEEDED;
 
-          Message message = WARN_LDIFSEARCH_SIZE_LIMIT_EXCEEDED.get();
+          LocalizableMessage message = WARN_LDIFSEARCH_SIZE_LIMIT_EXCEEDED.get();
           err.println(message);
           break;
         }
@@ -840,13 +840,13 @@
       {
         if (le.canContinueReading())
         {
-          Message message = ERR_LDIFSEARCH_CANNOT_READ_ENTRY_RECOVERABLE.get(
+          LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_READ_ENTRY_RECOVERABLE.get(
                   le.getMessage());
           err.println(message);
         }
         else
         {
-          Message message = ERR_LDIFSEARCH_CANNOT_READ_ENTRY_FATAL.get(
+          LocalizableMessage message = ERR_LDIFSEARCH_CANNOT_READ_ENTRY_FATAL.get(
                   le.getMessage());
           err.println(message);
           resultCode = LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
@@ -855,7 +855,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_LDIFSEARCH_ERROR_DURING_PROCESSING.get(
+        LocalizableMessage message = ERR_LDIFSEARCH_ERROR_DURING_PROCESSING.get(
                 String.valueOf(e));
         err.println(message);
         resultCode = LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
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 8b78069..2ee0408 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.tools;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -134,7 +134,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    Message toolDescription = INFO_LISTBACKENDS_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_LISTBACKENDS_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.ListBackends",
                             toolDescription, false);
@@ -187,7 +187,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -201,7 +201,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -221,7 +221,7 @@
     // arguments.
     if (backendID.isPresent() && baseDN.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
               backendID.getLongIdentifier(),
               baseDN.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -252,7 +252,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+        LocalizableMessage message = ERR_SERVER_BOOTSTRAP_ERROR.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -265,13 +265,13 @@
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -285,19 +285,19 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -312,14 +312,14 @@
     }
     catch (ConfigException ce)
     {
-      Message message = ERR_LISTBACKENDS_CANNOT_GET_BACKENDS.get(
+      LocalizableMessage message = ERR_LISTBACKENDS_CANNOT_GET_BACKENDS.get(
               ce.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
     catch (Exception e)
     {
-      Message message = ERR_LISTBACKENDS_CANNOT_GET_BACKENDS.get(
+      LocalizableMessage message = ERR_LISTBACKENDS_CANNOT_GET_BACKENDS.get(
               getExceptionMessage(e));
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -357,14 +357,14 @@
         }
         catch (DirectoryException de)
         {
-          Message message = ERR_LISTBACKENDS_INVALID_DN.get(
+          LocalizableMessage message = ERR_LISTBACKENDS_INVALID_DN.get(
                   dnStr, de.getMessage());
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
         }
         catch (Exception e)
         {
-          Message message = ERR_LISTBACKENDS_INVALID_DN.get(
+          LocalizableMessage message = ERR_LISTBACKENDS_INVALID_DN.get(
                   dnStr, getExceptionMessage(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -374,7 +374,7 @@
         String id = baseToIDMap.get(dn);
         if (id == null)
         {
-          Message message = INFO_LISTBACKENDS_NOT_BASE_DN.get(
+          LocalizableMessage message = INFO_LISTBACKENDS_NOT_BASE_DN.get(
                   dn.toString());
           out.println(message);
 
@@ -406,7 +406,7 @@
         }
         else
         {
-          Message message = INFO_LISTBACKENDS_BASE_FOR_ID.get(
+          LocalizableMessage message = INFO_LISTBACKENDS_BASE_FOR_ID.get(
                   dn.toString(), id);
           out.println(message);
         }
@@ -426,8 +426,8 @@
 
       // Figure out the length of the longest backend ID and base DN defined in
       // the server.  We'll use that information to try to align the output.
-      Message backendIDLabel = INFO_LISTBACKENDS_LABEL_BACKEND_ID.get();
-      Message baseDNLabel = INFO_LISTBACKENDS_LABEL_BASE_DN.get();
+      LocalizableMessage backendIDLabel = INFO_LISTBACKENDS_LABEL_BACKEND_ID.get();
+      LocalizableMessage baseDNLabel = INFO_LISTBACKENDS_LABEL_BASE_DN.get();
       int    backendIDLength = 10;
       int    baseDNLength    = 7;
 
@@ -438,7 +438,7 @@
         TreeSet<DN> baseDNs = backends.get(id);
         if (baseDNs == null)
         {
-          Message message = ERR_LISTBACKENDS_NO_SUCH_BACKEND.get(id);
+          LocalizableMessage message = ERR_LISTBACKENDS_NO_SUCH_BACKEND.get(id);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           iterator.remove();
         }
@@ -454,13 +454,13 @@
 
       if (backendIDs.isEmpty())
       {
-        Message message = ERR_LISTBACKENDS_NO_VALID_BACKENDS.get();
+        LocalizableMessage message = ERR_LISTBACKENDS_NO_VALID_BACKENDS.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
 
       TableBuilder table = new TableBuilder();
-      Message[] headers = {backendIDLabel, baseDNLabel};
+      LocalizableMessage[] headers = {backendIDLabel, baseDNLabel};
       for (int i=0; i< headers.length; i++)
       {
         table.appendHeading(headers[i]);
@@ -526,13 +526,13 @@
     }
     catch (DirectoryException de)
     {
-      Message message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
+      LocalizableMessage message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
           DN_BACKEND_BASE, de.getMessageObject());
       throw new ConfigException(message, de);
     }
     catch (Exception e)
     {
-      Message message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
+      LocalizableMessage message = ERR_CANNOT_DECODE_BACKEND_BASE_DN.get(
           DN_BACKEND_BASE, getExceptionMessage(e));
       throw new ConfigException(message, e);
     }
@@ -544,13 +544,13 @@
     }
     catch (ConfigException ce)
     {
-      Message message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
+      LocalizableMessage message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
           DN_BACKEND_BASE, ce.getMessage());
       throw new ConfigException(message, ce);
     }
     catch (Exception e)
     {
-      Message message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
+      LocalizableMessage message = ERR_CANNOT_RETRIEVE_BACKEND_BASE_ENTRY.get(
           DN_BACKEND_BASE, getExceptionMessage(e));
       throw new ConfigException(message, e);
     }
@@ -566,7 +566,7 @@
       String backendID = null;
       try
       {
-        Message msg = INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID.get();
+        LocalizableMessage msg = INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BACKEND_ID.get();
         StringConfigAttribute idStub =
              new StringConfigAttribute(ATTR_BACKEND_ID, msg,
                                        true, false, true);
@@ -583,13 +583,13 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+        LocalizableMessage message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
             String.valueOf(configEntry.getDN()), ce.getMessage());
         throw new ConfigException(message, ce);
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
+        LocalizableMessage message = ERR_CANNOT_DETERMINE_BACKEND_ID.get(
             String.valueOf(configEntry.getDN()), getExceptionMessage(e));
         throw new ConfigException(message, e);
       }
@@ -600,7 +600,7 @@
       TreeSet<DN> baseDNs = new TreeSet<DN>();
       try
       {
-        Message msg = INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS.get();
+        LocalizableMessage msg = INFO_CONFIG_BACKEND_ATTR_DESCRIPTION_BASE_DNS.get();
         DNConfigAttribute baseDNStub =
              new DNConfigAttribute(ATTR_BACKEND_BASE_DN, msg,
                                    true, true, true);
@@ -613,7 +613,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_DETERMINE_BASES_FOR_BACKEND.get(
+        LocalizableMessage message = ERR_CANNOT_DETERMINE_BASES_FOR_BACKEND.get(
             String.valueOf(configEntry.getDN()), getExceptionMessage(e));
         throw new ConfigException(message, e);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/ManageAccount.java b/opendj3-server-dev/src/server/org/opends/server/tools/ManageAccount.java
index 20d5f1e..8186abb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/ManageAccount.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/ManageAccount.java
@@ -37,7 +37,7 @@
 
 import javax.net.ssl.SSLException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AdministrationConnector;
 import org.opends.server.protocols.asn1.*;
 import org.opends.server.protocols.ldap.ExtendedRequestProtocolOp;
@@ -592,7 +592,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_PWPSTATE_CANNOT_SEND_REQUEST_EXTOP.get(
+        LocalizableMessage message = ERR_PWPSTATE_CANNOT_SEND_REQUEST_EXTOP.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_SERVER_DOWN;
@@ -605,7 +605,7 @@
         LDAPMessage responseMessage = ldapReader.readMessage();
         if (responseMessage == null)
         {
-          Message message =
+          LocalizableMessage message =
                   ERR_PWPSTATE_CONNECTION_CLOSED_READING_RESPONSE.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_SERVER_DOWN;
@@ -617,7 +617,7 @@
         int resultCode = extendedResponse.getResultCode();
         if (resultCode != LDAPResultCode.SUCCESS)
         {
-          Message message =
+          LocalizableMessage message =
                ERR_PWPSTATE_REQUEST_FAILED.get(resultCode,
                           LDAPResultCode.toString(resultCode),
                           String.valueOf(extendedResponse.getErrorMessage()));
@@ -656,7 +656,7 @@
           }
           catch (Exception e)
           {
-            Message message = ERR_PWPSTATE_CANNOT_DECODE_RESPONSE_OP.get(
+            LocalizableMessage message = ERR_PWPSTATE_CANNOT_DECODE_RESPONSE_OP.get(
                 getExceptionMessage(e));
             err.println(wrapText(message, MAX_LINE_WIDTH));
             continue;
@@ -665,7 +665,7 @@
           switch (opType)
           {
             case OP_GET_PASSWORD_POLICY_DN:
-              Message message = INFO_PWPSTATE_LABEL_PASSWORD_POLICY_DN.get();
+              LocalizableMessage message = INFO_PWPSTATE_LABEL_PASSWORD_POLICY_DN.get();
               printLabelAndValues(message, opValues);
               break;
 
@@ -787,7 +787,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_PWPSTATE_CANNOT_DECODE_RESPONSE_MESSAGE.get(
+        LocalizableMessage message = ERR_PWPSTATE_CANNOT_DECODE_RESPONSE_MESSAGE.get(
             getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_SERVER_DOWN;
@@ -977,7 +977,7 @@
       booleanValues.add(INFO_MULTICHOICE_FALSE_VALUE.get().toString());
 
 
-      Message msg = INFO_DESCRIPTION_PWPSTATE_GET_ALL.get();
+      LocalizableMessage msg = INFO_DESCRIPTION_PWPSTATE_GET_ALL.get();
       new SubCommand(argParser, SC_GET_ALL, msg);
 
       msg = INFO_DESCRIPTION_PWPSTATE_GET_PASSWORD_POLICY_DN.get();
@@ -1198,7 +1198,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
@@ -1210,7 +1210,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -1245,7 +1245,7 @@
     // return an error.
     if (bindPW.isPresent() && bindPWFile.isPresent())
     {
-      Message message = ERR_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+      LocalizableMessage message = ERR_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
               bindPW.getLongIdentifier(),
               bindPWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -1256,7 +1256,7 @@
     // then return an error.
     if (keyStorePW.isPresent() && keyStorePWFile.isPresent())
     {
-      Message message = ERR_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+      LocalizableMessage message = ERR_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
               keyStorePW.getLongIdentifier(),
               keyStorePWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -1268,7 +1268,7 @@
     // provided, then return an error.
     if (trustStorePW.isPresent() && trustStorePWFile.isPresent())
     {
-      Message message = ERR_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+      LocalizableMessage message = ERR_PWPSTATE_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
               trustStorePW.getLongIdentifier(),
               trustStorePWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -1294,7 +1294,7 @@
 
       connectionOptions.setSSLConnectionFactory(sslConnectionFactory);
     } catch (SSLConnectionException sce) {
-      Message message = ERR_PWPSTATE_CANNOT_INITIALIZE_SSL.get(
+      LocalizableMessage message = ERR_PWPSTATE_CANNOT_INITIALIZE_SSL.get(
         sce.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
@@ -1313,7 +1313,7 @@
         int equalPos = s.indexOf('=');
         if (equalPos <= 0)
         {
-          Message message = ERR_PWPSTATE_CANNOT_PARSE_SASL_OPTION.get(s);
+          LocalizableMessage message = ERR_PWPSTATE_CANNOT_PARSE_SASL_OPTION.get(s);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
@@ -1334,7 +1334,7 @@
 
       if (mechanism == null)
       {
-        Message message = ERR_PWPSTATE_NO_SASL_MECHANISM.get();
+        LocalizableMessage message = ERR_PWPSTATE_NO_SASL_MECHANISM.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
       }
@@ -1361,7 +1361,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_PWPSTATE_CANNOT_DETERMINE_PORT.get(
+      LocalizableMessage message = ERR_PWPSTATE_CANNOT_DETERMINE_PORT.get(
               port.getLongIdentifier(),
               ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -1369,7 +1369,7 @@
     }
     catch (LDAPConnectionException lce)
     {
-      Message message;
+      LocalizableMessage message;
       if ((lce.getCause() != null) && (lce.getCause().getCause() != null) &&
         lce.getCause().getCause() instanceof SSLException) {
         message = ERR_PWPSTATE_CANNOT_CONNECT_SSL.get(host.getValue(),
@@ -1404,7 +1404,7 @@
     SubCommand subCommand = argParser.getSubCommand();
     if (subCommand == null)
     {
-      Message message = ERR_PWPSTATE_NO_SUBCOMMAND.get();
+      LocalizableMessage message = ERR_PWPSTATE_NO_SUBCOMMAND.get();
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
@@ -1439,14 +1439,14 @@
         }
         else
         {
-          Message message = ERR_PWPSTATE_INVALID_BOOLEAN_VALUE.get(valueStr);
+          LocalizableMessage message = ERR_PWPSTATE_INVALID_BOOLEAN_VALUE.get(valueStr);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
       }
       else
       {
-        Message message = ERR_PWPSTATE_NO_BOOLEAN_VALUE.get();
+        LocalizableMessage message = ERR_PWPSTATE_NO_BOOLEAN_VALUE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
       }
@@ -1626,14 +1626,14 @@
         }
         else
         {
-          Message message = ERR_PWPSTATE_INVALID_BOOLEAN_VALUE.get(valueStr);
+          LocalizableMessage message = ERR_PWPSTATE_INVALID_BOOLEAN_VALUE.get(valueStr);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
       }
       else
       {
-        Message message = ERR_PWPSTATE_NO_BOOLEAN_VALUE.get();
+        LocalizableMessage message = ERR_PWPSTATE_NO_BOOLEAN_VALUE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
       }
@@ -1726,7 +1726,7 @@
     }
     else
     {
-      Message message = ERR_PWPSTATE_INVALID_SUBCOMMAND.get(subCommandName);
+      LocalizableMessage message = ERR_PWPSTATE_INVALID_SUBCOMMAND.get(subCommandName);
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
@@ -1744,7 +1744,7 @@
    * @param  msg     The message ID for the message to use as the label.
    * @param  values  The set of values for the associated state variable.
    */
-  private static void printLabelAndValues(Message msg, ArrayList<String> values)
+  private static void printLabelAndValues(LocalizableMessage msg, ArrayList<String> values)
   {
     String label = String.valueOf(msg);
     if ((values == null) || values.isEmpty())
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/ManageTasks.java b/opendj3-server-dev/src/server/org/opends/server/tools/ManageTasks.java
index 5f829f7..0acc9ce 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/ManageTasks.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/ManageTasks.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2008-2009 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;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.ToolMessages.*;
 
 import org.opends.server.api.ErrorLogPublisher;
@@ -269,7 +269,7 @@
       argParser.setUsageArgument(displayUsage);
     }
     catch (ArgumentException ae) {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       println(message);
       return 1;
     }
@@ -289,7 +289,7 @@
       StaticUtils.checkOnlyOneArgPresent(task, summary, cancel);
     }
     catch (ArgumentException ae) {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       println(message);
       println(argParser.getUsageMessage());
       return 1;
@@ -351,7 +351,7 @@
         println(INFO_TASKINFO_LDAP_EXCEPTION.get(lce.getMessageObject()));
         return 1;
       } catch (Exception e) {
-        println(Message.raw(e.getMessage()));
+        println(LocalizableMessage.raw(e.getMessage()));
         return 1;
       }
     }
@@ -444,7 +444,7 @@
       tablePrinter.setIndentWidth(INDENT);
       tablePrinter.setTotalWidth(80);
       table.print(tablePrinter);
-      getOutputStream().println(Message.raw(sw.getBuffer()));
+      getOutputStream().println(LocalizableMessage.raw(sw.getBuffer()));
     } else {
       getOutputStream().println(INFO_TASKINFO_NO_TASKS.get());
       getOutputStream().println();
@@ -487,7 +487,7 @@
         taskIds.add(taskId);
         final TaskEntry taskEntry = mapIdToEntry.get(taskId);
         menuBuilder.addNumberedOption(
-                Message.raw(taskEntry.getId()),
+                LocalizableMessage.raw(taskEntry.getId()),
                 new TaskDrilldownMenu(taskId),
                 taskEntry.getType(), taskEntry.getState());
         index++;
@@ -639,7 +639,7 @@
                     INFO_TASKINFO_CMD_REFRESH_CHAR.get(),
                     INFO_TASKINFO_CMD_REFRESH.get(),
                     new PrintTaskInfo(taskId));
-            List<Message> logs = taskEntry.getLogMessages();
+            List<LocalizableMessage> logs = taskEntry.getLogMessages();
             if (logs != null && logs.size() > 0) {
               menuBuilder.addCharOption(
                       INFO_TASKINFO_CMD_VIEW_LOGS_CHAR.get(),
@@ -661,7 +661,7 @@
               System.exit(0);
             }
           } catch (Exception e) {
-            app.println(Message.raw(e.getMessage()));
+            app.println(LocalizableMessage.raw(e.getMessage()));
           }
         }
       } else {
@@ -693,7 +693,7 @@
     public MenuResult<TaskEntry> invoke(ManageTasks app)
             throws CLIException
     {
-      Message m;
+      LocalizableMessage m;
       TaskEntry taskEntry;
       try {
         taskEntry = app.getTaskClient().getTaskEntry(taskId);
@@ -722,7 +722,7 @@
           table.startRow();
           table.appendCell(INFO_TASKINFO_FIELD_SCHEDULED_START.get());
           m = taskEntry.getScheduledStartTime();
-          if (m == null || m.equals(Message.EMPTY)) {
+          if (m == null || m.equals(LocalizableMessage.EMPTY)) {
             table.appendCell(INFO_TASKINFO_IMMEDIATE_EXECUTION.get());
           } else {
             table.appendCell(m);
@@ -766,14 +766,14 @@
         tablePrinter.setColumnWidth(1, 0);
         table.print(tablePrinter);
         app.getOutputStream().println();
-        app.getOutputStream().println(Message.raw(sw.getBuffer().toString()));
+        app.getOutputStream().println(LocalizableMessage.raw(sw.getBuffer().toString()));
 
         // Create a table for the task options
         table = new TableBuilder();
         table.appendHeading(INFO_TASKINFO_OPTIONS.get(taskEntry.getType()));
-        Map<Message,List<String>> taskSpecificAttrs =
+        Map<LocalizableMessage,List<String>> taskSpecificAttrs =
                 taskEntry.getTaskSpecificAttributeValuePairs();
-        for (Message attrName : taskSpecificAttrs.keySet()) {
+        for (LocalizableMessage attrName : taskSpecificAttrs.keySet()) {
           table.startRow();
           table.appendCell(attrName);
           List<String> values = taskSpecificAttrs.get(attrName);
@@ -794,10 +794,10 @@
         tablePrinter.setIndentWidth(INDENT);
         tablePrinter.setColumnWidth(1, 0);
         table.print(tablePrinter);
-        app.getOutputStream().println(Message.raw(sw.getBuffer().toString()));
+        app.getOutputStream().println(LocalizableMessage.raw(sw.getBuffer().toString()));
 
         // Print the last log message if any
-        List<Message> logs = taskEntry.getLogMessages();
+        List<LocalizableMessage> logs = taskEntry.getLogMessages();
         if (logs != null && logs.size() > 0) {
 
           // Create a table for the last log entry
@@ -812,7 +812,7 @@
           tablePrinter.setIndentWidth(INDENT);
           tablePrinter.setColumnWidth(0, 0);
           table.print(tablePrinter);
-          app.getOutputStream().println(Message.raw(sw.getBuffer().toString()));
+          app.getOutputStream().println(LocalizableMessage.raw(sw.getBuffer().toString()));
         }
 
         app.getOutputStream().println();
@@ -831,7 +831,7 @@
      * @param values of the attribute
      */
     private void writeMultiValueCells(TableBuilder table,
-                                      Message fieldLabel,
+                                      LocalizableMessage fieldLabel,
                                       List<?> values) {
       writeMultiValueCells(table, fieldLabel, values, INFO_TASKINFO_NONE.get());
     }
@@ -845,9 +845,9 @@
      * @param noneLabel label for the value column when there are no values
      */
     private void writeMultiValueCells(TableBuilder table,
-                                      Message fieldLabel,
+                                      LocalizableMessage fieldLabel,
                                       List<?> values,
-                                      Message noneLabel) {
+                                      LocalizableMessage noneLabel) {
       table.startRow();
       table.appendCell(fieldLabel);
       if (values.isEmpty()) {
@@ -889,14 +889,14 @@
       TaskEntry taskEntry = null;
       try {
         taskEntry = app.getTaskClient().getTaskEntry(taskId);
-        List<Message> logs = taskEntry.getLogMessages();
+        List<LocalizableMessage> logs = taskEntry.getLogMessages();
         app.getOutputStream().println();
 
         // Create a table for the last log entry
         TableBuilder table = new TableBuilder();
         table.appendHeading(INFO_TASKINFO_FIELD_LOG.get());
         if (logs != null && logs.size() > 0) {
-          for (Message log : logs) {
+          for (LocalizableMessage log : logs) {
             table.startRow();
             table.appendCell(log);
           }
@@ -910,7 +910,7 @@
         tablePrinter.setIndentWidth(INDENT);
         tablePrinter.setColumnWidth(0, 0);
         table.print(tablePrinter);
-        app.getOutputStream().println(Message.raw(sw.getBuffer().toString()));
+        app.getOutputStream().println(LocalizableMessage.raw(sw.getBuffer().toString()));
         app.getOutputStream().println();
       } catch (Exception e) {
         app.println(ERR_TASKINFO_ACCESSING_LOGS.get(taskId, e.getMessage()));
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/PromptTrustManager.java b/opendj3-server-dev/src/server/org/opends/server/tools/PromptTrustManager.java
index edb42eb..7e7c70d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/PromptTrustManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/PromptTrustManager.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -102,7 +103,7 @@
   public void checkClientTrusted(X509Certificate[] chain, String authType)
          throws CertificateException
   {
-    Message message = ERR_PROMPTTM_REJECTING_CLIENT_CERT.get();
+    LocalizableMessage message = ERR_PROMPTTM_REJECTING_CLIENT_CERT.get();
     throw new CertificateException(message.toString());
   }
 
@@ -133,13 +134,13 @@
 
       if (currentDate.after(notAfterDate))
       {
-        Message message = WARN_PROMPTTM_CERT_EXPIRED.get(
+        LocalizableMessage message = WARN_PROMPTTM_CERT_EXPIRED.get(
                 String.valueOf(notAfterDate));
         System.err.println(message);
       }
       else if (currentDate.before(notBeforeDate))
       {
-        Message message = WARN_PROMPTTM_CERT_NOT_YET_VALID.get(
+        LocalizableMessage message = WARN_PROMPTTM_CERT_NOT_YET_VALID.get(
                 String.valueOf(notBeforeDate));
         System.err.println(message);
       }
@@ -152,7 +153,7 @@
     }
 
 
-    Message prompt = INFO_PROMPTTM_YESNO_PROMPT.get();
+    LocalizableMessage prompt = INFO_PROMPTTM_YESNO_PROMPT.get();
     BufferedReader reader =
          new BufferedReader(new InputStreamReader(System.in));
     while (true)
@@ -175,7 +176,7 @@
             line.equalsIgnoreCase(
             INFO_PROMPT_NO_FIRST_LETTER_ANSWER.get().toString()))
         {
-          Message message = ERR_PROMPTTM_USER_REJECTED.get();
+          LocalizableMessage message = ERR_PROMPTTM_USER_REJECTED.get();
           throw new CertificateException(message.toString());
         }
       } catch (IOException ioe) {}
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 162e4f7..0d81793 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
@@ -26,7 +26,7 @@
  */
 package org.opends.server.tools;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.messages.ToolMessages.*;
 import static org.opends.server.config.ConfigConstants.*;
@@ -151,7 +151,7 @@
     }
     catch (ArgumentException ae)
     {
-      final Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      final LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -164,7 +164,7 @@
     }
     catch (ArgumentException ae)
     {
-      final Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -189,7 +189,7 @@
     if (indexList.getValues().size() <= 0 && !rebuildAll.isPresent()
         && !rebuildDegraded.isPresent())
     {
-      final Message message =
+      final LocalizableMessage message =
           ERR_REBUILDINDEX_REQUIRES_AT_LEAST_ONE_INDEX.get();
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -199,7 +199,7 @@
 
     if (rebuildAll.isPresent() && indexList.isPresent())
     {
-      final Message msg = ERR_REBUILDINDEX_REBUILD_ALL_ERROR.get();
+      final LocalizableMessage msg = ERR_REBUILDINDEX_REBUILD_ALL_ERROR.get();
       err.println(wrapText(msg, MAX_LINE_WIDTH));
       out.println(argParser.getUsage());
       return 1;
@@ -207,7 +207,7 @@
 
     if (rebuildDegraded.isPresent() && indexList.isPresent())
     {
-      final Message msg = ERR_REBUILDINDEX_REBUILD_DEGRADED_ERROR.get("index");
+      final LocalizableMessage msg = ERR_REBUILDINDEX_REBUILD_DEGRADED_ERROR.get("index");
       err.println(wrapText(msg, MAX_LINE_WIDTH));
       out.println(argParser.getUsage());
       return 1;
@@ -215,7 +215,7 @@
 
     if (rebuildDegraded.isPresent() && clearDegradedState.isPresent())
     {
-      final Message msg =
+      final LocalizableMessage msg =
           ERR_REBUILDINDEX_REBUILD_DEGRADED_ERROR.get("clearDegradedState");
       err.println(wrapText(msg, MAX_LINE_WIDTH));
       out.println(argParser.getUsage());
@@ -224,7 +224,7 @@
 
     if (rebuildAll.isPresent() && rebuildDegraded.isPresent())
     {
-      final Message msg =
+      final LocalizableMessage msg =
           ERR_REBUILDINDEX_REBUILD_ALL_DEGRADED_ERROR.get("rebuildDegraded");
       err.println(wrapText(msg, MAX_LINE_WIDTH));
       out.println(argParser.getUsage());
@@ -233,7 +233,7 @@
 
     if (rebuildAll.isPresent() && clearDegradedState.isPresent())
     {
-      final Message msg =
+      final LocalizableMessage msg =
           ERR_REBUILDINDEX_REBUILD_ALL_DEGRADED_ERROR.get("clearDegradedState");
       err.println(wrapText(msg, MAX_LINE_WIDTH));
       out.println(argParser.getUsage());
@@ -365,7 +365,7 @@
     }
     catch (Exception e)
     {
-      final Message message =
+      final LocalizableMessage message =
           ERR_CANNOT_DECODE_BASE_DN.get(dn,
               getExceptionMessage(e));
       logError(message);
@@ -379,7 +379,7 @@
     }
     catch (Exception e)
     {
-      logError(Message.raw(e.getMessage()));
+      logError(LocalizableMessage.raw(e.getMessage()));
       return false;
     }
 
@@ -448,7 +448,7 @@
     }
     catch (Exception e)
     {
-      final Message message =
+      final LocalizableMessage message =
           ERR_SERVER_BOOTSTRAP_ERROR.get(getExceptionMessage(e));
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -461,7 +461,7 @@
     }
     catch (Exception ex)
     {
-      Message message = null;
+      LocalizableMessage message = null;
       if (ex instanceof InitializationException)
       {
         message = ERR_CANNOT_LOAD_CONFIG.get(ex.getMessage());
@@ -481,7 +481,7 @@
     }
     catch (Exception e)
     {
-      Message message = null;
+      LocalizableMessage message = null;
       if (e instanceof ConfigException || e instanceof InitializationException)
       {
         message = ERR_CANNOT_LOAD_SCHEMA.get(e.getMessage());
@@ -502,7 +502,7 @@
     }
     catch (Exception ex)
     {
-      Message message = null;
+      LocalizableMessage message = null;
       if (ex instanceof ConfigException
           || ex instanceof InitializationException)
       {
@@ -524,7 +524,7 @@
     }
     catch (Exception ex)
     {
-      Message message = null;
+      LocalizableMessage message = null;
       if (ex instanceof ConfigException
           || ex instanceof InitializationException)
       {
@@ -603,7 +603,7 @@
       final StringBuilder failureReason = new StringBuilder();
       if (!LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        final Message message =
+        final LocalizableMessage message =
             ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(backend
                 .getBackendID(), String.valueOf(failureReason));
         logError(message);
@@ -612,7 +612,7 @@
     }
     catch (Exception e)
     {
-      final Message message =
+      final LocalizableMessage message =
           ERR_REBUILDINDEX_CANNOT_EXCLUSIVE_LOCK_BACKEND.get(backend
               .getBackendID(), getExceptionMessage(e));
       logError(message);
@@ -699,7 +699,7 @@
           }
           else
           {
-            final Message message =
+            final LocalizableMessage message =
                 ERR_MULTIPLE_BACKENDS_FOR_BASE.get(baseDNString.getValue());
             throw new ConfigException(message);
           }
@@ -710,14 +710,14 @@
 
     if (backend == null)
     {
-      final Message message =
+      final LocalizableMessage message =
           ERR_NO_BACKENDS_FOR_BASE.get(baseDNString.getValue());
       throw new ConfigException(message);
     }
 
     if (!(backend instanceof BackendImpl))
     {
-      final Message message = ERR_BACKEND_NO_INDEXING_SUPPORT.get();
+      final LocalizableMessage message = ERR_BACKEND_NO_INDEXING_SUPPORT.get();
       throw new ConfigException(message);
     }
     return backend;
@@ -750,7 +750,7 @@
       }
       catch (ArgumentException ae)
       {
-        final Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+        final LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
         out.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -761,7 +761,7 @@
       }
       catch (ArgumentException ae)
       {
-        final Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+        final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
         out.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/RestoreDB.java b/opendj3-server-dev/src/server/org/opends/server/tools/RestoreDB.java
index f1c939f..aaae67d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/RestoreDB.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/RestoreDB.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.tools;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -209,7 +209,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -233,7 +233,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -257,7 +257,7 @@
 
 
     if (listBackups.isPresent() && argParser.connectionArgumentsPresent()) {
-      Message message = ERR_LDAP_CONN_INCOMPATIBLE_ARGS.get(
+      LocalizableMessage message = ERR_LDAP_CONN_INCOMPATIBLE_ARGS.get(
               listBackups.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -348,7 +348,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+        LocalizableMessage message = ERR_SERVER_BOOTSTRAP_ERROR.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -361,13 +361,13 @@
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -381,19 +381,19 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -407,21 +407,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
                 ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -435,21 +435,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
+        LocalizableMessage message = ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                 getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -484,7 +484,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY.get(
+      LocalizableMessage message = ERR_RESTOREDB_CANNOT_READ_BACKUP_DIRECTORY.get(
           backupDirectory.getValue(), getExceptionMessage(e));
       logError(message);
       return 1;
@@ -497,7 +497,7 @@
     {
       for (BackupInfo backupInfo : backupDir.getBackups().values())
       {
-        Message message = INFO_RESTOREDB_LIST_BACKUP_ID.get(
+        LocalizableMessage message = INFO_RESTOREDB_LIST_BACKUP_ID.get(
                 backupInfo.getBackupID());
         out.println(message);
 
@@ -572,7 +572,7 @@
       BackupInfo backupInfo = backupDir.getLatestBackup();
       if (backupInfo == null)
       {
-        Message message = ERR_RESTOREDB_NO_BACKUPS_IN_DIRECTORY.get(
+        LocalizableMessage message = ERR_RESTOREDB_NO_BACKUPS_IN_DIRECTORY.get(
             backupDirectory.getValue());
         logError(message);
         return 1;
@@ -584,14 +584,14 @@
         backupInfo = backupDir.getBackupInfo(backupID);
         if (backupInfo == null)
         {
-          Message message = ERR_RESTOREDB_INVALID_BACKUP_ID.get(
+          LocalizableMessage message = ERR_RESTOREDB_INVALID_BACKUP_ID.get(
                   backupID, backupDirectory.getValue());
           logError(message);
           return 1;
         }
       }
       if (backupInfo.isEncrypted() || null != backupInfo.getSignedHash()) {
-        Message message = ERR_RESTOREDB_ENCRYPT_OR_SIGN_REQUIRES_ONLINE.get();
+        LocalizableMessage message = ERR_RESTOREDB_ENCRYPT_OR_SIGN_REQUIRES_ONLINE.get();
         logError(message);
         return 1;
       }
@@ -626,14 +626,14 @@
 
     if (backend == null)
     {
-      Message message = ERR_RESTOREDB_NO_BACKENDS_FOR_DN.get(
+      LocalizableMessage message = ERR_RESTOREDB_NO_BACKENDS_FOR_DN.get(
           backupDirectory.getValue(), configEntryDN.toString());
       logError(message);
       return 1;
     }
     else if (! backend.supportsRestore())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_RESTOREDB_CANNOT_RESTORE.get(backend.getBackendID());
       logError(message);
       return 1;
@@ -652,7 +652,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        Message message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
         return 1;
@@ -660,7 +660,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_RESTOREDB_CANNOT_LOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       logError(message);
       return 1;
@@ -674,13 +674,13 @@
     }
     catch (DirectoryException de)
     {
-      Message message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
+      LocalizableMessage message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
           backupID, backupDir.getPath(), de.getMessageObject());
       logError(message);
     }
     catch (Exception e)
     {
-      Message message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
+      LocalizableMessage message = ERR_RESTOREDB_ERROR_DURING_BACKUP.get(
           backupID, backupDir.getPath(), getExceptionMessage(e));
       logError(message);
     }
@@ -693,14 +693,14 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        Message message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
       }
     }
     catch (Exception e)
     {
-      Message message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
+      LocalizableMessage message = WARN_RESTOREDB_CANNOT_UNLOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       logError(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/SSLConnectionException.java b/opendj3-server-dev/src/server/org/opends/server/tools/SSLConnectionException.java
index a4b6ea3..bcba8b2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/SSLConnectionException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/SSLConnectionException.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.OpenDsException;
 
@@ -55,7 +56,7 @@
    *
    * @param  message    The message to use for this exception.
    */
-  public SSLConnectionException(Message message)
+  public SSLConnectionException(LocalizableMessage message)
   {
     super(message);
 
@@ -71,7 +72,7 @@
    * @param  cause      The underlying cause that triggered this
    *                    exception.
    */
-  public SSLConnectionException(Message message, Throwable cause)
+  public SSLConnectionException(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/StartWindowsService.java b/opendj3-server-dev/src/server/org/opends/server/tools/StartWindowsService.java
index 3bee7c8..6f685de 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/StartWindowsService.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/StartWindowsService.java
@@ -22,11 +22,11 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 
 package org.opends.server.tools;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.OutputStream;
 import java.io.PrintStream;
@@ -91,7 +91,7 @@
     if (serviceName == null)
     {
 
-      Message message = ERR_WINDOWS_SERVICE_NOT_FOUND.get();
+      LocalizableMessage message = ERR_WINDOWS_SERVICE_NOT_FOUND.get();
       err.println(message);
       returnValue = SERVICE_NOT_FOUND;
     }
@@ -133,7 +133,7 @@
       catch (Throwable t)
       {
 
-        Message message = ERR_WINDOWS_SERVICE_START_ERROR.get();
+        LocalizableMessage message = ERR_WINDOWS_SERVICE_START_ERROR.get();
         err.println(message);
         err.println("Exception:" + t.toString());
         returnValue = SERVICE_START_ERROR;
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/StopDS.java b/opendj3-server-dev/src/server/org/opends/server/tools/StopDS.java
index a9b1cbb..a9e29ff 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/StopDS.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/StopDS.java
@@ -38,7 +38,7 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.net.ssl.SSLException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AdministrationConnector;
 import org.opends.server.controls.ProxiedAuthV2Control;
 import org.opends.server.core.DirectoryServer;
@@ -183,7 +183,7 @@
 
 
     // Define all the arguments that may be used with this program.
-    Message toolDescription = INFO_STOPDS_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_STOPDS_TOOL_DESCRIPTION.get();
     ArgumentParser    argParser = new ArgumentParser(CLASS_NAME,
                                                      toolDescription, false);
     BooleanArgument   checkStoppability;
@@ -405,7 +405,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
@@ -419,7 +419,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -448,7 +448,7 @@
     // an error.
     if (bindPW.isPresent() && bindPWFile.isPresent())
     {
-      Message message = ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+      LocalizableMessage message = ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
               bindPW.getLongIdentifier(),
               bindPWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -460,7 +460,7 @@
     // then return an error.
     if (keyStorePW.isPresent() && keyStorePWFile.isPresent())
     {
-      Message message = ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+      LocalizableMessage message = ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
               keyStorePW.getLongIdentifier(),
               keyStorePWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -472,7 +472,7 @@
     // provided, then return an error.
     if (trustStorePW.isPresent() && trustStorePWFile.isPresent())
     {
-      Message message = ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+      LocalizableMessage message = ERR_STOPDS_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
               trustStorePW.getLongIdentifier(),
               trustStorePWFile.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -493,7 +493,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_STOPDS_CANNOT_DECODE_STOP_TIME.get();
+          LocalizableMessage message = ERR_STOPDS_CANNOT_DECODE_STOP_TIME.get();
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
@@ -501,7 +501,7 @@
         Date currentDate = new Date(System.currentTimeMillis());
         if (currentDate.after(stopTime))
         {
-          Message message = ERR_STOPDS_DATETIME_ALREADY_PASSED.get(
+          LocalizableMessage message = ERR_STOPDS_DATETIME_ALREADY_PASSED.get(
               timeStr);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
@@ -533,7 +533,7 @@
 
       connectionOptions.setSSLConnectionFactory(sslConnectionFactory);
     } catch (SSLConnectionException sce) {
-      Message message =
+      LocalizableMessage message =
         ERR_STOPDS_CANNOT_INITIALIZE_SSL.get(sce.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
@@ -552,7 +552,7 @@
         int equalPos = s.indexOf('=');
         if (equalPos <= 0)
         {
-          Message message = ERR_STOPDS_CANNOT_PARSE_SASL_OPTION.get(s);
+          LocalizableMessage message = ERR_STOPDS_CANNOT_PARSE_SASL_OPTION.get(s);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
         }
@@ -573,7 +573,7 @@
 
       if (mechanism == null)
       {
-        Message message = ERR_STOPDS_NO_SASL_MECHANISM.get();
+        LocalizableMessage message = ERR_STOPDS_NO_SASL_MECHANISM.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_PARAM_ERROR;
       }
@@ -601,7 +601,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_STOPDS_CANNOT_DETERMINE_PORT.get(
+      LocalizableMessage message = ERR_STOPDS_CANNOT_DETERMINE_PORT.get(
               port.getLongIdentifier(),
               ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -609,7 +609,7 @@
     }
     catch (LDAPConnectionException lce)
     {
-      Message message = null;
+      LocalizableMessage message = null;
       if ((lce.getCause() != null) && (lce.getCause().getCause() != null) &&
         lce.getCause().getCause() instanceof SSLException) {
       message = ERR_STOPDS_CANNOT_CONNECT_SSL.get(host.getValue(),
@@ -701,26 +701,26 @@
       responseMessage = reader.readMessage();
       if (responseMessage == null)
       {
-        Message message = ERR_STOPDS_UNEXPECTED_CONNECTION_CLOSURE.get();
+        LocalizableMessage message = ERR_STOPDS_UNEXPECTED_CONNECTION_CLOSURE.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return LDAPResultCode.CLIENT_SIDE_SERVER_DOWN;
       }
     }
     catch (IOException ioe)
     {
-      Message message = ERR_STOPDS_IO_ERROR.get(String.valueOf(ioe));
+      LocalizableMessage message = ERR_STOPDS_IO_ERROR.get(String.valueOf(ioe));
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_SERVER_DOWN;
     }
     catch (ASN1Exception ae)
     {
-      Message message = ERR_STOPDS_DECODE_ERROR.get(ae.getMessage());
+      LocalizableMessage message = ERR_STOPDS_DECODE_ERROR.get(ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_DECODING_ERROR;
     }
     catch (LDAPException le)
     {
-      Message message = ERR_STOPDS_DECODE_ERROR.get(le.getMessage());
+      LocalizableMessage message = ERR_STOPDS_DECODE_ERROR.get(le.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_DECODING_ERROR;
     }
@@ -740,7 +740,7 @@
         if ((responseOID != null) &&
             (responseOID.equals(LDAPConstants.OID_NOTICE_OF_DISCONNECTION)))
         {
-          Message message = extendedResponse.getErrorMessage();
+          LocalizableMessage message = extendedResponse.getErrorMessage();
           if (message != null)
           {
             err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -751,7 +751,7 @@
       }
 
 
-      Message message = ERR_STOPDS_INVALID_RESPONSE_TYPE.get(
+      LocalizableMessage message = ERR_STOPDS_INVALID_RESPONSE_TYPE.get(
               responseMessage.getProtocolOpName());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR;
@@ -760,7 +760,7 @@
 
     AddResponseProtocolOp addResponse =
          responseMessage.getAddResponseProtocolOp();
-    Message errorMessage = addResponse.getErrorMessage();
+    LocalizableMessage errorMessage = addResponse.getErrorMessage();
     if (errorMessage != null)
     {
       err.println(wrapText(errorMessage, MAX_LINE_WIDTH));
@@ -830,7 +830,7 @@
         {
           // The server is not running: write a message informing of that
           // in the standard out (this is not an error message).
-          Message message = INFO_STOPDS_SERVER_ALREADY_STOPPED.get();
+          LocalizableMessage message = INFO_STOPDS_SERVER_ALREADY_STOPPED.get();
           out.println(message);
           LockFileManager.releaseLock(lockFile, failureReason);
           isServerRunning = false;
@@ -916,7 +916,7 @@
             }
             // Display a message informing that we are going to the server.
 
-            Message message = INFO_STOPDS_GOING_TO_STOP.get();
+            LocalizableMessage message = INFO_STOPDS_GOING_TO_STOP.get();
             out.println(message);
           }
         }
@@ -924,7 +924,7 @@
         {
           // Display a message informing that we are going to the server.
 
-          Message message = INFO_STOPDS_GOING_TO_STOP.get();
+          LocalizableMessage message = INFO_STOPDS_GOING_TO_STOP.get();
           out.println(message);
 
           if (restartPresent)
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/StopWindowsService.java b/opendj3-server-dev/src/server/org/opends/server/tools/StopWindowsService.java
index 492d334..862c1a3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/StopWindowsService.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/StopWindowsService.java
@@ -22,11 +22,11 @@
  *
  *
  *      Copyright 2008-2009 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;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.OutputStream;
 import java.io.PrintStream;
@@ -90,7 +90,7 @@
     if (serviceName == null)
     {
 
-      Message message = ERR_WINDOWS_SERVICE_NOT_FOUND.get();
+      LocalizableMessage message = ERR_WINDOWS_SERVICE_NOT_FOUND.get();
       err.println(message);
       returnValue = SERVICE_NOT_FOUND;
     }
@@ -137,7 +137,7 @@
       catch (Throwable t)
       {
 
-        Message message = ERR_WINDOWS_SERVICE_STOP_ERROR.get();
+        LocalizableMessage message = ERR_WINDOWS_SERVICE_STOP_ERROR.get();
         err.println(message);
         err.println("Exception:" + t.toString());
         returnValue = SERVICE_STOP_ERROR;
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 950d1e5..b0794ce 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
@@ -59,7 +59,7 @@
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.ToolMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -121,7 +121,7 @@
 
 
     // Create the command-line argument parser for use with this program.
-    Message toolDescription = INFO_VERIFYINDEX_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_VERIFYINDEX_TOOL_DESCRIPTION.get();
     ArgumentParser argParser =
          new ArgumentParser("org.opends.server.tools.VerifyIndex",
                             toolDescription, false);
@@ -184,7 +184,7 @@
     catch (ArgumentException ae)
     {
 
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -199,7 +199,7 @@
     catch (ArgumentException ae)
     {
 
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
@@ -224,7 +224,7 @@
 
     if (cleanMode.isPresent() && indexList.getValues().size() != 1)
     {
-      Message message =
+      LocalizableMessage message =
               ERR_VERIFYINDEX_VERIFY_CLEAN_REQUIRES_SINGLE_INDEX.get();
 
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -256,7 +256,7 @@
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_SERVER_BOOTSTRAP_ERROR.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -269,14 +269,14 @@
       }
       catch (InitializationException ie)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_LOAD_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -290,19 +290,19 @@
       }
       catch (ConfigException ce)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
+        LocalizableMessage message = ERR_CANNOT_LOAD_SCHEMA.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
@@ -316,21 +316,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CORE_CONFIG.get(getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -344,21 +344,21 @@
       }
       catch (ConfigException ce)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(ce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (InitializationException ie)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(ie.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
       }
       catch (Exception e)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_CANNOT_INITIALIZE_CRYPTO_MANAGER.get(
                         getExceptionMessage(e));
         err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -395,14 +395,14 @@
     }
     catch (DirectoryException de)
     {
-      Message message = ERR_CANNOT_DECODE_BASE_DN.get(
+      LocalizableMessage message = ERR_CANNOT_DECODE_BASE_DN.get(
           baseDNString.getValue(), de.getMessageObject());
       logError(message);
       return 1;
     }
     catch (Exception e)
     {
-      Message message = ERR_CANNOT_DECODE_BASE_DN.get(
+      LocalizableMessage message = ERR_CANNOT_DECODE_BASE_DN.get(
           baseDNString.getValue(), getExceptionMessage(e));
       logError(message);
       return 1;
@@ -434,7 +434,7 @@
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_MULTIPLE_BACKENDS_FOR_BASE.get(baseDNString.getValue());
             logError(message);
             return 1;
@@ -446,14 +446,14 @@
 
     if (backend == null)
     {
-      Message message = ERR_NO_BACKENDS_FOR_BASE.get(baseDNString.getValue());
+      LocalizableMessage message = ERR_NO_BACKENDS_FOR_BASE.get(baseDNString.getValue());
       logError(message);
       return 1;
     }
 
     if (!(backend instanceof BackendImpl))
     {
-      Message message = ERR_BACKEND_NO_INDEXING_SUPPORT.get();
+      LocalizableMessage message = ERR_BACKEND_NO_INDEXING_SUPPORT.get();
       logError(message);
       return 1;
     }
@@ -484,7 +484,7 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.acquireSharedLock(lockFile, failureReason))
       {
-        Message message = ERR_VERIFYINDEX_CANNOT_LOCK_BACKEND.get(
+        LocalizableMessage message = ERR_VERIFYINDEX_CANNOT_LOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
         return 1;
@@ -492,7 +492,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_VERIFYINDEX_CANNOT_LOCK_BACKEND.get(
+      LocalizableMessage message = ERR_VERIFYINDEX_CANNOT_LOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       logError(message);
       return 1;
@@ -519,7 +519,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_VERIFYINDEX_ERROR_DURING_VERIFY.get(
+      LocalizableMessage message = ERR_VERIFYINDEX_ERROR_DURING_VERIFY.get(
           stackTraceToSingleLineString(e));
       logError(message);
       returnCode = 1;
@@ -533,14 +533,14 @@
       StringBuilder failureReason = new StringBuilder();
       if (! LockFileManager.releaseLock(lockFile, failureReason))
       {
-        Message message = WARN_VERIFYINDEX_CANNOT_UNLOCK_BACKEND.get(
+        LocalizableMessage message = WARN_VERIFYINDEX_CANNOT_UNLOCK_BACKEND.get(
             backend.getBackendID(), String.valueOf(failureReason));
         logError(message);
       }
     }
     catch (Exception e)
     {
-      Message message = WARN_VERIFYINDEX_CANNOT_UNLOCK_BACKEND.get(
+      LocalizableMessage message = WARN_VERIFYINDEX_CANNOT_UNLOCK_BACKEND.get(
           backend.getBackendID(), getExceptionMessage(e));
       logError(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/WaitForFileDelete.java b/opendj3-server-dev/src/server/org/opends/server/tools/WaitForFileDelete.java
index 398303b..b2e66bb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/WaitForFileDelete.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/WaitForFileDelete.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;
 
@@ -32,7 +32,7 @@
 import java.io.PrintStream;
 import java.io.RandomAccessFile;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.NullOutputStream;
 import org.opends.server.util.args.ArgumentException;
@@ -181,7 +181,7 @@
     BooleanArgument useLastKnownGoodConfig = null;
     BooleanArgument quietMode              = null;
 
-    Message toolDescription = INFO_WAIT4DEL_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_WAIT4DEL_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                   false);
 
@@ -238,7 +238,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       println(message);
       return EXIT_CODE_INTERNAL_ERROR;
     }
@@ -251,10 +251,10 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
       println(message);
-      println(Message.raw(argParser.getUsage()));
+      println(LocalizableMessage.raw(argParser.getUsage()));
       return EXIT_CODE_INTERNAL_ERROR;
     }
 
@@ -292,7 +292,7 @@
       }
       catch (Exception e)
       {
-        Message message = WARN_WAIT4DEL_CANNOT_OPEN_LOG_FILE.get(
+        LocalizableMessage message = WARN_WAIT4DEL_CANNOT_OPEN_LOG_FILE.get(
                 logFilePath.getValue(), String.valueOf(e));
         println(message);
 
@@ -321,7 +321,7 @@
         }
         catch (Exception e)
         {
-          Message message = WARN_WAIT4DEL_CANNOT_OPEN_OUTPUT_FILE.get(
+          LocalizableMessage message = WARN_WAIT4DEL_CANNOT_OPEN_OUTPUT_FILE.get(
                   outputFilePath.getValue(), String.valueOf(e));
           println(message);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/ArgumentExceptionFactory.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/ArgumentExceptionFactory.java
index f75ccfe..3945755 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/ArgumentExceptionFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/ArgumentExceptionFactory.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.dsconfig;
 
@@ -29,7 +30,7 @@
 
 import static org.opends.messages.DSConfigMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.PropertyException;
 import org.opends.server.admin.ManagedObjectDefinition;
@@ -72,11 +73,11 @@
     PropertyDefinition<?> pd = e.getNamingPropertyDefinition();
 
     if (illegalName.length() == 0) {
-      Message message =
+      LocalizableMessage message =
           ERR_DSCFG_ERROR_ILLEGAL_NAME_EMPTY.get(d.getUserFriendlyPluralName());
       return new CLIException(message);
     } else if (illegalName.trim().length() == 0) {
-      Message message =
+      LocalizableMessage message =
           ERR_DSCFG_ERROR_ILLEGAL_NAME_BLANK.get(d.getUserFriendlyPluralName());
       return new CLIException(message);
     } else if (pd != null) {
@@ -85,15 +86,15 @@
       } catch (PropertyException e1) {
         PropertyDefinitionUsageBuilder b = new PropertyDefinitionUsageBuilder(
             true);
-        Message syntax = b.getUsage(pd);
+        LocalizableMessage syntax = b.getUsage(pd);
 
-        Message message = ERR_DSCFG_ERROR_ILLEGAL_NAME_SYNTAX.get(
+        LocalizableMessage message = ERR_DSCFG_ERROR_ILLEGAL_NAME_SYNTAX.get(
             illegalName, d.getUserFriendlyName(), syntax);
         return new CLIException(message);
       }
     }
 
-    Message message = ERR_DSCFG_ERROR_ILLEGAL_NAME_UNKNOWN.get(
+    LocalizableMessage message = ERR_DSCFG_ERROR_ILLEGAL_NAME_UNKNOWN.get(
         illegalName, d.getUserFriendlyName());
     return new CLIException(message);
   }
@@ -129,8 +130,8 @@
       ConsoleApplication app, ManagedObjectDecodingException e) {
     AbstractManagedObjectDefinition<?, ?> d = e.getPartialManagedObject()
         .getManagedObjectDefinition();
-    Message ufn = d.getUserFriendlyName();
-    Message msg;
+    LocalizableMessage ufn = d.getUserFriendlyName();
+    LocalizableMessage msg;
     if (e.getCauses().size() == 1) {
       msg = ERR_GET_HEADING_MODE_SINGLE.get(ufn);
     } else {
@@ -166,8 +167,8 @@
    */
   public static void displayMissingMandatoryPropertyException(
       ConsoleApplication app, MissingMandatoryPropertiesException e) {
-    Message ufn = e.getUserFriendlyName();
-    Message msg;
+    LocalizableMessage ufn = e.getUserFriendlyName();
+    LocalizableMessage msg;
     if (e.isCreate()) {
       if (e.getCauses().size() == 1) {
         msg = ERR_CREATE_HEADING_MMPE_SINGLE.get(ufn);
@@ -217,8 +218,8 @@
    */
   public static void displayOperationRejectedException(ConsoleApplication app,
       OperationRejectedException e) {
-    Message ufn = e.getUserFriendlyName();
-    Message msg;
+    LocalizableMessage ufn = e.getUserFriendlyName();
+    LocalizableMessage msg;
     switch (e.getOperationType()) {
     case CREATE:
       if (e.getMessages().size() == 1) {
@@ -246,7 +247,7 @@
     app.println(msg);
     app.println();
     TableBuilder builder = new TableBuilder();
-    for (Message reason : e.getMessages()) {
+    for (LocalizableMessage reason : e.getMessages()) {
       builder.startRow();
       builder.appendCell("*");
       builder.appendCell(reason);
@@ -270,7 +271,7 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException incompatiblePropertyModification(String arg) {
-    Message msg = ERR_DSCFG_ERROR_INCOMPATIBLE_PROPERTY_MOD.get(arg);
+    LocalizableMessage msg = ERR_DSCFG_ERROR_INCOMPATIBLE_PROPERTY_MOD.get(arg);
     return new ArgumentException(msg);
   }
 
@@ -285,7 +286,7 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException missingBindPassword(String bindDN) {
-    Message msg = ERR_DSCFG_ERROR_NO_PASSWORD.get(bindDN);
+    LocalizableMessage msg = ERR_DSCFG_ERROR_NO_PASSWORD.get(bindDN);
     return new ArgumentException(msg);
   }
 
@@ -302,7 +303,7 @@
    */
   public static ArgumentException missingMandatoryNonInteractiveArgument(
       Argument arg) {
-    Message msg = ERR_DSCFG_ERROR_MISSING_NON_INTERACTIVE_ARG.get(
+    LocalizableMessage msg = ERR_DSCFG_ERROR_MISSING_NON_INTERACTIVE_ARG.get(
         arg.getLongIdentifier());
     return new ArgumentException(msg);
   }
@@ -319,7 +320,7 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException missingNameInPropertyArgument(String arg) {
-    Message msg = ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_VALUE.get(arg);
+    LocalizableMessage msg = ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_VALUE.get(arg);
     return new ArgumentException(msg);
   }
 
@@ -336,7 +337,7 @@
    */
   public static ArgumentException missingNameInPropertyModification(
       String arg) {
-    Message msg = ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD.get(arg);
+    LocalizableMessage msg = ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD.get(arg);
     return new ArgumentException(msg);
   }
 
@@ -353,7 +354,7 @@
    */
   public static ArgumentException missingSeparatorInPropertyArgument(
       String arg) {
-    Message msg = ERR_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_VALUE.get(arg);
+    LocalizableMessage msg = ERR_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_VALUE.get(arg);
     return new ArgumentException(msg);
   }
 
@@ -370,7 +371,7 @@
    */
   public static ArgumentException missingSeparatorInPropertyModification(
       String arg) {
-    Message msg = ERR_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_MOD.get(arg);
+    LocalizableMessage msg = ERR_DSCFG_ERROR_NO_SEPARATOR_IN_PROPERTY_MOD.get(arg);
     return new ArgumentException(msg);
   }
 
@@ -386,7 +387,7 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException missingValueInPropertyArgument(String arg) {
-    Message msg = ERR_DSCFG_ERROR_NO_VALUE_IN_PROPERTY_VALUE.get(arg);
+    LocalizableMessage msg = ERR_DSCFG_ERROR_NO_VALUE_IN_PROPERTY_VALUE.get(arg);
     return new ArgumentException(msg);
   }
 
@@ -403,7 +404,7 @@
    */
   public static ArgumentException missingValueInPropertyModification(
       String arg) {
-    Message msg = ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD.get(arg);
+    LocalizableMessage msg = ERR_DSCFG_ERROR_NO_NAME_IN_PROPERTY_MOD.get(arg);
     return new ArgumentException(msg);
   }
 
@@ -420,7 +421,7 @@
    */
   public static ArgumentException unableToReadConnectionParameters(
       Exception cause) {
-    Message message = ERR_DSCFG_ERROR_CANNOT_READ_CONNECTION_PARAMETERS
+    LocalizableMessage message = ERR_DSCFG_ERROR_CANNOT_READ_CONNECTION_PARAMETERS
         .get(cause.getMessage());
     return new ArgumentException(message, cause);
   }
@@ -435,7 +436,7 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException unableToReadBindPasswordInteractively() {
-    Message message = ERR_DSCFG_ERROR_BIND_PASSWORD_NONINTERACTIVE.get();
+    LocalizableMessage message = ERR_DSCFG_ERROR_BIND_PASSWORD_NONINTERACTIVE.get();
     return new ArgumentException(message);
   }
 
@@ -457,7 +458,7 @@
    */
   public static ArgumentException unableToResetMandatoryProperty(
       AbstractManagedObjectDefinition<?, ?> d, String name, String setOption) {
-    Message message = ERR_DSCFG_ERROR_UNABLE_TO_RESET_MANDATORY_PROPERTY.get(
+    LocalizableMessage message = ERR_DSCFG_ERROR_UNABLE_TO_RESET_MANDATORY_PROPERTY.get(
         d.getUserFriendlyPluralName(), name, setOption);
     return new ArgumentException(message);
   }
@@ -477,7 +478,7 @@
    */
   public static ArgumentException unableToResetPropertyWithValue(String name,
      String resetOption) {
-    Message message = ERR_DSCFG_ERROR_UNABLE_TO_RESET_PROPERTY_WITH_VALUE.get(
+    LocalizableMessage message = ERR_DSCFG_ERROR_UNABLE_TO_RESET_PROPERTY_WITH_VALUE.get(
             resetOption, name, resetOption);
     return new ArgumentException(message);
   }
@@ -497,7 +498,7 @@
    */
   public static ArgumentException unableToSetNamingProperty(
       AbstractManagedObjectDefinition<?, ?> d, PropertyDefinition<?> pd) {
-    Message message = ERR_DSCFG_ERROR_UNABLE_TO_SET_NAMING_PROPERTY.get(
+    LocalizableMessage message = ERR_DSCFG_ERROR_UNABLE_TO_SET_NAMING_PROPERTY.get(
         pd.getName(), d.getUserFriendlyName());
     return new ArgumentException(message);
   }
@@ -513,7 +514,7 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException unknownCategory(String categoryName) {
-    Message msg = ERR_DSCFG_ERROR_CATEGORY_UNRECOGNIZED.get(categoryName);
+    LocalizableMessage msg = ERR_DSCFG_ERROR_CATEGORY_UNRECOGNIZED.get(categoryName);
     return new ArgumentException(msg);
   }
 
@@ -531,7 +532,7 @@
    */
   public static ArgumentException unknownProperty(
       AbstractManagedObjectDefinition<?, ?> d, String name) {
-    Message message = ERR_DSCFG_ERROR_PROPERTY_UNRECOGNIZED.get(
+    LocalizableMessage message = ERR_DSCFG_ERROR_PROPERTY_UNRECOGNIZED.get(
         name, d.getUserFriendlyPluralName());
     return new ArgumentException(message);
   }
@@ -547,7 +548,7 @@
    * @return Returns an argument exception.
    */
   public static ArgumentException unknownProperty(String name) {
-    Message message = ERR_DSCFG_ERROR_PROPERTY_UNRECOGNIZED_NO_DEFN.get(name);
+    LocalizableMessage message = ERR_DSCFG_ERROR_PROPERTY_UNRECOGNIZED_NO_DEFN.get(name);
     return new ArgumentException(message);
   }
 
@@ -567,7 +568,7 @@
    */
   public static ArgumentException unknownSubType(RelationDefinition<?, ?> r,
       String typeName, String typeUsage) {
-    Message msg = ERR_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED.get(
+    LocalizableMessage msg = ERR_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED.get(
         typeName, r.getUserFriendlyName(), typeUsage);
     return new ArgumentException(msg);
   }
@@ -585,7 +586,7 @@
    */
   public static ArgumentException unknownTypeForCategory(String typeName,
       String categoryName) {
-    Message msg =
+    LocalizableMessage msg =
         ERR_DSCFG_ERROR_CATEGORY_TYPE_UNRECOGNIZED.get(typeName, categoryName);
     return new ArgumentException(msg);
   }
@@ -604,7 +605,7 @@
    */
   public static ArgumentException unknownValueForMultiValuedProperty(
     String value, String propertyName) {
-          Message msg = ERR_DSCFG_ERROR_VALUE_DOES_NOT_EXIST.get(
+          LocalizableMessage msg = ERR_DSCFG_ERROR_VALUE_DOES_NOT_EXIST.get(
             value, propertyName);
     return new ArgumentException(msg);
   }
@@ -621,7 +622,7 @@
    */
   public static ArgumentException unknownValueForChildComponent(
     String componentName) {
-          Message msg = ERR_DSCFG_ERROR_FINDER_NO_CHILDREN.get(
+          LocalizableMessage msg = ERR_DSCFG_ERROR_FINDER_NO_CHILDREN.get(
             componentName);
     return new ArgumentException(msg);
   }
@@ -643,7 +644,7 @@
    */
   public static CLIException wrongManagedObjectType(RelationDefinition<?, ?> r,
       ManagedObjectDefinition<?, ?> d, String subcommandName) {
-    Message msg = ERR_DSCFG_ERROR_TYPE_UNRECOGNIZED_FOR_SUBCOMMAND.get(
+    LocalizableMessage msg = ERR_DSCFG_ERROR_TYPE_UNRECOGNIZED_FOR_SUBCOMMAND.get(
         d.getUserFriendlyName(), subcommandName);
     return new CLIException(msg);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/CreateSubCommandHandler.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/CreateSubCommandHandler.java
index 99bb0dc..e229ae7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/CreateSubCommandHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/CreateSubCommandHandler.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.tools.dsconfig;
 
@@ -46,7 +46,7 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.AggregationPropertyDefinition;
 import org.opends.server.admin.Configuration;
@@ -294,9 +294,9 @@
           }
         }
 
-        Message ufn = mod.getUserFriendlyName();
-        Message synopsis = mod.getSynopsis();
-        Message description = mod.getDescription();
+        LocalizableMessage ufn = mod.getUserFriendlyName();
+        LocalizableMessage synopsis = mod.getSynopsis();
+        LocalizableMessage description = mod.getDescription();
         if (CLIProfile.getInstance().isForCustomization(mod)) {
           ufn = INFO_DSCFG_CUSTOM_TYPE_OPTION.get(ufn);
           synopsis = INFO_DSCFG_CUSTOM_TYPE_SYNOPSIS.get(ufn);
@@ -566,7 +566,7 @@
       SubCommandHandler handler) throws ClientException,
       CLIException {
     ManagedObjectDefinition<?, ?> d = mo.getManagedObjectDefinition();
-    Message ufn = d.getUserFriendlyName();
+    LocalizableMessage ufn = d.getUserFriendlyName();
 
     try {
       for (PropertyDefinition<?> pd : d.getAllPropertyDefinitions()) {
@@ -583,22 +583,22 @@
           // The referenced component(s) must be enabled.
           for (String name : mo.getPropertyValues(apd)) {
             ManagedObjectPath<?, ?> path = apd.getChildPath(name);
-            Message rufn = path.getManagedObjectDefinition()
+            LocalizableMessage rufn = path.getManagedObjectDefinition()
                 .getUserFriendlyName();
             ManagedObject<?> ref;
             try {
               ref = context.getManagedObject(path);
             } catch (DefinitionDecodingException e) {
-              Message msg = ERR_DSCFG_ERROR_GET_CHILD_DDE.get(rufn, rufn, rufn);
+              LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_DDE.get(rufn, rufn, rufn);
               throw new ClientException(LDAPResultCode.OTHER, msg);
             } catch (ManagedObjectDecodingException e) {
               // FIXME: should not abort here. Instead, display the
               // errors (if verbose) and apply the changes to the
               // partial managed object.
-              Message msg = ERR_DSCFG_ERROR_GET_CHILD_MODE.get(rufn);
+              LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_MODE.get(rufn);
               throw new ClientException(LDAPResultCode.OTHER, msg, e);
             } catch (ManagedObjectNotFoundException e) {
-              Message msg = ERR_DSCFG_ERROR_GET_CHILD_MONFE.get(rufn);
+              LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_MONFE.get(rufn);
               throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
             }
 
@@ -635,7 +635,7 @@
                       }
                     }
                   } catch (ConcurrentModificationException e) {
-                    Message msg = ERR_DSCFG_ERROR_CREATE_CME.get(ufn);
+                    LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CME.get(ufn);
                     throw new ClientException(
                         LDAPResultCode.CONSTRAINT_VIOLATION, msg);
                   } catch (OperationRejectedException e) {
@@ -696,10 +696,10 @@
         }
       }
     } catch (AuthorizationException e) {
-      Message msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS, msg);
     } catch (CommunicationException e) {
-      Message msg = ERR_DSCFG_ERROR_CREATE_CE.get(ufn, e.getMessage());
+      LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CE.get(ufn, e.getMessage());
       throw new ClientException(LDAPResultCode.OTHER, msg);
     }
 
@@ -714,7 +714,7 @@
       throws ClientException,
       CLIException {
     ManagedObjectDefinition<?, ?> d = mo.getManagedObjectDefinition();
-    Message ufn = d.getUserFriendlyName();
+    LocalizableMessage ufn = d.getUserFriendlyName();
 
     PropertyValueEditor editor = new PropertyValueEditor(app, context);
     while (true) {
@@ -746,7 +746,7 @@
         if (result.isQuit()) {
           if (!app.isMenuDrivenMode()) {
             // User chose to cancel any changes.
-            Message msg = INFO_DSCFG_CONFIRM_CREATE_FAIL.get(ufn);
+            LocalizableMessage msg = INFO_DSCFG_CONFIRM_CREATE_FAIL.get(ufn);
             app.printVerboseMessage(msg);
           }
           return MenuResult.quit();
@@ -764,7 +764,7 @@
         {
           app.println();
         }
-        Message msg = INFO_DSCFG_CONFIRM_CREATE_SUCCESS.get(ufn);
+        LocalizableMessage msg = INFO_DSCFG_CONFIRM_CREATE_SUCCESS.get(ufn);
         app.printVerboseMessage(msg);
 
         if (handler != null) {
@@ -796,11 +796,11 @@
               .getMessageObject(), e);
         }
       } catch (AuthorizationException e) {
-        Message msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(ufn);
         throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
             msg);
       } catch (ConcurrentModificationException e) {
-        Message msg = ERR_DSCFG_ERROR_CREATE_CME.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CME.get(ufn);
         throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
       } catch (OperationRejectedException e) {
         if (app.isInteractive()) {
@@ -817,7 +817,7 @@
               .getMessageObject(), e);
         }
       } catch (CommunicationException e) {
-        Message msg = ERR_DSCFG_ERROR_CREATE_CE.get(ufn, e.getMessage());
+        LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CE.get(ufn, e.getMessage());
         if (app.isInteractive()) {
           app.println();
           app.printVerboseMessage(msg);
@@ -826,7 +826,7 @@
           throw new ClientException(LDAPResultCode.OTHER, msg);
         }
       } catch (ManagedObjectAlreadyExistsException e) {
-        Message msg = ERR_DSCFG_ERROR_CREATE_MOAEE.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_MOAEE.get(ufn);
         if (app.isInteractive()) {
           app.println();
           app.printVerboseMessage(msg);
@@ -873,15 +873,15 @@
           // Attempt to retrieve a child using this name.
           parent.getChild(irelation, input);
         } catch (AuthorizationException e) {
-          Message msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(irelation
+          LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(irelation
               .getUserFriendlyName());
           throw new CLIException(msg);
         } catch (ConcurrentModificationException e) {
-          Message msg = ERR_DSCFG_ERROR_CREATE_CME.get(irelation
+          LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CME.get(irelation
               .getUserFriendlyName());
           throw new CLIException(msg);
         } catch (CommunicationException e) {
-          Message msg = ERR_DSCFG_ERROR_CREATE_CE.get(irelation
+          LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CE.get(irelation
               .getUserFriendlyName(), e.getMessage());
           throw new CLIException(msg);
         } catch (DefinitionDecodingException e) {
@@ -894,7 +894,7 @@
         }
 
         // A child with the specified name must already exist.
-        Message msg = ERR_DSCFG_ERROR_CREATE_NAME_ALREADY_EXISTS.get(irelation
+        LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_NAME_ALREADY_EXISTS.get(irelation
             .getUserFriendlyName(), input);
         app.println();
         app.println(msg);
@@ -905,7 +905,7 @@
     };
 
     // Display additional help if the name is a naming property.
-    Message ufn = d.getUserFriendlyName();
+    LocalizableMessage ufn = d.getUserFriendlyName();
     PropertyDefinition<?> pd = irelation.getNamingPropertyDefinition();
     if (pd != null) {
       app.println(INFO_DSCFG_CREATE_NAME_PROMPT_NAMING.get(ufn, pd.getName()));
@@ -975,7 +975,7 @@
 
     // If there is only one choice then return immediately.
     if (filteredTypes.size() == 0) {
-      Message msg =
+      LocalizableMessage msg =
         ERR_DSCFG_ERROR_NO_AVAILABLE_TYPES.get(d.getUserFriendlyName());
       app.println(msg);
       return MenuResult.<ManagedObjectDefinition<? extends C,
@@ -986,7 +986,7 @@
       if (!isOnlyOneType) {
         // Only one option available so confirm that the user wishes to
         // use it.
-        Message msg = INFO_DSCFG_TYPE_PROMPT_SINGLE.get(
+        LocalizableMessage msg = INFO_DSCFG_TYPE_PROMPT_SINGLE.get(
             d.getUserFriendlyName(), type.getUserFriendlyName());
         if (!app.confirmAction(msg, true)) {
           return MenuResult.cancel();
@@ -997,14 +997,14 @@
     } else {
       MenuBuilder<ManagedObjectDefinition<? extends C, ? extends S>> builder =
         new MenuBuilder<ManagedObjectDefinition<? extends C, ? extends S>>(app);
-      Message msg = INFO_DSCFG_CREATE_TYPE_PROMPT.get(d.getUserFriendlyName());
+      LocalizableMessage msg = INFO_DSCFG_CREATE_TYPE_PROMPT.get(d.getUserFriendlyName());
       builder.setMultipleColumnThreshold(MULTI_COLUMN_THRESHOLD);
       builder.setPrompt(msg);
 
       for (ManagedObjectDefinition<? extends C, ? extends S> mod :
         filteredTypes) {
 
-        Message option = mod.getUserFriendlyName();
+        LocalizableMessage option = mod.getUserFriendlyName();
         if (CLIProfile.getInstance().isForCustomization(mod)) {
           option = INFO_DSCFG_CUSTOM_TYPE_OPTION.get(option);
         } else if (mod == d) {
@@ -1071,7 +1071,7 @@
 
     // Create the sub-command.
     String name = "create-" + r.getName();
-    Message description = INFO_DSCFG_DESCRIPTION_SUBCMD_CREATE.get(r
+    LocalizableMessage description = INFO_DSCFG_DESCRIPTION_SUBCMD_CREATE.get(r
         .getChildDefinition().getUserFriendlyPluralName());
     this.subCommand = new SubCommand(parser, name, false, 0, 0, null,
         description);
@@ -1154,7 +1154,7 @@
   public MenuResult<Integer> run(ConsoleApplication app,
       ManagementContextFactory factory) throws ArgumentException,
       ClientException, CLIException {
-    Message ufn = relation.getUserFriendlyName();
+    LocalizableMessage ufn = relation.getUserFriendlyName();
 
     // Get the naming argument values.
     List<String> names = getNamingArgValues(app, namingArgs);
@@ -1172,26 +1172,26 @@
     try {
       result = getManagedObject(app, context, path, names);
     } catch (AuthorizationException e) {
-      Message msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS, msg);
     } catch (DefinitionDecodingException e) {
-      Message pufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      Message msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(pufn, pufn, pufn);
+      LocalizableMessage pufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(pufn, pufn, pufn);
       throw new ClientException(LDAPResultCode.OTHER, msg);
     } catch (ManagedObjectDecodingException e) {
-      Message pufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      Message msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(pufn);
+      LocalizableMessage pufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(pufn);
       throw new ClientException(LDAPResultCode.OTHER, msg, e);
     } catch (CommunicationException e) {
-      Message msg = ERR_DSCFG_ERROR_CREATE_CE.get(ufn, e
+      LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CE.get(ufn, e
           .getMessage());
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
     } catch (ConcurrentModificationException e) {
-      Message msg = ERR_DSCFG_ERROR_CREATE_CME.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CME.get(ufn);
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
     } catch (ManagedObjectNotFoundException e) {
-      Message pufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      Message msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(pufn);
+      LocalizableMessage pufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(pufn);
       if (app.isInteractive()) {
         app.println();
         app.printVerboseMessage(msg);
@@ -1204,7 +1204,7 @@
     if (result.isQuit()) {
       if (!app.isMenuDrivenMode()) {
         // User chose to cancel creation.
-        Message msg = INFO_DSCFG_CONFIRM_CREATE_FAIL.get(ufn);
+        LocalizableMessage msg = INFO_DSCFG_CONFIRM_CREATE_FAIL.get(ufn);
         app.printVerboseMessage(msg);
       }
       return MenuResult.quit();
@@ -1230,18 +1230,18 @@
       }
       catch (AuthorizationException e)
       {
-        Message msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(ufn);
         throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
             msg);
       }
       catch (ConcurrentModificationException e)
       {
-        Message msg = ERR_DSCFG_ERROR_CREATE_CME.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CME.get(ufn);
         throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
       }
       catch (CommunicationException e)
       {
-        Message msg = ERR_DSCFG_ERROR_CREATE_CE.get(ufn, e
+        LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CE.get(ufn, e
             .getMessage());
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/DSConfig.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/DSConfig.java
index 6dc720f..6537c03 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/DSConfig.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/DSConfig.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012-2013 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 package org.opends.server.tools.dsconfig;
 
@@ -56,7 +56,7 @@
 import java.util.TreeMap;
 import java.util.TreeSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.admin.AttributeTypePropertyDefinition;
 import org.opends.server.admin.ClassLoaderProvider;
@@ -184,9 +184,9 @@
     public SubMenuCallback(ConsoleApplication app, RelationDefinition<?, ?> rd,
         CreateSubCommandHandler<?, ?> ch, DeleteSubCommandHandler dh,
         ListSubCommandHandler lh, SetPropSubCommandHandler sh) {
-      Message ufn = rd.getUserFriendlyName();
+      LocalizableMessage ufn = rd.getUserFriendlyName();
 
-      Message ufpn = null;
+      LocalizableMessage ufpn = null;
       if (rd instanceof InstantiableRelationDefinition<?,?>) {
         InstantiableRelationDefinition<?, ?> ir =
           (InstantiableRelationDefinition<?, ?>) rd;
@@ -533,7 +533,7 @@
 
 
   // Displays the provided message followed by a help usage reference.
-  private void displayMessageAndUsageReference(Message message) {
+  private void displayMessageAndUsageReference(LocalizableMessage message) {
     println(message);
     println();
     println(parser.getHelpUsageReference());
@@ -723,7 +723,7 @@
       initializeGlobalArguments(args);
       initializeSubCommands();
     } catch (ArgumentException e) {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(e.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(e.getMessage());
       println(message);
       return 1;
     }
@@ -732,7 +732,7 @@
     try {
       parser.parseArguments(args);
     } catch (ArgumentException ae) {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       displayMessageAndUsageReference(message);
       return 1;
     }
@@ -745,14 +745,14 @@
 
     // Check for conflicting arguments.
     if (quietArgument.isPresent() && verboseArgument.isPresent()) {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(quietArgument
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(quietArgument
           .getLongIdentifier(), verboseArgument.getLongIdentifier());
       displayMessageAndUsageReference(message);
       return 1;
     }
 
     if (batchFileArgument.isPresent() && !noPromptArgument.isPresent()) {
-      Message message =
+      LocalizableMessage message =
         ERR_DSCFG_ERROR_BATCH_FILE_AND_INTERACTIVE_INCOMPATIBLE.get(
             batchFileArgument.getLongIdentifier(), noPromptArgument
             .getLongIdentifier());
@@ -761,7 +761,7 @@
     }
 
     if (quietArgument.isPresent() && !noPromptArgument.isPresent()) {
-      Message message = ERR_DSCFG_ERROR_QUIET_AND_INTERACTIVE_INCOMPATIBLE.get(
+      LocalizableMessage message = ERR_DSCFG_ERROR_QUIET_AND_INTERACTIVE_INCOMPATIBLE.get(
           quietArgument.getLongIdentifier(), noPromptArgument
           .getLongIdentifier());
       displayMessageAndUsageReference(message);
@@ -769,7 +769,7 @@
     }
 
     if (scriptFriendlyArgument.isPresent() && verboseArgument.isPresent()) {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(scriptFriendlyArgument
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(scriptFriendlyArgument
           .getLongIdentifier(), verboseArgument.getLongIdentifier());
       displayMessageAndUsageReference(message);
       return 1;
@@ -778,7 +778,7 @@
     if (noPropertiesFileArgument.isPresent()
         && propertiesFileArgument.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           noPropertiesFileArgument.getLongIdentifier(),
           propertiesFileArgument.getLongIdentifier());
       displayMessageAndUsageReference(message);
@@ -841,7 +841,7 @@
         // Top-level interactive mode.
         retCode = runInteractiveMode();
       } else {
-        Message message = ERR_ERROR_PARSING_ARGS
+        LocalizableMessage message = ERR_ERROR_PARSING_ARGS
         .get(ERR_DSCFG_ERROR_MISSING_SUBCOMMAND.get());
         displayMessageAndUsageReference(message);
         retCode = 1;
@@ -1034,7 +1034,7 @@
       if (debugEnabled()) {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      println(Message.raw(StaticUtils.stackTraceToString(e)));
+      println(LocalizableMessage.raw(StaticUtils.stackTraceToString(e)));
       return 1;
     }
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/DeleteSubCommandHandler.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/DeleteSubCommandHandler.java
index d0a51c1..afde008 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/DeleteSubCommandHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/DeleteSubCommandHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.dsconfig;
 
@@ -32,7 +33,7 @@
 import java.util.List;
 import java.util.SortedMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.DefinitionDecodingException;
 import org.opends.server.admin.InstantiableRelationDefinition;
 import org.opends.server.admin.ManagedObjectDefinition;
@@ -175,8 +176,8 @@
 
     // Create the sub-command.
     String name = "delete-" + r.getName();
-    Message ufpn = r.getChildDefinition().getUserFriendlyPluralName();
-    Message description = INFO_DSCFG_DESCRIPTION_SUBCMD_DELETE.get(ufpn);
+    LocalizableMessage ufpn = r.getChildDefinition().getUserFriendlyPluralName();
+    LocalizableMessage description = INFO_DSCFG_DESCRIPTION_SUBCMD_DELETE.get(ufpn);
     this.subCommand = new SubCommand(parser, name, false, 0, 0, null,
         description);
 
@@ -235,31 +236,31 @@
     // Delete the child managed object.
     ManagementContext context = factory.getManagementContext(app);
     MenuResult<ManagedObject<?>> result;
-    Message ufn = relation.getUserFriendlyName();
+    LocalizableMessage ufn = relation.getUserFriendlyName();
     try {
       result = getManagedObject(app, context, path, names);
     } catch (AuthorizationException e) {
-      Message msg = ERR_DSCFG_ERROR_DELETE_AUTHZ.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_DELETE_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS, msg);
     } catch (DefinitionDecodingException e) {
-      Message pufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      Message msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(pufn, pufn, pufn);
+      LocalizableMessage pufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(pufn, pufn, pufn);
       throw new ClientException(LDAPResultCode.OTHER, msg);
     } catch (ManagedObjectDecodingException e) {
-      Message pufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      Message msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(pufn);
+      LocalizableMessage pufn = path.getManagedObjectDefinition().getUserFriendlyName();
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(pufn);
       throw new ClientException(LDAPResultCode.OTHER, msg, e);
     } catch (CommunicationException e) {
-      Message msg = ERR_DSCFG_ERROR_DELETE_CE.get(ufn, e.getMessage());
+      LocalizableMessage msg = ERR_DSCFG_ERROR_DELETE_CE.get(ufn, e.getMessage());
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
     } catch (ConcurrentModificationException e) {
-      Message msg = ERR_DSCFG_ERROR_DELETE_CME.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_DELETE_CME.get(ufn);
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
     } catch (ManagedObjectNotFoundException e) {
       // Ignore the error if the deletion is being forced.
       if (!forceArgument.isPresent()) {
-        Message pufn = path.getManagedObjectDefinition().getUserFriendlyName();
-        Message msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(pufn);
+        LocalizableMessage pufn = path.getManagedObjectDefinition().getUserFriendlyName();
+        LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(pufn);
         if (app.isInteractive()) {
           app.println();
           app.printVerboseMessage(msg);
@@ -275,7 +276,7 @@
     if (result.isQuit()) {
       if (!app.isMenuDrivenMode()) {
         // User chose to cancel deletion.
-        Message msg = INFO_DSCFG_CONFIRM_DELETE_FAIL.get(ufn);
+        LocalizableMessage msg = INFO_DSCFG_CONFIRM_DELETE_FAIL.get(ufn);
         app.printVerboseMessage(msg);
       }
       return MenuResult.quit();
@@ -297,7 +298,7 @@
           if (sresult.isQuit()) {
             if (!app.isMenuDrivenMode()) {
               // User chose to cancel deletion.
-              Message msg = INFO_DSCFG_CONFIRM_DELETE_FAIL.get(ufn);
+              LocalizableMessage msg = INFO_DSCFG_CONFIRM_DELETE_FAIL.get(ufn);
               app.printVerboseMessage(msg);
             }
             return MenuResult.quit();
@@ -316,7 +317,7 @@
           if (cd == null) {
             // The name must be invalid.
             String typeUsage = getSubTypesUsage(relation.getChildDefinition());
-            Message msg = ERR_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED.get(
+            LocalizableMessage msg = ERR_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED.get(
                 name, relation.getUserFriendlyName(), typeUsage);
             throw new ArgumentException(msg);
           } else {
@@ -349,10 +350,10 @@
         }
       }
     } catch (AuthorizationException e) {
-      Message msg = ERR_DSCFG_ERROR_DELETE_AUTHZ.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_DELETE_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS, msg);
     } catch (OperationRejectedException e) {
-      Message msg;
+      LocalizableMessage msg;
       if (e.getMessages().size() == 1) {
         msg = ERR_DSCFG_ERROR_DELETE_ORE_SINGLE.get(ufn);
       } else {
@@ -365,7 +366,7 @@
         app.println(msg);
         app.println();
         TableBuilder builder = new TableBuilder();
-        for (Message reason : e.getMessages()) {
+        for (LocalizableMessage reason : e.getMessages()) {
           builder.startRow();
           builder.appendCell("*");
           builder.appendCell(reason);
@@ -383,14 +384,14 @@
     } catch (ManagedObjectNotFoundException e) {
       // Ignore the error if the deletion is being forced.
       if (!forceArgument.isPresent()) {
-        Message msg = ERR_DSCFG_ERROR_DELETE_MONFE.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_DELETE_MONFE.get(ufn);
         throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
       }
     } catch (ConcurrentModificationException e) {
-      Message msg = ERR_DSCFG_ERROR_DELETE_CME.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_DELETE_CME.get(ufn);
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
     } catch (CommunicationException e) {
-      Message msg = ERR_DSCFG_ERROR_DELETE_CE.get(ufn, e.getMessage());
+      LocalizableMessage msg = ERR_DSCFG_ERROR_DELETE_CE.get(ufn, e.getMessage());
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
     }
 
@@ -404,7 +405,7 @@
     }
 
     // Output success message.
-    Message msg = INFO_DSCFG_CONFIRM_DELETE_SUCCESS.get(ufn);
+    LocalizableMessage msg = INFO_DSCFG_CONFIRM_DELETE_SUCCESS.get(ufn);
     app.printVerboseMessage(msg);
 
     return MenuResult.success(0);
@@ -415,12 +416,12 @@
   // Confirm deletion.
   private boolean confirmDeletion(ConsoleApplication app) throws CLIException {
     if (app.isInteractive()) {
-      Message prompt = INFO_DSCFG_CONFIRM_DELETE.get(relation
+      LocalizableMessage prompt = INFO_DSCFG_CONFIRM_DELETE.get(relation
           .getUserFriendlyName());
       app.println();
       if (!app.confirmAction(prompt, false)) {
         // Output failure message.
-        Message msg = INFO_DSCFG_CONFIRM_DELETE_FAIL.get(relation
+        LocalizableMessage msg = INFO_DSCFG_CONFIRM_DELETE_FAIL.get(relation
             .getUserFriendlyName());
         app.printVerboseMessage(msg);
         return false;
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/GetPropSubCommandHandler.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/GetPropSubCommandHandler.java
index 18fe0c5..89a4ae3 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/GetPropSubCommandHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/GetPropSubCommandHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.dsconfig;
 
@@ -36,7 +37,7 @@
 import java.util.Set;
 import java.util.SortedSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AbsoluteInheritedDefaultBehaviorProvider;
 import org.opends.server.admin.AliasDefaultBehaviorProvider;
 import org.opends.server.admin.DefaultBehaviorProviderVisitor;
@@ -186,7 +187,7 @@
 
     // Create the sub-command.
     String name = "get-" + r.getName() + "-prop";
-    Message message = INFO_DSCFG_DESCRIPTION_SUBCMD_GETPROP.get(r
+    LocalizableMessage message = INFO_DSCFG_DESCRIPTION_SUBCMD_GETPROP.get(r
         .getChildDefinition().getUserFriendlyName());
     this.subCommand = new SubCommand(parser, name, false, 0, 0, null, message);
 
@@ -252,28 +253,28 @@
     updateCommandBuilderWithSubCommand();
 
     // Get the targeted managed object.
-    Message ufn = path.getRelationDefinition().getUserFriendlyName();
+    LocalizableMessage ufn = path.getRelationDefinition().getUserFriendlyName();
     ManagementContext context = factory.getManagementContext(app);
     MenuResult<ManagedObject<?>> result;
     try {
       result = getManagedObject(app, context, path, names);
     } catch (AuthorizationException e) {
-      Message msg = ERR_DSCFG_ERROR_GET_CHILD_AUTHZ.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS, msg);
     } catch (DefinitionDecodingException e) {
-      Message msg = ERR_DSCFG_ERROR_GET_CHILD_DDE.get(ufn, ufn, ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_DDE.get(ufn, ufn, ufn);
       throw new ClientException(LDAPResultCode.OTHER, msg);
     } catch (ManagedObjectDecodingException e) {
-      Message msg = ERR_DSCFG_ERROR_GET_CHILD_MODE.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_MODE.get(ufn);
       throw new ClientException(LDAPResultCode.OTHER, msg, e);
     } catch (CommunicationException e) {
-      Message msg = ERR_DSCFG_ERROR_GET_CHILD_CE.get(ufn, e.getMessage());
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_CE.get(ufn, e.getMessage());
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
     } catch (ConcurrentModificationException e) {
-      Message msg = ERR_DSCFG_ERROR_GET_CHILD_CME.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_CME.get(ufn);
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
     } catch (ManagedObjectNotFoundException e) {
-       Message msg = ERR_DSCFG_ERROR_GET_CHILD_MONFE.get(ufn);
+       LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_MONFE.get(ufn);
       throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
     }
 
@@ -344,10 +345,10 @@
     if (values.isEmpty()) {
       // There are no values or default values. Display the default
       // behavior for alias values.
-      DefaultBehaviorProviderVisitor<T, Message, Void> visitor =
-        new DefaultBehaviorProviderVisitor<T, Message, Void>() {
+      DefaultBehaviorProviderVisitor<T, LocalizableMessage, Void> visitor =
+        new DefaultBehaviorProviderVisitor<T, LocalizableMessage, Void>() {
 
-        public Message visitAbsoluteInherited(
+        public LocalizableMessage visitAbsoluteInherited(
             AbsoluteInheritedDefaultBehaviorProvider<T> d, Void p) {
           // Should not happen - inherited default values are
           // displayed as normal values.
@@ -356,7 +357,7 @@
 
 
 
-        public Message visitAlias(AliasDefaultBehaviorProvider<T> d, Void p) {
+        public LocalizableMessage visitAlias(AliasDefaultBehaviorProvider<T> d, Void p) {
           if (app.isVerbose()) {
             return d.getSynopsis();
           } else {
@@ -366,7 +367,7 @@
 
 
 
-        public Message visitDefined(DefinedDefaultBehaviorProvider<T> d,
+        public LocalizableMessage visitDefined(DefinedDefaultBehaviorProvider<T> d,
             Void p) {
           // Should not happen - real default values are displayed as
           // normal values.
@@ -375,7 +376,7 @@
 
 
 
-        public Message visitRelativeInherited(
+        public LocalizableMessage visitRelativeInherited(
             RelativeInheritedDefaultBehaviorProvider<T> d, Void p) {
           // Should not happen - inherited default values are
           // displayed as normal values.
@@ -384,7 +385,7 @@
 
 
 
-        public Message visitUndefined(UndefinedDefaultBehaviorProvider<T> d,
+        public LocalizableMessage visitUndefined(UndefinedDefaultBehaviorProvider<T> d,
             Void p) {
           return null;
         }
@@ -393,7 +394,7 @@
       builder.startRow();
       builder.appendCell(pd.getName());
 
-      Message content = pd.getDefaultBehaviorProvider().accept(visitor, null);
+      LocalizableMessage content = pd.getDefaultBehaviorProvider().accept(visitor, null);
       if (content == null) {
         if (app.isScriptFriendly()) {
           builder.appendCell();
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java
index a2c5c02..12a5216 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/HelpSubCommandHandler.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.tools.dsconfig;
 
@@ -44,8 +44,8 @@
 import java.util.TreeMap;
 import java.util.TreeSet;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.AbsoluteInheritedDefaultBehaviorProvider;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.AdministratorAction;
@@ -100,12 +100,12 @@
      *          The property type.
      */
     private static class DefaultVisitor<T> implements
-        DefaultBehaviorProviderVisitor<T, Message, PropertyDefinition<T>> {
+        DefaultBehaviorProviderVisitor<T, LocalizableMessage, PropertyDefinition<T>> {
 
       /**
        * {@inheritDoc}
        */
-      public Message visitAbsoluteInherited(
+      public LocalizableMessage visitAbsoluteInherited(
           AbsoluteInheritedDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
         return INFO_DSCFG_HELP_FIELD_INHERITED_ABS.get(d.getPropertyName(), d
@@ -118,7 +118,7 @@
       /**
        * {@inheritDoc}
        */
-      public Message visitAlias(AliasDefaultBehaviorProvider<T> d,
+      public LocalizableMessage visitAlias(AliasDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
         return d.getSynopsis();
       }
@@ -128,9 +128,9 @@
       /**
        * {@inheritDoc}
        */
-      public Message visitDefined(DefinedDefaultBehaviorProvider<T> d,
+      public LocalizableMessage visitDefined(DefinedDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
-        MessageBuilder builder = new MessageBuilder();
+        LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
         PropertyValuePrinter printer = new PropertyValuePrinter(null, null,
             false);
         boolean isFirst = true;
@@ -151,7 +151,7 @@
       /**
        * {@inheritDoc}
        */
-      public Message visitRelativeInherited(
+      public LocalizableMessage visitRelativeInherited(
           RelativeInheritedDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
         if (d.getRelativeOffset() == 0) {
@@ -169,7 +169,7 @@
       /**
        * {@inheritDoc}
        */
-      public Message visitUndefined(UndefinedDefaultBehaviorProvider<T> d,
+      public LocalizableMessage visitUndefined(UndefinedDefaultBehaviorProvider<T> d,
           PropertyDefinition<T> p) {
         return INFO_DSCFG_HELP_FIELD_UNDEFINED.get();
       }
@@ -198,7 +198,7 @@
      * @return Returns the user-friendly description of a property's
      *         default behavior.
      */
-    public <T> Message print(PropertyDefinition<T> pd) {
+    public <T> LocalizableMessage print(PropertyDefinition<T> pd) {
       DefaultVisitor<T> v = new DefaultVisitor<T>();
       return pd.getDefaultBehaviorProvider().accept(v, pd);
     }
@@ -316,7 +316,7 @@
 
 
       // Common usage.
-      private void displayUsage(PrintStream p, Message usage) {
+      private void displayUsage(PrintStream p, LocalizableMessage usage) {
         TableBuilder builder = new TableBuilder();
         builder.startRow();
         builder.appendCell(INFO_DSCFG_HELP_HEADING_SYNTAX.get());
@@ -590,7 +590,7 @@
 
     // Administrator action.
     AdministratorAction action = pd.getAdministratorAction();
-    Message synopsis = action.getSynopsis();
+    LocalizableMessage synopsis = action.getSynopsis();
     if (synopsis == null) {
       switch (action.getType()) {
       case COMPONENT_RESTART:
@@ -616,32 +616,32 @@
 
   // Displays the property option summary key.
   private static void displayPropertyOptionKey(ConsoleApplication app) {
-    MessageBuilder builder;
+    LocalizableMessageBuilder builder;
 
     app.println(INFO_DSCFG_HELP_DESCRIPTION_OPTION.get());
     app.println();
 
-    builder = new MessageBuilder();
+    builder = new LocalizableMessageBuilder();
     builder.append(" r -- ");
     builder.append(INFO_DSCFG_HELP_DESCRIPTION_READ.get());
     app.println(builder.toMessage());
 
-    builder = new MessageBuilder();
+    builder = new LocalizableMessageBuilder();
     builder.append(" w -- ");
     builder.append(INFO_DSCFG_HELP_DESCRIPTION_WRITE.get());
     app.println(builder.toMessage());
 
-    builder = new MessageBuilder();
+    builder = new LocalizableMessageBuilder();
     builder.append(" m -- ");
     builder.append(INFO_DSCFG_HELP_DESCRIPTION_MANDATORY.get());
     app.println(builder.toMessage());
 
-    builder = new MessageBuilder();
+    builder = new LocalizableMessageBuilder();
     builder.append(" s -- ");
     builder.append(INFO_DSCFG_HELP_DESCRIPTION_SINGLE_VALUED.get());
     app.println(builder.toMessage());
 
-    builder = new MessageBuilder();
+    builder = new LocalizableMessageBuilder();
     builder.append(" a -- ");
     builder.append(INFO_DSCFG_HELP_DESCRIPTION_ADMIN_ACTION.get());
     app.println(builder.toMessage());
@@ -713,7 +713,7 @@
       throws ArgumentException {
     // Create the sub-command.
     String name = "list-properties";
-    Message desc = INFO_DSCFG_DESCRIPTION_SUBCMD_HELPPROP.get();
+    LocalizableMessage desc = INFO_DSCFG_DESCRIPTION_SUBCMD_HELPPROP.get();
     this.subCommand = new SubCommand(parser, name, false, 0, 0, null, desc);
 
     this.categoryArgument = new StringArgument(OPTION_DSCFG_LONG_CATEGORY,
@@ -1055,19 +1055,19 @@
   private void displayVerbose(ConsoleApplication app, String categoryName,
       String typeName, Tag tag, Set<String> propertyNames) {
     // Construct line used to separate consecutive sections.
-    MessageBuilder mb;
+    LocalizableMessageBuilder mb;
 
-    mb = new MessageBuilder();
+    mb = new LocalizableMessageBuilder();
     for (int i = 0; i < MAX_LINE_WIDTH; i++) {
       mb.append('=');
     }
-    Message c1 = mb.toMessage();
+    LocalizableMessage c1 = mb.toMessage();
 
-    mb = new MessageBuilder();
+    mb = new LocalizableMessageBuilder();
     for (int i = 0; i < MAX_LINE_WIDTH; i++) {
       mb.append('-');
     }
-    Message c2 = mb.toMessage();
+    LocalizableMessage c2 = mb.toMessage();
 
     // Display help for each managed object.
     boolean isFirstManagedObject = true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java
index 65b783e..f02bf26 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/LDAPManagementContextFactory.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.dsconfig;
 
@@ -30,8 +31,8 @@
 import org.opends.admin.ads.util.OpendsCertificateException;
 
 import static org.opends.messages.DSConfigMessages.*;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.client.AuthenticationException;
 import org.opends.server.admin.client.AuthenticationNotSupportedException;
 import org.opends.server.admin.client.CommunicationException;
@@ -212,7 +213,7 @@
                 if (((e.getRootCause().getCause()
                   instanceof OpendsCertificateException)) ||
                   (e.getRootCause() instanceof SSLHandshakeException)) {
-                  Message message =
+                  LocalizableMessage message =
                     ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_NOT_TRUSTED.get(
                     hostName, String.valueOf(portNumber));
                   throw new ClientException(
@@ -220,14 +221,14 @@
                 }
               }
               if (e.getRootCause() instanceof SSLException) {
-                Message message =
+                LocalizableMessage message =
                   ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_WRONG_PORT.get(
                   hostName, String.valueOf(portNumber));
                 throw new ClientException(
                   LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
               }
             }
-            Message message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
+            LocalizableMessage message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
               hostName, String.valueOf(portNumber));
             throw new ClientException(
               LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
@@ -278,13 +279,13 @@
               }
               else
               {
-                Message message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
+                LocalizableMessage message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
                     hostName, String.valueOf(portNumber));
                 throw new ClientException(
                     LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
               }
             }
-            Message message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
+            LocalizableMessage message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
                 hostName, String.valueOf(portNumber));
             throw new ClientException(
                 LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
@@ -301,21 +302,21 @@
         }
         catch (AuthenticationNotSupportedException e)
         {
-          Message message = ERR_DSCFG_ERROR_LDAP_SIMPLE_BIND_NOT_SUPPORTED
+          LocalizableMessage message = ERR_DSCFG_ERROR_LDAP_SIMPLE_BIND_NOT_SUPPORTED
               .get();
           throw new ClientException(LDAPResultCode.AUTH_METHOD_NOT_SUPPORTED,
               message);
         }
         catch (AuthenticationException e)
         {
-          Message message = ERR_DSCFG_ERROR_LDAP_SIMPLE_BIND_FAILED
+          LocalizableMessage message = ERR_DSCFG_ERROR_LDAP_SIMPLE_BIND_FAILED
               .get(bindDN);
           throw new ClientException(LDAPResultCode.INVALID_CREDENTIALS,
               message);
         }
         catch (CommunicationException e)
         {
-          Message message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
+          LocalizableMessage message = ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(
               hostName, String.valueOf(portNumber));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR,
               message);
@@ -381,7 +382,7 @@
   public void validateGlobalArguments() throws ArgumentException {
     // Make sure that the user didn't specify any conflicting
     // arguments.
-    MessageBuilder buf = new MessageBuilder();
+    LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
     int v = secureArgsList.validateGlobalOptions(buf);
     if (v != DsFrameworkCliReturnCode.SUCCESSFUL_NOP.getReturnCode())
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java
index 76dd40f..760f2cc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/ListSubCommandHandler.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
- *      Portions copyright 2012 ForgeRock AS.
+ *      Portions Copyright 2012-2014 ForgeRock AS.
  */
 package org.opends.server.tools.dsconfig;
 
@@ -36,7 +36,7 @@
 import java.util.SortedSet;
 import java.util.TreeMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.DefinitionDecodingException;
 import org.opends.server.admin.InstantiableRelationDefinition;
 import org.opends.server.admin.ManagedObjectDefinition;
@@ -158,14 +158,14 @@
   // Private constructor.
   private ListSubCommandHandler(
       SubCommandArgumentParser parser, ManagedObjectPath<?, ?> p,
-      RelationDefinition<?, ?> r, String rname, Message rufn)
+      RelationDefinition<?, ?> r, String rname, LocalizableMessage rufn)
       throws ArgumentException {
     this.path = p;
     this.relation = r;
 
     // Create the sub-command.
     String name = "list-" + rname;
-    Message desc = INFO_DSCFG_DESCRIPTION_SUBCMD_LIST.get(rufn);
+    LocalizableMessage desc = INFO_DSCFG_DESCRIPTION_SUBCMD_LIST.get(rufn);
     this.subCommand = new SubCommand(parser, name, false, 0, 0, null, desc);
 
     // Create the naming arguments.
@@ -233,7 +233,7 @@
     // Get the naming argument values.
     List<String> names = getNamingArgValues(app, namingArgs);
 
-    Message ufn;
+    LocalizableMessage ufn;
     if (relation instanceof InstantiableRelationDefinition) {
       InstantiableRelationDefinition<?, ?> irelation =
         (InstantiableRelationDefinition<?, ?>) relation;
@@ -252,26 +252,26 @@
     try {
       result = getManagedObject(app, context, path, names);
     } catch (AuthorizationException e) {
-      Message msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
           msg);
     } catch (DefinitionDecodingException e) {
       ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      Message msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(ufn, ufn, ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(ufn, ufn, ufn);
       throw new ClientException(LDAPResultCode.OTHER, msg);
     } catch (ManagedObjectDecodingException e) {
       ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      Message msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(ufn);
       throw new ClientException(LDAPResultCode.OTHER, msg, e);
     } catch (CommunicationException e) {
-      Message msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
+      LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
       throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN, msg);
     } catch (ConcurrentModificationException e) {
-      Message msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
     } catch (ManagedObjectNotFoundException e) {
       ufn = path.getManagedObjectDefinition().getUserFriendlyName();
-      Message msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(ufn);
       if (app.isInteractive()) {
         app.println();
         app.printVerboseMessage(msg);
@@ -304,22 +304,22 @@
       } catch (DefinitionDecodingException e) {
         // FIXME: just output this as a warnings (incl. the name) but
         // continue.
-        Message msg = ERR_DSCFG_ERROR_LIST_DDE.get(ufn, ufn, ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_DDE.get(ufn, ufn, ufn);
         throw new ClientException(LDAPResultCode.OTHER, msg);
       } catch (ManagedObjectDecodingException e) {
         // FIXME: just output this as a warnings (incl. the name) but
         // continue.
-        Message msg = ERR_DSCFG_ERROR_LIST_MODE.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_MODE.get(ufn);
         throw new ClientException(LDAPResultCode.OTHER, msg, e);
       } catch (AuthorizationException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
         throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
             msg);
       } catch (ConcurrentModificationException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
         throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
       } catch (CommunicationException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
             msg);
       }
@@ -337,22 +337,22 @@
       } catch (DefinitionDecodingException e) {
         // FIXME: just output this as a warnings (incl. the name) but
         // continue.
-        Message msg = ERR_DSCFG_ERROR_LIST_DDE.get(ufn, ufn, ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_DDE.get(ufn, ufn, ufn);
         throw new ClientException(LDAPResultCode.OTHER, msg);
       } catch (ManagedObjectDecodingException e) {
         // FIXME: just output this as a warnings (incl. the name) but
         // continue.
-        Message msg = ERR_DSCFG_ERROR_LIST_MODE.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_MODE.get(ufn);
         throw new ClientException(LDAPResultCode.OTHER, msg, e);
       } catch (AuthorizationException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
         throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
             msg);
       } catch (ConcurrentModificationException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
         throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
       } catch (CommunicationException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
             msg);
       }
@@ -365,7 +365,7 @@
           children.put(child.getManagedObjectDefinition().getName(), child);
         } else {
           // Indicate that the managed object does not exist.
-          Message msg = ERR_DSCFG_ERROR_FINDER_NO_CHILDREN.get(ufn);
+          LocalizableMessage msg = ERR_DSCFG_ERROR_FINDER_NO_CHILDREN.get(ufn);
           if (app.isInteractive()) {
             app.println();
             app.printVerboseMessage(msg);
@@ -375,24 +375,24 @@
           }
         }
       } catch (AuthorizationException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_AUTHZ.get(ufn);
         throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
             msg);
       } catch (DefinitionDecodingException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_DDE.get(ufn, ufn, ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_DDE.get(ufn, ufn, ufn);
         throw new ClientException(LDAPResultCode.OTHER, msg);
       } catch (ManagedObjectDecodingException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_MODE.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_MODE.get(ufn);
         throw new ClientException(LDAPResultCode.OTHER, msg, e);
       } catch (ConcurrentModificationException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_CME.get(ufn);
         throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
       } catch (CommunicationException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_CE.get(ufn, e.getMessage());
         throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
             msg);
       } catch (ManagedObjectNotFoundException e) {
-        Message msg = ERR_DSCFG_ERROR_LIST_MONFE.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_LIST_MONFE.get(ufn);
         throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
       }
     }
@@ -415,7 +415,7 @@
           }
         }
 
-        app.println(Message.raw(name));
+        app.println(LocalizableMessage.raw(name));
       }
     } else {
       // Create a table of their properties containing the name, type (if
@@ -431,7 +431,7 @@
         builder.appendHeading(INFO_DSCFG_HEADING_COMPONENT_TYPE.get());
       }
       for (String propertyName : propertyNames) {
-        builder.appendHeading(Message.raw(propertyName));
+        builder.appendHeading(LocalizableMessage.raw(propertyName));
       }
       builder.addSortKey(0);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/PropertyValueEditor.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/PropertyValueEditor.java
index 5a51e41..6999aed 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/PropertyValueEditor.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/PropertyValueEditor.java
@@ -40,8 +40,8 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.AbsoluteInheritedDefaultBehaviorProvider;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.AggregationPropertyDefinition;
@@ -119,33 +119,33 @@
         // First get the parent managed object.
         InstantiableRelationDefinition<?, ?> rd = pd.getRelationDefinition();
         ManagedObjectPath<?, ?> path = pd.getParentPath();
-        Message ufn = rd.getUserFriendlyName();
+        LocalizableMessage ufn = rd.getUserFriendlyName();
 
         ManagedObject<?> parent;
         try {
           parent = context.getManagedObject(path);
         } catch (AuthorizationException e) {
-          Message msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(ufn);
+          LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_AUTHZ.get(ufn);
           throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
               msg);
         } catch (DefinitionDecodingException e) {
-          Message pufn = path.getManagedObjectDefinition()
+          LocalizableMessage pufn = path.getManagedObjectDefinition()
               .getUserFriendlyName();
-          Message msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(pufn, pufn, pufn);
+          LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_DDE.get(pufn, pufn, pufn);
           throw new ClientException(LDAPResultCode.OTHER, msg);
         } catch (ManagedObjectDecodingException e) {
-          Message pufn = path.getManagedObjectDefinition()
+          LocalizableMessage pufn = path.getManagedObjectDefinition()
               .getUserFriendlyName();
-          Message msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(pufn);
+          LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_MODE.get(pufn);
           throw new ClientException(LDAPResultCode.OTHER, msg, e);
         } catch (CommunicationException e) {
-          Message msg = ERR_DSCFG_ERROR_CREATE_CE.get(ufn, e.getMessage());
+          LocalizableMessage msg = ERR_DSCFG_ERROR_CREATE_CE.get(ufn, e.getMessage());
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_SERVER_DOWN,
               msg);
         } catch (ManagedObjectNotFoundException e) {
-          Message pufn = path.getManagedObjectDefinition()
+          LocalizableMessage pufn = path.getManagedObjectDefinition()
               .getUserFriendlyName();
-          Message msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(pufn);
+          LocalizableMessage msg = ERR_DSCFG_ERROR_GET_PARENT_MONFE.get(pufn);
           if (app.isInteractive()) {
             app.println();
             app.printVerboseMessage(msg);
@@ -331,7 +331,7 @@
 
     // The description of the behavior if it is an alias default
     // behavior.
-    private final Message aliasDescription;
+    private final LocalizableMessage aliasDescription;
 
     // The type of behavior.
     private final Type type;
@@ -339,7 +339,7 @@
 
 
     // Private constructor.
-    private DefaultBehaviorQuery(Type type, Message aliasDescription) {
+    private DefaultBehaviorQuery(Type type, LocalizableMessage aliasDescription) {
       this.type = type;
       this.aliasDescription = aliasDescription;
     }
@@ -356,7 +356,7 @@
      *         inherits from an alias default behavior, otherwise
      *         <code>null</code>.
      */
-    public Message getAliasDescription() {
+    public LocalizableMessage getAliasDescription() {
       return aliasDescription;
     }
 
@@ -495,7 +495,7 @@
       }
 
       for (String value : values) {
-        Message option = getPropertyValues(d, Collections.singleton(value));
+        LocalizableMessage option = getPropertyValues(d, Collections.singleton(value));
         builder.addNumberedOption(option, MenuResult.success(value));
       }
       MenuCallback<String> callback = new CreateComponentCallback<C, S>(d);
@@ -606,7 +606,7 @@
       Set<E> values = new TreeSet<E>(d);
       values.addAll(EnumSet.allOf(d.getEnumClass()));
       for (E value : values) {
-        Message option = getPropertyValues(d, Collections.singleton(value));
+        LocalizableMessage option = getPropertyValues(d, Collections.singleton(value));
         builder.addNumberedOption(option, MenuResult.success(value));
       }
 
@@ -727,7 +727,7 @@
       final SortedSet<String> oldValues = mo.getPropertyValues(d);
       final SortedSet<String> currentValues = mo.getPropertyValues(d);
       final InstantiableRelationDefinition<C, S> rd = d.getRelationDefinition();
-      final Message ufpn = rd.getUserFriendlyPluralName();
+      final LocalizableMessage ufpn = rd.getUserFriendlyPluralName();
 
       boolean isFirst = true;
       while (true) {
@@ -779,7 +779,7 @@
               builder.setMultipleColumnThreshold(MULTI_COLUMN_THRESHOLD);
 
               for (String value : values) {
-                Message svalue = getPropertyValues(d, Collections
+                LocalizableMessage svalue = getPropertyValues(d, Collections
                     .singleton(value));
                 builder.addNumberedOption(svalue, MenuResult.success(value));
               }
@@ -841,7 +841,7 @@
             builder.setMultipleColumnThreshold(MULTI_COLUMN_THRESHOLD);
 
             for (String value : currentValues) {
-              Message svalue = getPropertyValues(d, Collections
+              LocalizableMessage svalue = getPropertyValues(d, Collections
                   .singleton(value));
               builder.addNumberedOption(svalue, MenuResult.success(value));
             }
@@ -931,7 +931,7 @@
               builder.setMultipleColumnThreshold(MULTI_COLUMN_THRESHOLD);
 
               for (T value : values) {
-                Message svalue = getPropertyValues(d, Collections
+                LocalizableMessage svalue = getPropertyValues(d, Collections
                     .singleton(value));
                 builder.addNumberedOption(svalue, MenuResult.success(value));
               }
@@ -987,7 +987,7 @@
             builder.setMultipleColumnThreshold(MULTI_COLUMN_THRESHOLD);
 
             for (T value : currentValues) {
-              Message svalue = getPropertyValues(d, Collections
+              LocalizableMessage svalue = getPropertyValues(d, Collections
                   .singleton(value));
               builder.addNumberedOption(svalue, MenuResult.success(value));
             }
@@ -1091,7 +1091,7 @@
             builder.setMultipleColumnThreshold(MULTI_COLUMN_THRESHOLD);
 
             for (T value : currentValues) {
-              Message svalue = getPropertyValues(d, Collections
+              LocalizableMessage svalue = getPropertyValues(d, Collections
                   .singleton(value));
               builder.addNumberedOption(svalue, MenuResult.success(value));
             }
@@ -1141,7 +1141,7 @@
      * the user whether or not they want to keep the property's
      * current settings.
      */
-    private <T> Message getKeepDefaultValuesMenuOption(
+    private <T> LocalizableMessage getKeepDefaultValuesMenuOption(
         PropertyDefinition<T> pd, SortedSet<T> defaultValues,
         SortedSet<T> oldValues, SortedSet<T> currentValues) {
       DefaultBehaviorQuery<T> query = DefaultBehaviorQuery.query(pd);
@@ -1167,7 +1167,7 @@
             return INFO_EDITOR_OPTION_LEAVE_UNDEFINED.get();
           }
         case 1:
-          Message svalue = getPropertyValues(pd, currentValues);
+          LocalizableMessage svalue = getPropertyValues(pd, currentValues);
           if (isDefault) {
             if (query.isInherited()) {
               return INFO_EDITOR_OPTION_USE_INHERITED_DEFAULT_VALUE.get(svalue);
@@ -1206,7 +1206,7 @@
             return INFO_EDITOR_OPTION_LEAVE_UNDEFINED.get();
           }
         case 1:
-          Message svalue = getPropertyValues(pd, currentValues);
+          LocalizableMessage svalue = getPropertyValues(pd, currentValues);
           if (isDefault) {
             if (query.isInherited()) {
               return INFO_EDITOR_OPTION_KEEP_INHERITED_DEFAULT_VALUE
@@ -1237,7 +1237,7 @@
      * Generate an appropriate menu option which should be used in the
      * case where a property can be reset to its default behavior.
      */
-    private <T> Message getResetToDefaultValuesMenuOption(
+    private <T> LocalizableMessage getResetToDefaultValuesMenuOption(
         PropertyDefinition<T> pd, SortedSet<T> defaultValues,
         SortedSet<T> currentValues) {
       DefaultBehaviorQuery<T> query = DefaultBehaviorQuery.query(pd);
@@ -1250,7 +1250,7 @@
         // Only show this option if the current value is different
         // to the default.
         if (!currentValues.equals(defaultValues)) {
-          Message svalue = getPropertyValues(pd, defaultValues);
+          LocalizableMessage svalue = getPropertyValues(pd, defaultValues);
           if (defaultValues.size() > 1) {
             return INFO_EDITOR_OPTION_RESET_DEFAULT_VALUES.get(svalue);
           } else {
@@ -1269,7 +1269,7 @@
                 .get();
           }
         } else {
-          Message svalue = getPropertyValues(pd, defaultValues);
+          LocalizableMessage svalue = getPropertyValues(pd, defaultValues);
           if (defaultValues.size() > 1) {
             return INFO_EDITOR_OPTION_RESET_INHERITED_DEFAULT_VALUES
                 .get(svalue);
@@ -1307,10 +1307,10 @@
           result = MenuResult.<Boolean> cancel();
         }
 
-        Message option = getKeepDefaultValuesMenuOption(d, defaultValues,
+        LocalizableMessage option = getKeepDefaultValuesMenuOption(d, defaultValues,
             oldValues, currentValues);
         builder.addNumberedOption(option, result);
-        builder.setDefault(Message.raw("1"), result);
+        builder.setDefault(LocalizableMessage.raw("1"), result);
       }
 
       // Add an option for adding some values.
@@ -1318,7 +1318,7 @@
         int i = builder.addNumberedOption(
             INFO_EDITOR_OPTION_ADD_ONE_OR_MORE_VALUES.get(), addCallback);
         if (d.hasOption(PropertyOption.MANDATORY) && currentValues.isEmpty()) {
-          builder.setDefault(Message.raw("%d", i), addCallback);
+          builder.setDefault(LocalizableMessage.raw("%d", i), addCallback);
         }
       }
 
@@ -1330,7 +1330,7 @@
 
       // Add options for removing all values and for resetting the
       // property to its default behavior.
-      Message resetOption = null;
+      LocalizableMessage resetOption = null;
       if (!currentValues.equals(defaultValues)) {
         resetOption = getResetToDefaultValuesMenuOption(d, defaultValues,
             currentValues);
@@ -1529,7 +1529,7 @@
         // Only alias, undefined, or inherited alias or undefined
         // properties should apply here.
         DefaultBehaviorQuery<T> query = DefaultBehaviorQuery.query(pd);
-        Message aliasDescription = query.getAliasDescription();
+        LocalizableMessage aliasDescription = query.getAliasDescription();
         if (aliasDescription == null) {
           app.println(INFO_EDITOR_HEADING_READ_ONLY_ALIAS_UNDEFINED.get(pd
               .getName()));
@@ -1539,7 +1539,7 @@
         }
         break;
       case 1:
-        Message svalue = getPropertyValues(pd, mo);
+        LocalizableMessage svalue = getPropertyValues(pd, mo);
         app.println(INFO_EDITOR_HEADING_READ_ONLY_VALUE.get(pd.getName(),
             svalue));
         break;
@@ -1640,9 +1640,9 @@
           .first();
 
       // First option is for leaving the property unchanged.
-      Message option = getKeepDefaultValuesMenuOption(d);
+      LocalizableMessage option = getKeepDefaultValuesMenuOption(d);
       builder.addNumberedOption(option, MenuResult.<String> cancel());
-      builder.setDefault(Message.raw("1"), MenuResult.<String> cancel());
+      builder.setDefault(LocalizableMessage.raw("1"), MenuResult.<String> cancel());
 
       // Create a list of possible names.
       final Set<String> values = new TreeSet<String>(d);
@@ -1661,14 +1661,14 @@
         return MenuResult.quit();
       }
 
-      final Message ufn = rd.getUserFriendlyName();
+      final LocalizableMessage ufn = rd.getUserFriendlyName();
       for (String value : values) {
         if (currentValue != null && d.compare(value, currentValue) == 0) {
           // This option is unnecessary.
           continue;
         }
 
-        Message svalue = getPropertyValues(d, Collections.singleton(value));
+        LocalizableMessage svalue = getPropertyValues(d, Collections.singleton(value));
         if (value.equals(defaultValue) && query.isDefined()) {
           option = INFO_EDITOR_OPTION_CHANGE_TO_DEFAULT_COMPONENT.get(ufn,
               svalue);
@@ -1715,14 +1715,14 @@
           .first();
 
       // First option is for leaving the property unchanged.
-      Message option = getKeepDefaultValuesMenuOption(d);
+      LocalizableMessage option = getKeepDefaultValuesMenuOption(d);
       builder.addNumberedOption(option, MenuResult.<Boolean> cancel());
-      builder.setDefault(Message.raw("1"), MenuResult.<Boolean> cancel());
+      builder.setDefault(LocalizableMessage.raw("1"), MenuResult.<Boolean> cancel());
 
       // The second (and possibly third) option is to always change
       // the property's value.
       if (currentValue == null || currentValue == false) {
-        Message svalue = getPropertyValues(d, Collections.singleton(true));
+        LocalizableMessage svalue = getPropertyValues(d, Collections.singleton(true));
 
         if (defaultValue != null && defaultValue == true) {
           option = INFO_EDITOR_OPTION_CHANGE_TO_DEFAULT_VALUE.get(svalue);
@@ -1734,7 +1734,7 @@
       }
 
       if (currentValue == null || currentValue == true) {
-        Message svalue = getPropertyValues(d, Collections.singleton(false));
+        LocalizableMessage svalue = getPropertyValues(d, Collections.singleton(false));
 
         if (defaultValue != null && defaultValue == false) {
           option = INFO_EDITOR_OPTION_CHANGE_TO_DEFAULT_VALUE.get(svalue);
@@ -1776,9 +1776,9 @@
       E defaultValue = defaultValues.isEmpty() ? null : defaultValues.first();
 
       // First option is for leaving the property unchanged.
-      Message option = getKeepDefaultValuesMenuOption(d);
+      LocalizableMessage option = getKeepDefaultValuesMenuOption(d);
       builder.addNumberedOption(option, MenuResult.<E> cancel());
-      builder.setDefault(Message.raw("1"), MenuResult.<E> cancel());
+      builder.setDefault(LocalizableMessage.raw("1"), MenuResult.<E> cancel());
 
       // Create options for changing to other values.
       Set<E> values = new TreeSet<E>(d);
@@ -1789,7 +1789,7 @@
           continue;
         }
 
-        Message svalue = getPropertyValues(d, Collections.singleton(value));
+        LocalizableMessage svalue = getPropertyValues(d, Collections.singleton(value));
 
         if (value.equals(defaultValue) && query.isDefined()) {
           option = INFO_EDITOR_OPTION_CHANGE_TO_DEFAULT_VALUE.get(svalue);
@@ -1827,9 +1827,9 @@
       builder.setPrompt(INFO_EDITOR_PROMPT_MODIFY_MENU.get(d.getName()));
 
       // First option is for leaving the property unchanged.
-      Message option = getKeepDefaultValuesMenuOption(d);
+      LocalizableMessage option = getKeepDefaultValuesMenuOption(d);
       builder.addNumberedOption(option, MenuResult.<T> cancel());
-      builder.setDefault(Message.raw("1"), MenuResult.<T> cancel());
+      builder.setDefault(LocalizableMessage.raw("1"), MenuResult.<T> cancel());
 
       // The second option is to always change the property's value.
       builder.addNumberedOption(INFO_EDITOR_OPTION_CHANGE_VALUE.get(),
@@ -1863,17 +1863,17 @@
      * the user whether or not they want to keep the property's
      * current settings.
      */
-    private <T> Message getKeepDefaultValuesMenuOption(
+    private <T> LocalizableMessage getKeepDefaultValuesMenuOption(
         PropertyDefinition<T> pd) {
       DefaultBehaviorQuery<T> query = DefaultBehaviorQuery.query(pd);
       SortedSet<T> currentValues = mo.getPropertyValues(pd);
       SortedSet<T> defaultValues = mo.getPropertyDefaultValues(pd);
 
       if (query.isDefined() && currentValues.equals(defaultValues)) {
-        Message svalue = getPropertyValues(pd, currentValues);
+        LocalizableMessage svalue = getPropertyValues(pd, currentValues);
         return INFO_EDITOR_OPTION_KEEP_DEFAULT_VALUE.get(svalue);
       } else if (mo.isPropertyPresent(pd)) {
-        Message svalue = getPropertyValues(pd, currentValues);
+        LocalizableMessage svalue = getPropertyValues(pd, currentValues);
         return INFO_EDITOR_OPTION_KEEP_VALUE.get(svalue);
       } else if (query.isAlias()) {
         return INFO_EDITOR_OPTION_KEEP_DEFAULT_ALIAS.get(query
@@ -1888,7 +1888,7 @@
                 .get();
           }
         } else {
-          Message svalue = getPropertyValues(pd, defaultValues);
+          LocalizableMessage svalue = getPropertyValues(pd, defaultValues);
           return INFO_EDITOR_OPTION_KEEP_INHERITED_DEFAULT_VALUE.get(svalue);
         }
       } else {
@@ -1902,7 +1902,7 @@
      * Generate an appropriate menu option which should be used in the
      * case where a property can be reset to its default behavior.
      */
-    private <T> Message getResetToDefaultValuesMenuOption(
+    private <T> LocalizableMessage getResetToDefaultValuesMenuOption(
         PropertyDefinition<T> pd) {
       DefaultBehaviorQuery<T> query = DefaultBehaviorQuery.query(pd);
       SortedSet<T> currentValues = mo.getPropertyValues(pd);
@@ -1917,7 +1917,7 @@
         // Only show this option if the current value is different
         // to the default.
         if (!currentValues.equals(defaultValues)) {
-          Message svalue = getPropertyValues(pd, defaultValues);
+          LocalizableMessage svalue = getPropertyValues(pd, defaultValues);
           return INFO_EDITOR_OPTION_RESET_DEFAULT_VALUE.get(svalue);
         } else {
           return null;
@@ -1932,7 +1932,7 @@
                 .get();
           }
         } else {
-          Message svalue = getPropertyValues(pd, defaultValues);
+          LocalizableMessage svalue = getPropertyValues(pd, defaultValues);
           return INFO_EDITOR_OPTION_RESET_INHERITED_DEFAULT_VALUE.get(svalue);
         }
       } else if (!isMandatory && query.isUndefined()) {
@@ -2076,22 +2076,22 @@
 
 
   // Display the set of values associated with a property.
-  private static <T> Message getPropertyValues(PropertyDefinition<T> pd,
+  private static <T> LocalizableMessage getPropertyValues(PropertyDefinition<T> pd,
       Collection<T> values) {
     if (values.isEmpty()) {
       // There are no values or default values. Display the default
       // behavior for alias values.
       DefaultBehaviorQuery<T> query = DefaultBehaviorQuery.query(pd);
-      Message content = query.getAliasDescription();
+      LocalizableMessage content = query.getAliasDescription();
       if (content == null) {
-        return Message.raw("-");
+        return LocalizableMessage.raw("-");
       } else {
         return content;
       }
     } else {
       PropertyValuePrinter printer =
         new PropertyValuePrinter(null, null, false);
-      MessageBuilder builder = new MessageBuilder();
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
 
       boolean isFirst = true;
       for (T value : values) {
@@ -2109,7 +2109,7 @@
 
 
   // Display the set of values associated with a property.
-  private static <T> Message getPropertyValues(
+  private static <T> LocalizableMessage getPropertyValues(
       PropertyDefinition<T> pd,
       ManagedObject<?> mo) {
     SortedSet<T> values = mo.getPropertyValues(pd);
@@ -2137,7 +2137,7 @@
     if (values.isEmpty()) {
       while (true) {
         try {
-          Message prompt;
+          LocalizableMessage prompt;
 
           if (pd.hasOption(PropertyOption.MANDATORY)) {
             prompt = INFO_EDITOR_PROMPT_READ_FIRST_VALUE.get(pd.getName());
@@ -2176,7 +2176,7 @@
       // Prompt for more values if multi-valued.
       while (true) {
         try {
-          Message prompt = INFO_EDITOR_PROMPT_READ_NEXT_VALUE.get(pd.getName());
+          LocalizableMessage prompt = INFO_EDITOR_PROMPT_READ_NEXT_VALUE.get(pd.getName());
 
           app.println();
           String s = app.readLineOfInput(prompt);
@@ -2286,11 +2286,11 @@
       // Construct the main menu.
       MenuBuilder<Boolean> builder = new MenuBuilder<Boolean>(app);
 
-      Message ufn = mo.getManagedObjectDefinition().getUserFriendlyName();
+      LocalizableMessage ufn = mo.getManagedObjectDefinition().getUserFriendlyName();
       builder.setPrompt(INFO_EDITOR_HEADING_CONFIGURE_COMPONENT.get(ufn));
 
-      Message heading1 = INFO_DSCFG_HEADING_PROPERTY_NAME.get();
-      Message heading2 = INFO_DSCFG_HEADING_PROPERTY_VALUE.get();
+      LocalizableMessage heading1 = INFO_DSCFG_HEADING_PROPERTY_NAME.get();
+      LocalizableMessage heading2 = INFO_DSCFG_HEADING_PROPERTY_VALUE.get();
       builder.setColumnHeadings(heading1, heading2);
       builder.setColumnWidths(null, 0);
 
@@ -2324,8 +2324,8 @@
         }
 
         // Create the numeric option.
-        Message values = getPropertyValues(pd, mo);
-        builder.addNumberedOption(Message.raw("%s", pd.getName()), callback,
+        LocalizableMessage values = getPropertyValues(pd, mo);
+        builder.addNumberedOption(LocalizableMessage.raw("%s", pd.getName()), callback,
             values);
       }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/PropertyValuePrinter.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/PropertyValuePrinter.java
index aa67975..1b51ec7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/PropertyValuePrinter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/PropertyValuePrinter.java
@@ -22,14 +22,15 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.dsconfig;
 
 
 
 import java.text.NumberFormat;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 import static org.opends.messages.DSConfigMessages.*;
 
@@ -53,7 +54,7 @@
    * Perform property type specific print formatting.
    */
   private static class MyPropertyValueVisitor extends
-      PropertyValueVisitor<Message, Void> {
+      PropertyValueVisitor<LocalizableMessage, Void> {
 
     // The requested size unit (null if the property's unit should be
     // used).
@@ -95,7 +96,7 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitBoolean(BooleanPropertyDefinition pd, Boolean v,
+    public LocalizableMessage visitBoolean(BooleanPropertyDefinition pd, Boolean v,
         Void p) {
       if (v == false) {
         return INFO_VALUE_FALSE.get();
@@ -110,13 +111,13 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitDuration(DurationPropertyDefinition pd, Long v,
+    public LocalizableMessage visitDuration(DurationPropertyDefinition pd, Long v,
         Void p) {
       if (pd.getUpperLimit() == null && (v < 0 || v == Long.MAX_VALUE)) {
         return INFO_VALUE_UNLIMITED.get();
       }
 
-      MessageBuilder builder = new MessageBuilder();
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
       long ms = pd.getBaseUnit().toMilliSeconds(v);
 
       if (timeUnit == null && !isScriptFriendly && ms != 0) {
@@ -144,7 +145,7 @@
      * {@inheritDoc}
      */
     @Override
-    public Message visitSize(SizePropertyDefinition pd, Long v, Void p) {
+    public LocalizableMessage visitSize(SizePropertyDefinition pd, Long v, Void p) {
       if (pd.isAllowUnlimited() && v < 0) {
         return INFO_VALUE_UNLIMITED.get();
       }
@@ -159,7 +160,7 @@
         }
       }
 
-      MessageBuilder builder = new MessageBuilder();
+      LocalizableMessageBuilder builder = new LocalizableMessageBuilder();
       builder.append(numberFormat.format(unit.fromBytes(v)));
       builder.append(' ');
       builder.append(unit.getShortName());
@@ -173,18 +174,18 @@
      * {@inheritDoc}
      */
     @Override
-    public <T> Message visitUnknown(PropertyDefinition<T> pd, T v, Void p) {
+    public <T> LocalizableMessage visitUnknown(PropertyDefinition<T> pd, T v, Void p) {
       // For all other property definition types the default encoding
       // will do.
       String s = pd.encodeValue(v);
       if (isScriptFriendly) {
-        return Message.raw("%s", s);
+        return LocalizableMessage.raw("%s", s);
       } else if (s.trim().length() == 0 || s.contains(",")) {
         // Quote empty strings or strings containing commas
         // non-scripting mode.
-        return Message.raw("\"%s\"", s);
+        return LocalizableMessage.raw("\"%s\"", s);
       } else {
-        return Message.raw("%s", s);
+        return LocalizableMessage.raw("%s", s);
       }
     }
 
@@ -230,7 +231,7 @@
    *         encoded according to the rules of this property value
    *         printer.
    */
-  public <T> Message print(PropertyDefinition<T> pd, T value) {
+  public <T> LocalizableMessage print(PropertyDefinition<T> pd, T value) {
     return pd.accept(pimpl, value, null);
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/SetPropSubCommandHandler.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/SetPropSubCommandHandler.java
index 14284ac..6b3d9fe 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/SetPropSubCommandHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/SetPropSubCommandHandler.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.
  */
 package org.opends.server.tools.dsconfig;
@@ -38,7 +38,7 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AggregationPropertyDefinition;
 import org.opends.server.admin.DefinitionDecodingException;
 import org.opends.server.admin.PropertyException;
@@ -259,7 +259,7 @@
       SubCommandHandler handler) throws ClientException,
       CLIException {
     ManagedObjectDefinition<?, ?> d = mo.getManagedObjectDefinition();
-    Message ufn = d.getUserFriendlyName();
+    LocalizableMessage ufn = d.getUserFriendlyName();
 
     PropertyValueEditor editor = new PropertyValueEditor(app, context);
     while (true) {
@@ -291,7 +291,7 @@
         if (result.isQuit()) {
           if (!app.isMenuDrivenMode()) {
             // User chose to cancel any changes.
-            Message msg = INFO_DSCFG_CONFIRM_MODIFY_FAIL.get(ufn);
+            LocalizableMessage msg = INFO_DSCFG_CONFIRM_MODIFY_FAIL.get(ufn);
             app.printVerboseMessage(msg);
           }
           return MenuResult.quit();
@@ -309,7 +309,7 @@
           if (app.isVerbose() || app.isInteractive())
           {
             app.println();
-            Message msg = INFO_DSCFG_CONFIRM_MODIFY_SUCCESS.get(ufn);
+            LocalizableMessage msg = INFO_DSCFG_CONFIRM_MODIFY_SUCCESS.get(ufn);
             app.printVerboseMessage(msg);
           }
 
@@ -346,11 +346,11 @@
               .getMessageObject(), e);
         }
       } catch (AuthorizationException e) {
-        Message msg = ERR_DSCFG_ERROR_MODIFY_AUTHZ.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_MODIFY_AUTHZ.get(ufn);
         throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS,
             msg);
       } catch (ConcurrentModificationException e) {
-        Message msg = ERR_DSCFG_ERROR_MODIFY_CME.get(ufn);
+        LocalizableMessage msg = ERR_DSCFG_ERROR_MODIFY_CME.get(ufn);
         throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
       } catch (OperationRejectedException e) {
         if (app.isInteractive()) {
@@ -367,7 +367,7 @@
               .getMessageObject(), e);
         }
       } catch (CommunicationException e) {
-        Message msg = ERR_DSCFG_ERROR_MODIFY_CE.get(ufn, e.getMessage());
+        LocalizableMessage msg = ERR_DSCFG_ERROR_MODIFY_CE.get(ufn, e.getMessage());
         throw new ClientException(LDAPResultCode.OTHER, msg);
       } catch (ManagedObjectAlreadyExistsException e) {
         // Should never happen.
@@ -386,7 +386,7 @@
       SubCommandHandler handler) throws ClientException,
       CLIException {
     ManagedObjectDefinition<?, ?> d = mo.getManagedObjectDefinition();
-    Message ufn = d.getUserFriendlyName();
+    LocalizableMessage ufn = d.getUserFriendlyName();
 
     try {
       for (PropertyDefinition<?> pd : d.getAllPropertyDefinitions()) {
@@ -403,22 +403,22 @@
           // The referenced component(s) must be enabled.
           for (String name : mo.getPropertyValues(apd)) {
             ManagedObjectPath<?, ?> path = apd.getChildPath(name);
-            Message rufn = path.getManagedObjectDefinition()
+            LocalizableMessage rufn = path.getManagedObjectDefinition()
                 .getUserFriendlyName();
             ManagedObject<?> ref;
             try {
               ref = context.getManagedObject(path);
             } catch (DefinitionDecodingException e) {
-              Message msg = ERR_DSCFG_ERROR_GET_CHILD_DDE.get(rufn, rufn, rufn);
+              LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_DDE.get(rufn, rufn, rufn);
               throw new ClientException(LDAPResultCode.OTHER, msg);
             } catch (ManagedObjectDecodingException e) {
               // FIXME: should not abort here. Instead, display the
               // errors (if verbose) and apply the changes to the
               // partial managed object.
-              Message msg = ERR_DSCFG_ERROR_GET_CHILD_MODE.get(rufn);
+              LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_MODE.get(rufn);
               throw new ClientException(LDAPResultCode.OTHER, msg, e);
             } catch (ManagedObjectNotFoundException e) {
-              Message msg = ERR_DSCFG_ERROR_GET_CHILD_MONFE.get(rufn);
+              LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_MONFE.get(rufn);
               throw new ClientException(LDAPResultCode.NO_SUCH_OBJECT, msg);
             }
 
@@ -510,7 +510,7 @@
                       }
                     }
                   } catch (ConcurrentModificationException e) {
-                    Message msg = ERR_DSCFG_ERROR_MODIFY_CME.get(ufn);
+                    LocalizableMessage msg = ERR_DSCFG_ERROR_MODIFY_CME.get(ufn);
                     throw new ClientException(
                         LDAPResultCode.CONSTRAINT_VIOLATION, msg);
                   } catch (OperationRejectedException e) {
@@ -571,10 +571,10 @@
         }
       }
     } catch (AuthorizationException e) {
-      Message msg = ERR_DSCFG_ERROR_MODIFY_AUTHZ.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_MODIFY_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS, msg);
     } catch (CommunicationException e) {
-      Message msg = ERR_DSCFG_ERROR_MODIFY_CE.get(ufn, e.getMessage());
+      LocalizableMessage msg = ERR_DSCFG_ERROR_MODIFY_CE.get(ufn, e.getMessage());
       throw new ClientException(LDAPResultCode.OTHER, msg);
     }
 
@@ -626,7 +626,7 @@
 
     // Create the sub-command.
     String name = "set-" + r.getName() + "-prop";
-    Message description = INFO_DSCFG_DESCRIPTION_SUBCMD_SETPROP.get(r
+    LocalizableMessage description = INFO_DSCFG_DESCRIPTION_SUBCMD_SETPROP.get(r
         .getChildDefinition().getUserFriendlyName());
     this.subCommand = new SubCommand(parser, name, false, 0, 0, null,
         description);
@@ -706,32 +706,32 @@
     updateCommandBuilderWithSubCommand();
 
     // Get the targeted managed object.
-    Message ufn = path.getRelationDefinition().getUserFriendlyName();
+    LocalizableMessage ufn = path.getRelationDefinition().getUserFriendlyName();
     ManagementContext context = factory.getManagementContext(app);
     MenuResult<ManagedObject<?>> result;
     try {
       result = getManagedObject(app, context, path, names);
     } catch (AuthorizationException e) {
-      Message msg = ERR_DSCFG_ERROR_MODIFY_AUTHZ.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_MODIFY_AUTHZ.get(ufn);
       throw new ClientException(LDAPResultCode.INSUFFICIENT_ACCESS_RIGHTS, msg);
     } catch (DefinitionDecodingException e) {
-      Message msg = ERR_DSCFG_ERROR_GET_CHILD_DDE.get(ufn, ufn, ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_DDE.get(ufn, ufn, ufn);
       throw new ClientException(LDAPResultCode.OTHER, msg);
     } catch (ManagedObjectDecodingException e) {
       // FIXME: should not abort here. Instead, display the errors (if
       // verbose) and apply the changes to the partial managed object.
-      Message msg = ERR_DSCFG_ERROR_GET_CHILD_MODE.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_GET_CHILD_MODE.get(ufn);
       throw new ClientException(LDAPResultCode.OTHER, msg, e);
     } catch (CommunicationException e) {
-      Message msg = ERR_DSCFG_ERROR_MODIFY_CE.get(ufn, e.getMessage());
+      LocalizableMessage msg = ERR_DSCFG_ERROR_MODIFY_CE.get(ufn, e.getMessage());
       throw new ClientException(LDAPResultCode.OTHER, msg);
     } catch (ConcurrentModificationException e) {
-      Message msg = ERR_DSCFG_ERROR_MODIFY_CME.get(ufn);
+      LocalizableMessage msg = ERR_DSCFG_ERROR_MODIFY_CME.get(ufn);
       throw new ClientException(LDAPResultCode.CONSTRAINT_VIOLATION, msg);
     } catch (ManagedObjectNotFoundException e) {
       String objName = names.get(names.size() - 1);
       ArgumentException except = null;
-      Message msg;
+      LocalizableMessage msg;
       // if object name is 'null', get a user-friendly string to represent this
       if (objName == null) {
         msg = ERR_DSCFG_ERROR_FINDER_NO_CHILDREN_NULL.get();
@@ -752,7 +752,7 @@
     if (result.isQuit()) {
       if (!app.isMenuDrivenMode()) {
         // User chose to quit.
-        Message msg = INFO_DSCFG_CONFIRM_MODIFY_FAIL.get(ufn);
+        LocalizableMessage msg = INFO_DSCFG_CONFIRM_MODIFY_FAIL.get(ufn);
         app.printVerboseMessage(msg);
       }
       return MenuResult.quit();
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java
index 93ffb06..6b06b18 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsconfig/SubCommandHandler.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.tools.dsconfig;
 
@@ -44,7 +44,7 @@
 import java.util.Set;
 import java.util.SortedMap;
 import java.util.TreeMap;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.Configuration;
 import org.opends.server.admin.ConfigurationClient;
@@ -301,7 +301,7 @@
             if (cd == null) {
               // The name must be invalid.
               String typeUsage = getSubTypesUsage(d);
-              Message msg = ERR_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED.get(
+              LocalizableMessage msg = ERR_DSCFG_ERROR_SUB_TYPE_UNRECOGNIZED.get(
                   name, r.getUserFriendlyName(), typeUsage);
               clie = new CLIException(msg);
               result = MenuResult.quit();
@@ -566,7 +566,7 @@
             // Use syntax and description from naming property.
             PropertyDefinitionUsageBuilder b =
               new PropertyDefinitionUsageBuilder(false);
-            Message usage = Message.raw("{" + b.getUsage(pd) + "}");
+            LocalizableMessage usage = LocalizableMessage.raw("{" + b.getUsage(pd) + "}");
             arg = new StringArgument(argName, null, argName, false, true,
                 usage, INFO_DSCFG_DESCRIPTION_NAME_CREATE_EXT.get(d
                     .getUserFriendlyName(), pd.getName(), pd.getSynopsis()));
@@ -1052,7 +1052,7 @@
         try {
           return SizeUnit.getUnit(value);
         } catch (IllegalArgumentException e) {
-          Message msg = INFO_DSCFG_ERROR_SIZE_UNIT_UNRECOGNIZED.get(value);
+          LocalizableMessage msg = INFO_DSCFG_ERROR_SIZE_UNIT_UNRECOGNIZED.get(value);
           throw new ArgumentException(msg);
         }
       }
@@ -1079,7 +1079,7 @@
         try {
           return DurationUnit.getUnit(value);
         } catch (IllegalArgumentException e) {
-          Message msg = INFO_DSCFG_ERROR_TIME_UNIT_UNRECOGNIZED.get(value);
+          LocalizableMessage msg = INFO_DSCFG_ERROR_TIME_UNIT_UNRECOGNIZED.get(value);
           throw new ArgumentException(msg);
         }
       }
@@ -1210,7 +1210,7 @@
     switch (children.size()) {
     case 0: {
       // No options available - abort.
-      Message msg =
+      LocalizableMessage msg =
         ERR_DSCFG_ERROR_FINDER_NO_CHILDREN.get(d.getUserFriendlyPluralName());
       app.println(msg);
       return MenuResult.cancel();
@@ -1218,7 +1218,7 @@
     case 1: {
       // Only one option available so confirm that the user wishes to
       // access it.
-      Message msg = INFO_DSCFG_FINDER_PROMPT_SINGLE.get(
+      LocalizableMessage msg = INFO_DSCFG_FINDER_PROMPT_SINGLE.get(
           d.getUserFriendlyName(), children.firstKey());
       if (app.confirmAction(msg, true)) {
         try
@@ -1272,7 +1272,7 @@
           .getUserFriendlyName()));
 
       for (Map.Entry<String, String> child : children.entrySet()) {
-        Message option = Message.raw("%s", child.getKey());
+        LocalizableMessage option = LocalizableMessage.raw("%s", child.getKey());
         builder.addNumberedOption(option, MenuResult.success(child.getValue()));
       }
 
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 cc24549..b52dc7a 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
@@ -33,7 +33,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.ProgressMessageFormatter;
 import org.opends.server.replication.plugin.LDAPReplicationDomain;
 import org.opends.server.types.DN;
@@ -115,7 +115,7 @@
     catch (Exception e)
     {
       pointAdder.stop();
-      Message message =
+      LocalizableMessage message =
         ERR_CANNOT_LOAD_CONFIG_HANDLER_CLASS.get(
             configClass, StaticUtils.stackTraceToSingleLineString(e));
       app.println(message);
@@ -137,7 +137,7 @@
     catch (OpenDsException ode)
     {
       pointAdder.stop();
-      Message message = ode.getMessageObject();
+      LocalizableMessage message = ode.getMessageObject();
         ERR_CANNOT_LOAD_CONFIG_HANDLER_CLASS.get(
             configClass, StaticUtils.stackTraceToSingleLineString(ode));
       app.println(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java
index 1395e02..e6c2df1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliArgumentParser.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 
 package org.opends.server.tools.dsreplication;
@@ -37,8 +37,8 @@
 import java.util.Collection;
 import java.util.LinkedList;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.admin.AdministrationConnector;
@@ -376,15 +376,15 @@
   }
 
   /**
-   * Checks all the options parameters and updates the provided MessageBuilder
+   * Checks all the options parameters and updates the provided LocalizableMessageBuilder
    * with the errors that where encountered.
    *
    * This method assumes that the method parseArguments for the parser has
    * already been called.
-   * @param buf the MessageBuilder object where we add the error messages
+   * @param buf the LocalizableMessageBuilder object where we add the error messages
    * describing the errors encountered.
    */
-  public void validateOptions(MessageBuilder buf)
+  public void validateOptions(LocalizableMessageBuilder buf)
   {
     validateGlobalOptions(buf);
     validateSubcommandOptions(buf);
@@ -394,14 +394,14 @@
    * {@inheritDoc}
    */
   @Override
-  public int validateGlobalOptions(MessageBuilder buf)
+  public int validateGlobalOptions(LocalizableMessageBuilder buf)
   {
     int returnValue;
     super.validateGlobalOptions(buf);
-    ArrayList<Message> errors = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
     if (secureArgsList.bindPasswordArg.isPresent() &&
         secureArgsList.bindPasswordFileArg.isPresent()) {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           secureArgsList.bindPasswordArg.getLongIdentifier(),
           secureArgsList.bindPasswordFileArg.getLongIdentifier());
       errors.add(message);
@@ -431,7 +431,7 @@
 
     if (noPromptArg.isPresent() && advancedArg.isPresent())
     {
-      Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+      LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
           noPromptArg.getLongIdentifier(),
           advancedArg.getLongIdentifier());
       errors.add(message);
@@ -469,7 +469,7 @@
     }
     if (errors.size() > 0)
     {
-      for (Message error : errors)
+      for (LocalizableMessage error : errors)
       {
         addMessage(buf, error);
       }
@@ -913,7 +913,7 @@
         "local-only",
         'l',
         "local-only",
-        Message.EMPTY);
+        LocalizableMessage.EMPTY);
     externalInitializationLocalOnlyArg.setHidden(true);
 
     Argument[] argsToAdd = { secureArgsList.hostNameArg,
@@ -1841,15 +1841,15 @@
   }
 
   /**
-   * Checks the subcommand options and updates the provided MessageBuilder
+   * Checks the subcommand options and updates the provided LocalizableMessageBuilder
    * with the errors that were encountered with the subcommand options.
    *
    * This method assumes that the method parseArguments for the parser has
    * already been called.
-   * @param buf the MessageBuilder object where we add the error messages
+   * @param buf the LocalizableMessageBuilder object where we add the error messages
    * describing the errors encountered.
    */
-  public void validateSubcommandOptions(MessageBuilder buf)
+  public void validateSubcommandOptions(LocalizableMessageBuilder buf)
   {
     if (isEnableReplicationSubcommand())
     {
@@ -1894,15 +1894,15 @@
 
   /**
    * Checks the purge historical subcommand options and updates the
-   * provided MessageBuilder with the errors that were encountered with the
+   * provided LocalizableMessageBuilder with the errors that were encountered with the
    * subcommand options.
    *
    * This method assumes that the method parseArguments for the parser has
    * already been called.
-   * @param buf the MessageBuilder object where we add the error messages
+   * @param buf the LocalizableMessageBuilder object where we add the error messages
    * describing the errors encountered.
    */
-  private void validatePurgeHistoricalOptions(MessageBuilder buf)
+  private void validatePurgeHistoricalOptions(LocalizableMessageBuilder buf)
   {
     try
     {
@@ -2029,15 +2029,15 @@
 
   /**
    * Checks the enable replication subcommand options and updates the provided
-   * MessageBuilder with the errors that were encountered with the subcommand
+   * LocalizableMessageBuilder with the errors that were encountered with the subcommand
    * options.
    *
    * This method assumes that the method parseArguments for the parser has
    * already been called.
-   * @param buf the MessageBuilder object where we add the error messages
+   * @param buf the LocalizableMessageBuilder object where we add the error messages
    * describing the errors encountered.
    */
-  private void validateEnableReplicationOptions(MessageBuilder buf)
+  private void validateEnableReplicationOptions(LocalizableMessageBuilder buf)
   {
     Argument[][] conflictingPairs =
     {
@@ -2056,7 +2056,7 @@
       Argument arg2 = conflictingPairs[i][1];
       if (arg1.isPresent() && arg2.isPresent())
       {
-        Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+        LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
             arg1.getLongIdentifier(), arg2.getLongIdentifier());
         addMessage(buf, message);
       }
@@ -2067,7 +2067,7 @@
     {
       if (port1Arg.getValue().equals(port2Arg.getValue()))
       {
-        Message message = ERR_REPLICATION_ENABLE_SAME_SERVER_PORT.get(
+        LocalizableMessage message = ERR_REPLICATION_ENABLE_SAME_SERVER_PORT.get(
             hostName1Arg.getValue(), port1Arg.getValue());
         addMessage(buf, message);
       }
@@ -2076,15 +2076,15 @@
 
   /**
    * Checks the disable replication subcommand options and updates the provided
-   * MessageBuilder with the errors that were encountered with the subcommand
+   * LocalizableMessageBuilder with the errors that were encountered with the subcommand
    * options.
    *
    * This method assumes that the method parseArguments for the parser has
    * already been called.
-   * @param buf the MessageBuilder object where we add the error messages
+   * @param buf the LocalizableMessageBuilder object where we add the error messages
    * describing the errors encountered.
    */
-  private void validateDisableReplicationOptions(MessageBuilder buf)
+  private void validateDisableReplicationOptions(LocalizableMessageBuilder buf)
   {
     Argument[][] conflictingPairs =
     {
@@ -2099,7 +2099,7 @@
       Argument arg2 = conflictingPairs[i][1];
       if (arg1.isPresent() && arg2.isPresent())
       {
-        Message message = ERR_TOOL_CONFLICTING_ARGS.get(
+        LocalizableMessage message = ERR_TOOL_CONFLICTING_ARGS.get(
             arg1.getLongIdentifier(), arg2.getLongIdentifier());
         addMessage(buf, message);
       }
@@ -2108,63 +2108,63 @@
 
   /**
    * Checks the initialize all replication subcommand options and updates the
-   * provided MessageBuilder with the errors that were encountered with the
+   * provided LocalizableMessageBuilder with the errors that were encountered with the
    * subcommand options.
    *
    * This method assumes that the method parseArguments for the parser has
    * already been called.
-   * @param buf the MessageBuilder object where we add the error messages
+   * @param buf the LocalizableMessageBuilder object where we add the error messages
    * describing the errors encountered.
    */
-  private void validateInitializeAllReplicationOptions(MessageBuilder buf)
+  private void validateInitializeAllReplicationOptions(LocalizableMessageBuilder buf)
   {
   }
 
   /**
    * Checks the pre external initialization subcommand options and updates the
-   * provided MessageBuilder with the errors that were encountered with the
+   * provided LocalizableMessageBuilder with the errors that were encountered with the
    * subcommand options.
    *
    * This method assumes that the method parseArguments for the parser has
    * already been called.
-   * @param buf the MessageBuilder object where we add the error messages
+   * @param buf the LocalizableMessageBuilder object where we add the error messages
    * describing the errors encountered.
    */
-  private void validatePreExternalInitializationOptions(MessageBuilder buf)
+  private void validatePreExternalInitializationOptions(LocalizableMessageBuilder buf)
   {
     validateInitializeAllReplicationOptions(buf);
   }
 
   /**
    * Checks the post external initialization subcommand options and updates the
-   * provided MessageBuilder with the errors that were encountered with the
+   * provided LocalizableMessageBuilder with the errors that were encountered with the
    * subcommand options.
    *
    * This method assumes that the method parseArguments for the parser has
    * already been called.
-   * @param buf the MessageBuilder object where we add the error messages
+   * @param buf the LocalizableMessageBuilder object where we add the error messages
    * describing the errors encountered.
    */
-  private void validatePostExternalInitializationOptions(MessageBuilder buf)
+  private void validatePostExternalInitializationOptions(LocalizableMessageBuilder buf)
   {
     validateInitializeAllReplicationOptions(buf);
   }
 
   /**
    * Checks the status replication subcommand options and updates the provided
-   * MessageBuilder with the errors that were encountered with the subcommand
+   * LocalizableMessageBuilder with the errors that were encountered with the subcommand
    * options.
    *
    * This method assumes that the method parseArguments for the parser has
    * already been called.
-   * @param buf the MessageBuilder object where we add the error messages
+   * @param buf the LocalizableMessageBuilder object where we add the error messages
    * describing the errors encountered.
    */
-  private void validateStatusReplicationOptions(MessageBuilder buf)
+  private void validateStatusReplicationOptions(LocalizableMessageBuilder buf)
   {
     if (quietArg.isPresent())
     {
-      Message message = ERR_REPLICATION_STATUS_QUIET.get(
+      LocalizableMessage message = ERR_REPLICATION_STATUS_QUIET.get(
           STATUS_REPLICATION_SUBCMD_NAME, "--"+quietArg.getLongIdentifier());
       addMessage(buf, message);
     }
@@ -2172,22 +2172,22 @@
 
   /**
    * Checks the initialize replication subcommand options and updates the
-   * provided MessageBuilder with the errors that were encountered with the
+   * provided LocalizableMessageBuilder with the errors that were encountered with the
    * subcommand options.
    *
    * This method assumes that the method parseArguments for the parser has
    * already been called.
-   * @param buf the MessageBuilder object where we add the error messages
+   * @param buf the LocalizableMessageBuilder object where we add the error messages
    * describing the errors encountered.
    */
-  private void validateInitializeReplicationOptions(MessageBuilder buf)
+  private void validateInitializeReplicationOptions(LocalizableMessageBuilder buf)
   {
     if (hostNameSourceArg.getValue().equalsIgnoreCase(
         hostNameDestinationArg.getValue()) && !isInteractive())
     {
       if (portSourceArg.getValue().equals(portDestinationArg.getValue()))
       {
-        Message message = ERR_REPLICATION_INITIALIZE_SAME_SERVER_PORT.get(
+        LocalizableMessage message = ERR_REPLICATION_INITIALIZE_SAME_SERVER_PORT.get(
             hostNameSourceArg.getValue(), portSourceArg.getValue());
         addMessage(buf, message);
       }
@@ -2195,11 +2195,11 @@
   }
 
   /**
-   * Adds a message to the provided MessageBuilder.
-   * @param buf the MessageBuilder.
+   * Adds a message to the provided LocalizableMessageBuilder.
+   * @param buf the LocalizableMessageBuilder.
    * @param message the message to be added.
    */
-  private void addMessage(MessageBuilder buf, Message message)
+  private void addMessage(LocalizableMessageBuilder buf, LocalizableMessage message)
   {
     if (buf.length() > 0)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliException.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliException.java
index 7afb6ab..de4d90b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliException.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.tools.dsreplication;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.OpenDsException;
 
 /**
@@ -43,7 +44,7 @@
    * @param errorCode the error code associated with this exception.
    * @param cause the cause that generated this exception.
    */
-  public ReplicationCliException(Message message,
+  public ReplicationCliException(LocalizableMessage message,
       ReplicationCliReturnCode errorCode,
       Throwable cause)
   {
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 25bed56..69915c6 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
@@ -40,8 +40,8 @@
 import org.opends.guitools.controlpanel.datamodel.BackendDescriptor;
 import org.opends.guitools.controlpanel.datamodel.BaseDNDescriptor;
 import org.opends.guitools.controlpanel.util.*;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.quicksetup.ApplicationException;
 import org.opends.quicksetup.Constants;
 import org.opends.quicksetup.Installation;
@@ -195,12 +195,12 @@
      * Cancel operation.
      */
     CANCEL(null);
-    private Message prompt;
-    private SubcommandChoice(Message prompt)
+    private LocalizableMessage prompt;
+    private SubcommandChoice(LocalizableMessage prompt)
     {
       this.prompt = prompt;
     }
-    Message getPrompt()
+    LocalizableMessage getPrompt()
     {
       return prompt;
     }
@@ -310,7 +310,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message =
+      LocalizableMessage message =
         ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       println(message);
       LOG.log(Level.SEVERE, "Complete error stack:", ae);
@@ -335,11 +335,11 @@
       }
       catch (ArgumentException ae)
       {
-        Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+        LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
 
         println(message);
         println();
-        println(Message.raw(argParser.getUsage()));
+        println(LocalizableMessage.raw(argParser.getUsage()));
         LOG.log(Level.SEVERE, "Complete error stack:", ae);
         returnValue = ERROR_USER_DATA;
       }
@@ -368,12 +368,12 @@
       {
         /* Check that the provided parameters are compatible.
          */
-        MessageBuilder buf = new MessageBuilder();
+        LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
         argParser.validateOptions(buf);
         if (buf.length() > 0)
         {
           println(buf.toMessage());
-          println(Message.raw(argParser.getUsage()));
+          println(LocalizableMessage.raw(argParser.getUsage()));
           returnValue = ERROR_USER_DATA;
         }
       }
@@ -543,7 +543,7 @@
           {
             println(ERR_REPLICATION_VALID_SUBCOMMAND_NOT_FOUND.get(
                 "--"+ToolConstants.OPTION_LONG_NO_PROMPT));
-            println(Message.raw(argParser.getUsage()));
+            println(LocalizableMessage.raw(argParser.getUsage()));
             returnValue = ERROR_USER_DATA;
             subcommandLaunched = false;
           }
@@ -877,7 +877,7 @@
     String separator =  formatter.getLineBreak().toString() +
     formatter.getTab().toString();
     printlnProgress();
-    Message msg = formatter.getFormattedProgress(
+    LocalizableMessage msg = formatter.getFormattedProgress(
         INFO_PROGRESS_PURGE_HISTORICAL.get(separator,
             Utils.getStringFromCollection(uData.getBaseDNs(), separator)));
     printProgress(msg);
@@ -932,7 +932,7 @@
       }
       catch (Exception e)
       {
-        Message msg = ERR_LAUNCHING_PURGE_HISTORICAL.get();
+        LocalizableMessage msg = ERR_LAUNCHING_PURGE_HISTORICAL.get();
         ReplicationCliReturnCode code = ERROR_LAUNCHING_PURGE_HISTORICAL;
         throw new ReplicationCliException(
             getThrowableMsg(msg, e), code, e);
@@ -1098,7 +1098,7 @@
       catch (NameAlreadyBoundException ex)
       {
         LOG.log(Level.SEVERE, "Error creating task "+attrs, ex);
-        Message msg = ERR_LAUNCHING_PURGE_HISTORICAL.get();
+        LocalizableMessage msg = ERR_LAUNCHING_PURGE_HISTORICAL.get();
         ReplicationCliReturnCode code = ERROR_LAUNCHING_PURGE_HISTORICAL;
         throw new ReplicationCliException(
             getThrowableMsg(msg, ex), code, ex);
@@ -1106,7 +1106,7 @@
       catch (NamingException ne)
       {
         LOG.log(Level.SEVERE, "Error creating task "+attrs, ne);
-        Message msg = ERR_LAUNCHING_PURGE_HISTORICAL.get();
+        LocalizableMessage msg = ERR_LAUNCHING_PURGE_HISTORICAL.get();
         ReplicationCliReturnCode code = ERROR_LAUNCHING_PURGE_HISTORICAL;
         throw new ReplicationCliException(
             getThrowableMsg(msg, ne), code, ne);
@@ -1168,7 +1168,7 @@
         if (helper.isDone(state) || helper.isStoppedByError(state))
         {
           isOver = true;
-          Message errorMsg;
+          LocalizableMessage errorMsg;
           String server = ConnectionUtils.getHostPort(ctx);
           if (lastLogMsg == null)
           {
@@ -1201,7 +1201,7 @@
       }
       catch (NamingException ne)
       {
-        Message msg = ERR_POOLING_PURGE_HISTORICAL.get();
+        LocalizableMessage msg = ERR_POOLING_PURGE_HISTORICAL.get();
         throw new ReplicationCliException(
           getThrowableMsg(msg, ne), ERROR_CONNECTING, ne);
       }
@@ -1980,7 +1980,7 @@
           if (port1 == port2)
           {
             port2 = -1;
-            Message message = ERR_REPLICATION_ENABLE_SAME_SERVER_PORT.get(
+            LocalizableMessage message = ERR_REPLICATION_ENABLE_SAME_SERVER_PORT.get(
                 host1, String.valueOf(port1));
             println();
             println(message);
@@ -3033,7 +3033,7 @@
           if (portSource == portDestination)
           {
             portDestination = -1;
-            Message message = ERR_REPLICATION_INITIALIZE_SAME_SERVER_PORT.get(
+            LocalizableMessage message = ERR_REPLICATION_INITIALIZE_SAME_SERVER_PORT.get(
                 hostSource, String.valueOf(portSource));
             println();
             println(message);
@@ -3557,7 +3557,7 @@
       if (adsContext.hasAdminData())
       {
         boolean reloadTopology = true;
-        LinkedList<Message> exceptionMsgs = new LinkedList<Message>();
+        LinkedList<LocalizableMessage> exceptionMsgs = new LinkedList<LocalizableMessage>();
         while (reloadTopology && !cancelled)
         {
           // We must recreate the cache because the trust manager in the
@@ -4002,7 +4002,7 @@
     int port1 = uData.getPort1();
     int port2 = uData.getPort2();
 
-    LinkedList<Message> errorMessages = new LinkedList<Message>();
+    LinkedList<LocalizableMessage> errorMessages = new LinkedList<LocalizableMessage>();
 
     printlnProgress();
     printProgress(
@@ -4180,7 +4180,7 @@
       }
     }
 
-    for (Message msg : errorMessages)
+    for (LocalizableMessage msg : errorMessages)
     {
       println();
       println(msg);
@@ -4440,7 +4440,7 @@
           try
           {
             printlnProgress();
-            Message msg = formatter.getFormattedProgress(
+            LocalizableMessage msg = formatter.getFormattedProgress(
                 INFO_PROGRESS_INITIALIZING_SUFFIX.get(baseDN,
                     ConnectionUtils.getHostPort(ctxSource)));
             printProgress(msg);
@@ -4555,7 +4555,7 @@
           try
           {
             printlnProgress();
-            Message msg = formatter.getFormattedProgress(
+            LocalizableMessage msg = formatter.getFormattedProgress(
                 INFO_PROGRESS_INITIALIZING_SUFFIX.get(baseDN,
                     ConnectionUtils.getHostPort(ctx)));
             printProgress(msg);
@@ -4643,7 +4643,7 @@
           try
           {
             printlnProgress();
-            Message msg = formatter.getFormattedWithPoints(
+            LocalizableMessage msg = formatter.getFormattedWithPoints(
                 INFO_PROGRESS_PRE_EXTERNAL_INITIALIZATION.get(baseDN));
             printProgress(msg);
             preExternalInitialization(baseDN, ctx, false);
@@ -4732,7 +4732,7 @@
           try
           {
             printlnProgress();
-            Message msg = formatter.getFormattedWithPoints(
+            LocalizableMessage msg = formatter.getFormattedWithPoints(
                 INFO_PROGRESS_POST_EXTERNAL_INITIALIZATION.get(baseDN));
             printProgress(msg);
             postExternalInitialization(baseDN, ctx, false);
@@ -5554,7 +5554,7 @@
     {
       // Inform the user of the potential errors that we found in the already
       // registered servers.
-      final Set<Message> messages = new LinkedHashSet<Message>();
+      final Set<LocalizableMessage> messages = new LinkedHashSet<LocalizableMessage>();
       try
       {
         final Set<PreferredConnection> cnx =
@@ -5617,7 +5617,7 @@
 
     if (!baseDNsWithNoReplicationServer.isEmpty())
     {
-      Message errorMsg =
+      LocalizableMessage errorMsg =
         ERR_REPLICATION_NO_REPLICATION_SERVER.get(
             Utils.getStringFromCollection(baseDNsWithNoReplicationServer,
                 Constants.LINE_SEPARATOR));
@@ -5629,7 +5629,7 @@
     {
       if (isInteractive())
       {
-        Message confirmMsg =
+        LocalizableMessage confirmMsg =
           INFO_REPLICATION_ONLY_ONE_REPLICATION_SERVER_CONFIRM.get(
               Utils.getStringFromCollection(baseDNsWithOneReplicationServer,
                   Constants.LINE_SEPARATOR));
@@ -5651,7 +5651,7 @@
       }
       else
       {
-        Message warningMsg =
+        LocalizableMessage warningMsg =
           INFO_REPLICATION_ONLY_ONE_REPLICATION_SERVER_WARNING.get(
               Utils.getStringFromCollection(baseDNsWithOneReplicationServer,
                   Constants.LINE_SEPARATOR));
@@ -6132,7 +6132,7 @@
         }
         catch (OpenDsException ode)
         {
-          Message msg = getMessageForEnableException(ode,
+          LocalizableMessage msg = getMessageForEnableException(ode,
               ConnectionUtils.getHostPort(ctx1), baseDN);
           throw new ReplicationCliException(msg,
               ERROR_ENABLING_REPLICATION_ON_BASEDN, ode);
@@ -6149,7 +6149,7 @@
         }
         catch (OpenDsException ode)
         {
-          Message msg = getMessageForEnableException(ode,
+          LocalizableMessage msg = getMessageForEnableException(ode,
               ConnectionUtils.getHostPort(ctx2), baseDN);
           throw new ReplicationCliException(msg,
               ERROR_ENABLING_REPLICATION_ON_BASEDN, ode);
@@ -6326,7 +6326,7 @@
     if (!argParser.isInteractive())
     {
       // Inform the user of the potential errors that we found.
-      Set<Message> messages = new LinkedHashSet<Message>();
+      Set<LocalizableMessage> messages = new LinkedHashSet<LocalizableMessage>();
       if (cache != null)
       {
         messages.addAll(cache.getErrorMessages());
@@ -6650,7 +6650,7 @@
       }
       catch (OpenDsException ode)
       {
-        Message msg = getMessageForDisableException(ode,
+        LocalizableMessage msg = getMessageForDisableException(ode,
             ConnectionUtils.getHostPort(ctx), baseDN);
         throw new ReplicationCliException(msg,
             ERROR_DISABLING_REPLICATION_ON_BASEDN, ode);
@@ -6831,11 +6831,11 @@
     if (!argParser.isInteractive())
     {
       // Inform the user of the potential errors that we found.
-      Set<Message> messages = new LinkedHashSet<Message>();
+      Set<LocalizableMessage> messages = new LinkedHashSet<LocalizableMessage>();
       messages.addAll(cache.getErrorMessages());
       if (!messages.isEmpty())
       {
-        Message msg =
+        LocalizableMessage msg =
             ERR_REPLICATION_STATUS_READING_REGISTERED_SERVERS.get(
                 Utils.getMessageFromCollection(messages,
                     Constants.LINE_SEPARATOR).toString());
@@ -7127,51 +7127,51 @@
       if (replica.isReplicated())
       {
         // Suffix DN
-        tableBuilder.appendCell(Message.raw(replica.getSuffix().getDN()));
+        tableBuilder.appendCell(LocalizableMessage.raw(replica.getSuffix().getDN()));
 
         // Server port
         tableBuilder.appendCell(
-          Message.raw(getHostPort(replica.getServer(), cnx)));
+          LocalizableMessage.raw(getHostPort(replica.getServer(), cnx)));
 
         // Number of entries
         int nEntries = replica.getEntries();
         if (nEntries >= 0)
         {
-          tableBuilder.appendCell(Message.raw(String.valueOf(nEntries)));
+          tableBuilder.appendCell(LocalizableMessage.raw(String.valueOf(nEntries)));
         }
         else
         {
-          tableBuilder.appendCell(Message.raw(""));
+          tableBuilder.appendCell(LocalizableMessage.raw(""));
         }
 
         // Replication enabled
         tableBuilder.appendCell(
-          Message.raw(Boolean.toString(replica.isReplicationEnabled())));
+          LocalizableMessage.raw(Boolean.toString(replica.isReplicationEnabled())));
 
         // DS instance ID
         tableBuilder.appendCell(
-            Message.raw(Integer.toString(replica.getReplicationId())));
+            LocalizableMessage.raw(Integer.toString(replica.getReplicationId())));
 
         // RS ID and port.
         if (replica.getServer().isReplicationServer())
         {
           tableBuilder.appendCell(Integer.toString(replica.getServer()
               .getReplicationServerId()));
-          tableBuilder.appendCell(Message.raw(String.valueOf(replica
+          tableBuilder.appendCell(LocalizableMessage.raw(String.valueOf(replica
               .getServer().getReplicationServerPort())));
         }
         else
         {
           if (scriptFriendly)
           {
-            tableBuilder.appendCell(Message.raw(""));
+            tableBuilder.appendCell(LocalizableMessage.raw(""));
           }
           else
           {
             tableBuilder.appendCell(
               INFO_REPLICATION_STATUS_NOT_A_REPLICATION_SERVER_SHORT.get());
           }
-          tableBuilder.appendCell(Message.raw(""));
+          tableBuilder.appendCell(LocalizableMessage.raw(""));
           replicasWithNoReplicationServer.add(replica);
         }
 
@@ -7179,11 +7179,11 @@
         int missingChanges = replica.getMissingChanges();
         if (missingChanges >= 0)
         {
-          tableBuilder.appendCell(Message.raw(String.valueOf(missingChanges)));
+          tableBuilder.appendCell(LocalizableMessage.raw(String.valueOf(missingChanges)));
         }
         else
         {
-          tableBuilder.appendCell(Message.raw(""));
+          tableBuilder.appendCell(LocalizableMessage.raw(""));
         }
 
         // Age of oldest missing change
@@ -7191,40 +7191,40 @@
         if (ageOfOldestMissingChange > 0)
         {
           Date date = new Date(ageOfOldestMissingChange);
-          tableBuilder.appendCell(Message.raw(date.toString()));
+          tableBuilder.appendCell(LocalizableMessage.raw(date.toString()));
         }
         else
         {
-          tableBuilder.appendCell(Message.raw(""));
+          tableBuilder.appendCell(LocalizableMessage.raw(""));
         }
 
         // Secure
         if (!replica.getServer().isReplicationServer())
         {
-          tableBuilder.appendCell(Message.raw(""));
+          tableBuilder.appendCell(LocalizableMessage.raw(""));
         }
         else
         {
           tableBuilder.appendCell(
-            Message.raw(Boolean.toString(
+            LocalizableMessage.raw(Boolean.toString(
               replica.getServer().isReplicationSecure())));
         }
       }
       else
       {
-        tableBuilder.appendCell(Message.raw(replica.getSuffix().getDN()));
+        tableBuilder.appendCell(LocalizableMessage.raw(replica.getSuffix().getDN()));
         tableBuilder.appendCell(
-          Message.raw(getHostPort(replica.getServer(), cnx)));
+          LocalizableMessage.raw(getHostPort(replica.getServer(), cnx)));
         int nEntries = replica.getEntries();
         if (nEntries >= 0)
         {
-          tableBuilder.appendCell(Message.raw(String.valueOf(nEntries)));
+          tableBuilder.appendCell(LocalizableMessage.raw(String.valueOf(nEntries)));
         }
         else
         {
-          tableBuilder.appendCell(Message.raw(""));
+          tableBuilder.appendCell(LocalizableMessage.raw(""));
         }
-        tableBuilder.appendCell(Message.raw(""));
+        tableBuilder.appendCell(LocalizableMessage.raw(""));
       }
     }
 
@@ -7234,15 +7234,15 @@
       serversWithNoReplica.add(server);
 
       // Suffix DN
-      tableBuilder.appendCell(Message.raw(""));
+      tableBuilder.appendCell(LocalizableMessage.raw(""));
 
       // Server port
-      tableBuilder.appendCell(Message.raw(getHostPort(server, cnx)));
+      tableBuilder.appendCell(LocalizableMessage.raw(getHostPort(server, cnx)));
 
       // Number of entries
       if (scriptFriendly)
       {
-        tableBuilder.appendCell(Message.raw(""));
+        tableBuilder.appendCell(LocalizableMessage.raw(""));
       }
       else
       {
@@ -7254,33 +7254,33 @@
       tableBuilder.appendCell(Boolean.toString(true));
 
       // DS ID
-      tableBuilder.appendCell(Message.raw(""));
+      tableBuilder.appendCell(LocalizableMessage.raw(""));
 
       // RS ID
       tableBuilder.appendCell(
-        Message.raw(Integer.toString(server.getReplicationServerId())));
+        LocalizableMessage.raw(Integer.toString(server.getReplicationServerId())));
 
       // Replication port
       int replicationPort = server.getReplicationServerPort();
       if (replicationPort >= 0)
       {
         tableBuilder.appendCell(
-          Message.raw(String.valueOf(replicationPort)));
+          LocalizableMessage.raw(String.valueOf(replicationPort)));
       }
       else
       {
-        tableBuilder.appendCell(Message.raw(""));
+        tableBuilder.appendCell(LocalizableMessage.raw(""));
       }
 
       // Missing changes
-      tableBuilder.appendCell(Message.raw(""));
+      tableBuilder.appendCell(LocalizableMessage.raw(""));
 
       // Age of oldest change
-      tableBuilder.appendCell(Message.raw(""));
+      tableBuilder.appendCell(LocalizableMessage.raw(""));
 
       // Secure
       tableBuilder.appendCell(
-        Message.raw(Boolean.toString(server.isReplicationSecure())));
+        LocalizableMessage.raw(Boolean.toString(server.isReplicationSecure())));
     }
 
     PrintStream out = getOutputStream();
@@ -7320,20 +7320,20 @@
     {
       tableBuilder.startRow();
       // Server port
-      tableBuilder.appendCell(Message.raw(getHostPort(server, cnx)));
+      tableBuilder.appendCell(LocalizableMessage.raw(getHostPort(server, cnx)));
       // Replication port
       int replicationPort = server.getReplicationServerPort();
       if (replicationPort >= 0)
       {
-        tableBuilder.appendCell(Message.raw(String.valueOf(replicationPort)));
+        tableBuilder.appendCell(LocalizableMessage.raw(String.valueOf(replicationPort)));
       }
       else
       {
-        tableBuilder.appendCell(Message.raw(""));
+        tableBuilder.appendCell(LocalizableMessage.raw(""));
       }
       // Secure
       tableBuilder.appendCell(
-        Message.raw(
+        LocalizableMessage.raw(
           Boolean.toString(server.isReplicationSecure())));
     }
 
@@ -7349,7 +7349,7 @@
     }
     else
     {
-      Message msg =
+      LocalizableMessage msg =
         INFO_REPLICATION_STATUS_INDEPENDENT_REPLICATION_SERVERS.get();
       printProgressMessageNoWrap(msg);
       printlnProgress();
@@ -7359,7 +7359,7 @@
       {
         buf.append("=");
       }
-      printProgressMessageNoWrap(Message.raw(buf.toString()));
+      printProgressMessageNoWrap(LocalizableMessage.raw(buf.toString()));
       printlnProgress();
 
       printer = new TextTablePrinter(getOutputStream());
@@ -7912,13 +7912,13 @@
       catch (NamingException ne)
       {
         String hostPort = getHostPort(s, cache.getPreferredConnections());
-        Message msg = getMessageForException(ne, hostPort);
+        LocalizableMessage msg = getMessageForException(ne, hostPort);
         throw new ReplicationCliException(msg, ERROR_CONNECTING, ne);
       }
       catch (OpenDsException ode)
       {
         String hostPort = getHostPort(s, cache.getPreferredConnections());
-        Message msg = getMessageForEnableException(ode, hostPort, baseDN);
+        LocalizableMessage msg = getMessageForEnableException(ode, hostPort, baseDN);
         throw new ReplicationCliException(msg,
             ERROR_ENABLING_REPLICATION_ON_BASEDN, ode);
       }
@@ -7975,7 +7975,7 @@
     catch (NamingException ne)
     {
       String hostPort = ConnectionUtils.getHostPort(ctxSource);
-      Message msg = getMessageForException(ne, hostPort);
+      LocalizableMessage msg = getMessageForException(ne, hostPort);
       throw new ReplicationCliException(msg, ERROR_READING_CONFIGURATION, ne);
     }
 
@@ -7994,7 +7994,7 @@
       @Override
       public void progressUpdate(ProgressUpdateEvent ev)
       {
-        Message newLogDetails = ev.getNewLogs();
+        LocalizableMessage newLogDetails = ev.getNewLogs();
         if ((newLogDetails != null) &&
             !newLogDetails.toString().trim().equals(""))
         {
@@ -8180,7 +8180,7 @@
       catch (NamingException ne)
       {
         LOG.log(Level.SEVERE, "Error creating task "+attrs, ne);
-        Message msg = isPre ?
+        LocalizableMessage msg = isPre ?
         ERR_LAUNCHING_PRE_EXTERNAL_INITIALIZATION.get():
           ERR_LAUNCHING_POST_EXTERNAL_INITIALIZATION.get();
         ReplicationCliReturnCode code = isPre?
@@ -8242,7 +8242,7 @@
         if (helper.isDone(state) || helper.isStoppedByError(state))
         {
           isOver = true;
-          Message errorMsg;
+          LocalizableMessage errorMsg;
           String server = ConnectionUtils.getHostPort(ctx);
           if (lastLogMsg == null)
           {
@@ -8283,7 +8283,7 @@
       }
       catch (NamingException ne)
       {
-        Message msg = isPre ?
+        LocalizableMessage msg = isPre ?
             ERR_POOLING_PRE_EXTERNAL_INITIALIZATION.get():
               ERR_POOLING_POST_EXTERNAL_INITIALIZATION.get();
             throw new ReplicationCliException(
@@ -8360,7 +8360,7 @@
             "ds-task-log-message",
             "ds-task-state"
         });
-    Message lastDisplayedMsg = null;
+    LocalizableMessage lastDisplayedMsg = null;
     String lastLogMsg = null;
     long lastTimeMsgDisplayed = -1;
     long lastTimeMsgLogged = -1;
@@ -8393,7 +8393,7 @@
 
         // Get the number of entries that have been handled and
         // a percentage...
-        Message msg;
+        LocalizableMessage msg;
         String sProcessed = getFirstValue(sr,
         "ds-task-processed-entry-count");
         String sUnprocessed = getFirstValue(sr,
@@ -8491,7 +8491,7 @@
         if (helper.isDone(state) || helper.isStoppedByError(state))
         {
           isOver = true;
-          Message errorMsg;
+          LocalizableMessage errorMsg;
           LOG.log(Level.INFO, "Last task entry: "+sr);
           if (displayProgress && (msg != null) && !msg.equals(lastDisplayedMsg))
           {
@@ -8711,20 +8711,20 @@
     catch (NamingException ne)
     {
       hostPort = getHostPort(server, cnx);
-      Message msg = getMessageForException(ne, hostPort);
+      LocalizableMessage msg = getMessageForException(ne, hostPort);
       throw new ReplicationCliException(msg, ERROR_CONNECTING, ne);
     }
     catch (OpenDsException ode)
     {
       if (lastBaseDN != null)
       {
-        Message msg = getMessageForDisableException(ode, hostPort, lastBaseDN);
+        LocalizableMessage msg = getMessageForDisableException(ode, hostPort, lastBaseDN);
         throw new ReplicationCliException(msg,
           ERROR_DISABLING_REPLICATION_REMOVE_REFERENCE_ON_BASEDN, ode);
       }
       else
       {
-        Message msg = ERR_REPLICATION_ERROR_READING_CONFIGURATION.get(hostPort,
+        LocalizableMessage msg = ERR_REPLICATION_ERROR_READING_CONFIGURATION.get(hostPort,
             ode.getMessage());
         throw new ReplicationCliException(msg, ERROR_CONNECTING, ode);
       }
@@ -8791,7 +8791,7 @@
     }
     catch (OpenDsException ode)
     {
-      Message msg = getMessageForDisableException(ode, hostPort, baseDN);
+      LocalizableMessage msg = getMessageForDisableException(ode, hostPort, baseDN);
         throw new ReplicationCliException(msg,
           ERROR_DISABLING_REPLICATION_REMOVE_REFERENCE_ON_BASEDN, ode);
     }
@@ -8863,7 +8863,7 @@
    * exception generated updating the configuration of the server) that
    * occurred when we were configuring the replication server.
    */
-  private Message getMessageForReplicationServerException(OpenDsException ode,
+  private LocalizableMessage getMessageForReplicationServerException(OpenDsException ode,
       String hostPort)
   {
     return ERR_REPLICATION_CONFIGURING_REPLICATIONSERVER.get(hostPort);
@@ -8884,7 +8884,7 @@
    * the replication domain or updating the list of replication servers of
    * the replication domain).
    */
-  private Message getMessageForEnableException(OpenDsException ode,
+  private LocalizableMessage getMessageForEnableException(OpenDsException ode,
       String hostPort, String baseDN)
   {
     return ERR_REPLICATION_CONFIGURING_BASEDN.get(baseDN, hostPort);
@@ -8905,7 +8905,7 @@
    * the replication domain or updating the list of replication servers of
    * the replication domain).
    */
-  private Message getMessageForDisableException(OpenDsException ode,
+  private LocalizableMessage getMessageForDisableException(OpenDsException ode,
       String hostPort, String baseDN)
   {
     return ERR_REPLICATION_CONFIGURING_BASEDN.get(baseDN, hostPort);
@@ -8916,9 +8916,9 @@
    * @param port the port that cannot be used.
    * @return a message informing the user that the provided port cannot be used.
    */
-  private Message getCannotBindToPortError(int port)
+  private LocalizableMessage getCannotBindToPortError(int port)
   {
-    Message message;
+    LocalizableMessage message;
     if (SetupUtils.isPriviledgedPort(port))
     {
       message = ERR_INSTALLDS_CANNOT_BIND_TO_PRIVILEGED_PORT.get(port);
@@ -8981,9 +8981,9 @@
    * @param rce the ReplicationCliException.
    * @return a message to be displayed to the user.
    */
-  private Message getCriticalExceptionMessage(ReplicationCliException rce)
+  private LocalizableMessage getCriticalExceptionMessage(ReplicationCliException rce)
   {
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     mb.append(rce.getMessageObject());
     File logFile = ControlPanelLog.getLogFile();
     if ((logFile != null) &&
@@ -9003,7 +9003,7 @@
       }
       else if (c instanceof OpenDsException)
       {
-        Message msg = ((OpenDsException)c).getMessageObject();
+        LocalizableMessage msg = ((OpenDsException)c).getMessageObject();
         if (msg != null)
         {
           s = msg.toString();
@@ -9139,7 +9139,7 @@
    * mode.
    * @param msg the message to be displayed.
    */
-  private void printProgressMessageNoWrap(Message msg)
+  private void printProgressMessageNoWrap(LocalizableMessage msg)
   {
     if (!isQuiet())
     {
@@ -10645,7 +10645,7 @@
 
       if (isInteractive())
       {
-        Message msg = INFO_REPLICATION_MERGING_REGISTRIES_CONFIRMATION.get(
+        LocalizableMessage msg = INFO_REPLICATION_MERGING_REGISTRIES_CONFIRMATION.get(
             ConnectionUtils.getHostPort(ctxSource),
             ConnectionUtils.getHostPort(ctxDestination),
             ConnectionUtils.getHostPort(ctxSource),
@@ -10669,7 +10669,7 @@
       }
       else
       {
-        Message msg = INFO_REPLICATION_MERGING_REGISTRIES_DESCRIPTION.get(
+        LocalizableMessage msg = INFO_REPLICATION_MERGING_REGISTRIES_DESCRIPTION.get(
             ConnectionUtils.getHostPort(ctxSource),
             ConnectionUtils.getHostPort(ctxDestination),
             ConnectionUtils.getHostPort(ctxSource),
@@ -10681,7 +10681,7 @@
       printProgress(INFO_REPLICATION_MERGING_REGISTRIES_PROGRESS.get());
       pointAdder.start();
 
-      Collection<Message> cache1Errors = cache1.getErrorMessages();
+      Collection<LocalizableMessage> cache1Errors = cache1.getErrorMessages();
       if (!cache1Errors.isEmpty())
       {
         throw new ReplicationCliException(
@@ -10692,7 +10692,7 @@
                     ERROR_READING_ADS, null);
       }
 
-      Collection<Message> cache2Errors = cache2.getErrorMessages();
+      Collection<LocalizableMessage> cache2Errors = cache2.getErrorMessages();
       if (!cache2Errors.isEmpty())
       {
         throw new ReplicationCliException(
@@ -10703,7 +10703,7 @@
                     ERROR_READING_ADS, null);
       }
 
-      Set<Message> commonRepServerIDErrors = new HashSet<Message>();
+      Set<LocalizableMessage> commonRepServerIDErrors = new HashSet<LocalizableMessage>();
       for (ServerDescriptor server1 : cache1.getServers())
       {
         if (server1.isReplicationServer())
@@ -10735,7 +10735,7 @@
           }
         }
       }
-      Set<Message> commonDomainIDErrors = new HashSet<Message>();
+      Set<LocalizableMessage> commonDomainIDErrors = new HashSet<LocalizableMessage>();
       for (SuffixDescriptor suffix1 : cache1.getSuffixes())
       {
         for (ReplicaDescriptor replica1 : suffix1.getReplicas())
@@ -10780,7 +10780,7 @@
       }
       if (!commonRepServerIDErrors.isEmpty() || !commonDomainIDErrors.isEmpty())
       {
-        MessageBuilder mb = new MessageBuilder();
+        LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
         if (!commonRepServerIDErrors.isEmpty())
         {
           mb.append(ERR_REPLICATION_ENABLE_COMMON_REPLICATION_SERVER_ID.get(
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliReturnCode.java b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliReturnCode.java
index 5445ce2..10d6266 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliReturnCode.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/dsreplication/ReplicationCliReturnCode.java
@@ -22,13 +22,14 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.tools.dsreplication;
 
 import static org.opends.messages.AdminToolMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  *
@@ -225,11 +226,11 @@
       ERR_REPLICATION_NO_MESSAGE.get());
 
 
-  private Message message;
+  private LocalizableMessage message;
   private int returnCode;
 
   // Private constructor.
-  private ReplicationCliReturnCode(int returnCode, Message message)
+  private ReplicationCliReturnCode(int returnCode, LocalizableMessage message)
   {
     this.returnCode = returnCode;
     this.message = message;
@@ -240,7 +241,7 @@
    *
    * @return The corresponding message.
    */
-  public Message getMessage()
+  public LocalizableMessage getMessage()
   {
     return message;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/AttributeValueTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/AttributeValueTag.java
index 4f2587d..0e3c960 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/AttributeValueTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/AttributeValueTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -109,12 +110,12 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
           getName(), lineNumber, 1, 2, arguments.length);
       throw new InitializationException(message);
     }
@@ -123,7 +124,7 @@
     attributeType = DirectoryServer.getAttributeType(lowerName, true);
     if (! branch.hasAttribute(attributeType))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
       throw new InitializationException(message);
     }
@@ -135,14 +136,14 @@
         numCharacters = Integer.parseInt(arguments[1]);
         if (numCharacters < 0)
         {
-          Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
               numCharacters, 0, getName(), lineNumber);
           throw new InitializationException(message);
         }
       }
       catch (NumberFormatException nfe)
       {
-        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
             arguments[1], getName(), lineNumber);
         throw new InitializationException(message);
       }
@@ -172,12 +173,12 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
           getName(), lineNumber, 1, 2, arguments.length);
       throw new InitializationException(message);
     }
@@ -186,7 +187,7 @@
     attributeType = DirectoryServer.getAttributeType(lowerName, true);
     if (! template.hasAttribute(attributeType))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
       throw new InitializationException(message);
     }
@@ -198,14 +199,14 @@
         numCharacters = Integer.parseInt(arguments[1]);
         if (numCharacters < 0)
         {
-          Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
               numCharacters, 0, getName(), lineNumber);
           throw new InitializationException(message);
         }
       }
       catch (NumberFormatException nfe)
       {
-        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
             arguments[1], getName(), lineNumber);
         throw new InitializationException(message);
       }
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 56d3793..9cbdcc8 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -117,7 +117,7 @@
     // Get the RDN template lines based just on the entry DN.
     Entry entry = createEntry(branchDN);
 
-    ArrayList<Message>       warnings = new ArrayList<Message>();
+    ArrayList<LocalizableMessage>       warnings = new ArrayList<LocalizableMessage>();
     ArrayList<TemplateLine> lineList = new ArrayList<TemplateLine>();
 
     for (String ocName : entry.getObjectClasses().values())
@@ -223,7 +223,7 @@
              templates.get(toLowerCase(subordinateTemplateNames[i]));
         if (subordinateTemplates[i] == null)
         {
-          Message message = ERR_MAKELDIF_UNDEFINED_BRANCH_SUBORDINATE.get(
+          LocalizableMessage message = ERR_MAKELDIF_UNDEFINED_BRANCH_SUBORDINATE.get(
               branchDN.toString(), subordinateTemplateNames[i]);
           throw new MakeLDIFException(message);
         }
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 ecc388f..6ca490f 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -103,7 +103,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -128,7 +128,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -163,14 +163,14 @@
       }
       catch (NumberFormatException nfe)
       {
-        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
             arguments[0], getName(), lineNumber);
         throw new InitializationException(message);
       }
     }
     else
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
           getName(), lineNumber, 0, 1, arguments.length);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/FileTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/FileTag.java
index 1f76731..cc9a5e6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/FileTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/FileTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -121,7 +122,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -146,7 +147,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -168,7 +169,7 @@
    *                                   this tag.
    */
   private void initializeInternal(TemplateFile templateFile, String[] arguments,
-                                  int lineNumber, List<Message> warnings)
+                                  int lineNumber, List<LocalizableMessage> warnings)
           throws InitializationException
   {
     random = templateFile.getRandom();
@@ -177,7 +178,7 @@
     // There must be at least one argument, and possibly two.
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
           getName(), lineNumber, 1, 2, arguments.length);
       throw new InitializationException(message);
     }
@@ -187,7 +188,7 @@
     dataFile = templateFile.getFile(arguments[0]);
     if ((dataFile == null) || (! dataFile.exists()))
     {
-      Message message = ERR_MAKELDIF_TAG_CANNOT_FIND_FILE.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_FIND_FILE.get(
           arguments[0], getName(), lineNumber);
       throw new InitializationException(message);
     }
@@ -208,7 +209,7 @@
       }
       else
       {
-        Message message = ERR_MAKELDIF_TAG_INVALID_FILE_ACCESS_MODE.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_FILE_ACCESS_MODE.get(
             arguments[1], getName(), lineNumber);
         throw new InitializationException(message);
       }
@@ -226,7 +227,7 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_MAKELDIF_TAG_CANNOT_READ_FILE.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_READ_FILE.get(
           arguments[0], getName(), lineNumber, String.valueOf(ioe));
       throw new InitializationException(message, ioe);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/FirstNameTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/FirstNameTag.java
index 66552b6..3caee8e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/FirstNameTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/FirstNameTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -101,14 +102,14 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     this.templateFile = templateFile;
 
     if (arguments.length != 0)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 0, arguments.length);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/GUIDTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/GUIDTag.java
index 3cc4fc2..4a2a60f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/GUIDTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/GUIDTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -97,12 +98,12 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 0, arguments.length);
       throw new InitializationException(message);
     }
@@ -127,12 +128,12 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 0, arguments.length);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/IfAbsentTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/IfAbsentTag.java
index 68807e3..57ed097 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/IfAbsentTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/IfAbsentTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -109,12 +110,12 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
           getName(), lineNumber, 1, 2, arguments.length);
       throw new InitializationException(message);
     }
@@ -123,7 +124,7 @@
     AttributeType t = DirectoryServer.getAttributeType(lowerName, true);
     if (! branch.hasAttribute(t))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
       throw new InitializationException(message);
     }
@@ -157,12 +158,12 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
           getName(), lineNumber, 1, 2, arguments.length);
       throw new InitializationException(message);
     }
@@ -171,7 +172,7 @@
     attributeType = DirectoryServer.getAttributeType(lowerName, true);
     if (! template.hasAttribute(attributeType))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/IfPresentTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/IfPresentTag.java
index 2ed6511..c6062af 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/IfPresentTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/IfPresentTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -109,12 +110,12 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
           getName(), lineNumber, 1, 2, arguments.length);
       throw new InitializationException(message);
     }
@@ -123,7 +124,7 @@
     AttributeType t = DirectoryServer.getAttributeType(lowerName, true);
     if (! branch.hasAttribute(t))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
       throw new InitializationException(message);
     }
@@ -157,12 +158,12 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if ((arguments.length < 1) || (arguments.length > 2))
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
           getName(), lineNumber, 1, 2, arguments.length);
       throw new InitializationException(message);
     }
@@ -171,7 +172,7 @@
     attributeType = DirectoryServer.getAttributeType(lowerName, true);
     if (! template.hasAttribute(attributeType))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get(arguments[0], lineNumber);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/LastNameTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/LastNameTag.java
index c050d4c..3c556cf 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/LastNameTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/LastNameTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -101,14 +102,14 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     this.templateFile = templateFile;
 
     if (arguments.length != 0)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 0, arguments.length);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ListTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ListTag.java
index 65d6e08..33ee518 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ListTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/ListTag.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
 
@@ -33,7 +34,7 @@
 import org.opends.server.types.InitializationException;
 
 import static org.opends.messages.ToolMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -115,7 +116,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -140,7 +141,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -162,7 +163,7 @@
    *                                   this tag.
    */
   private void initializeInternal(TemplateFile templateFile, String[] arguments,
-                                  int lineNumber, List<Message> warnings)
+                                  int lineNumber, List<LocalizableMessage> warnings)
           throws InitializationException
   {
     if (arguments.length == 0)
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/MakeLDIF.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/MakeLDIF.java
index 34afef5..fef47d2 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/MakeLDIF.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/MakeLDIF.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.makeldif;
 
@@ -33,7 +33,7 @@
 import java.util.LinkedList;
 import java.util.Random;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.AttributeType;
 import org.opends.server.types.ExistingFileBehavior;
@@ -127,7 +127,7 @@
     err = NullOutputStream.wrapOrNullStream(errStream);
 
 //  Create and initialize the argument parser for this program.
-    Message toolDescription = INFO_MAKELDIF_TOOL_DESCRIPTION.get();
+    LocalizableMessage toolDescription = INFO_MAKELDIF_TOOL_DESCRIPTION.get();
     ArgumentParser  argParser = new ArgumentParser(CLASS_NAME, toolDescription,
                                                    false);
     BooleanArgument showUsage;
@@ -197,7 +197,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
@@ -210,7 +210,7 @@
     }
     catch (ArgumentException ae)
     {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       err.println(argParser.getUsage());
       return 1;
@@ -248,7 +248,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_MAKELDIF_CANNOT_INITIALIZE_JMX.get(
+        LocalizableMessage message = ERR_MAKELDIF_CANNOT_INITIALIZE_JMX.get(
             String.valueOf(configFile.getValue()), e.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -261,7 +261,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_MAKELDIF_CANNOT_INITIALIZE_CONFIG.get(
+        LocalizableMessage message = ERR_MAKELDIF_CANNOT_INITIALIZE_CONFIG.get(
             String.valueOf(configFile.getValue()), e.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -276,7 +276,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_MAKELDIF_CANNOT_INITIALIZE_SCHEMA.get(
+        LocalizableMessage message = ERR_MAKELDIF_CANNOT_INITIALIZE_SCHEMA.get(
             String.valueOf(configFile.getValue()), e.getMessage());
         System.err.println(wrapText(message, MAX_LINE_WIDTH));
         return 1;
@@ -308,7 +308,7 @@
     File resourceDir = new File(resourcePath.getValue());
     if (! resourceDir.exists())
     {
-      Message message = ERR_MAKELDIF_NO_SUCH_RESOURCE_DIRECTORY.get(
+      LocalizableMessage message = ERR_MAKELDIF_NO_SUCH_RESOURCE_DIRECTORY.get(
               resourcePath.getValue());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -316,7 +316,7 @@
 
 
     // Load and parse the template file.
-    LinkedList<Message> warnings = new LinkedList<Message>();
+    LinkedList<LocalizableMessage> warnings = new LinkedList<LocalizableMessage>();
     TemplateFile templateFile = new TemplateFile(resourcePath.getValue(),
                                                  random);
     try
@@ -325,14 +325,14 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_MAKELDIF_IOEXCEPTION_DURING_PARSE.get(
+      LocalizableMessage message = ERR_MAKELDIF_IOEXCEPTION_DURING_PARSE.get(
               ioe.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
     }
     catch (Exception e)
     {
-      Message message = ERR_MAKELDIF_EXCEPTION_DURING_PARSE.get(
+      LocalizableMessage message = ERR_MAKELDIF_EXCEPTION_DURING_PARSE.get(
               e.getMessage());
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -342,7 +342,7 @@
     // If there were any warnings, then print them.
     if (! warnings.isEmpty())
     {
-      for (Message s : warnings)
+      for (LocalizableMessage s : warnings)
       {
         err.println(wrapText(s, MAX_LINE_WIDTH));
       }
@@ -359,7 +359,7 @@
     }
     catch (IOException ioe)
     {
-      Message message = ERR_MAKELDIF_UNABLE_TO_CREATE_LDIF.get(
+      LocalizableMessage message = ERR_MAKELDIF_UNABLE_TO_CREATE_LDIF.get(
               ldifFile.getValue(), String.valueOf(ioe));
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -373,7 +373,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_MAKELDIF_ERROR_WRITING_LDIF.get(
+      LocalizableMessage message = ERR_MAKELDIF_ERROR_WRITING_LDIF.get(
               ldifFile.getValue(), stackTraceToSingleLineString(e));
       err.println(wrapText(message, MAX_LINE_WIDTH));
       return 1;
@@ -433,7 +433,7 @@
 
         if ((++entriesWritten % 1000) == 0)
         {
-          Message message =
+          LocalizableMessage message =
             INFO_MAKELDIF_PROCESSED_N_ENTRIES.get(entriesWritten);
           out.println(wrapText(message, MAX_LINE_WIDTH));
         }
@@ -450,7 +450,7 @@
             break ;
           }
         }
-        Message message =
+        LocalizableMessage message =
           ERR_MAKELDIF_CANNOT_WRITE_ENTRY_WITHOUT_DN.get(nullRdn);
         err.println(wrapText(message, MAX_LINE_WIDTH));
         return true;
@@ -464,7 +464,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_MAKELDIF_CANNOT_WRITE_ENTRY.get(
+      LocalizableMessage message = ERR_MAKELDIF_CANNOT_WRITE_ENTRY.get(
           String.valueOf(entry.getDN()), stackTraceToSingleLineString(e));
       throw new MakeLDIFException(message, e);
     }
@@ -479,7 +479,7 @@
   @Override
   public void closeEntryWriter()
   {
-    Message message = INFO_MAKELDIF_PROCESSING_COMPLETE.get(entriesWritten);
+    LocalizableMessage message = INFO_MAKELDIF_PROCESSING_COMPLETE.get(entriesWritten);
     out.println(wrapText(message, MAX_LINE_WIDTH));
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/MakeLDIFException.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/MakeLDIFException.java
index e112270..79e6d57 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/MakeLDIFException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/MakeLDIFException.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
 
@@ -29,7 +30,7 @@
 
 
 import org.opends.server.types.IdentifiedException;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -55,7 +56,7 @@
    *
    * @param  message  The message for this exception.
    */
-  public MakeLDIFException(Message message)
+  public MakeLDIFException(LocalizableMessage message)
   {
     super(message);
   }
@@ -68,7 +69,7 @@
    * @param  message  The message for this exception.
    * @param  cause    The underlying cause for this exception.
    */
-  public MakeLDIFException(Message message, Throwable cause)
+  public MakeLDIFException(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
   }
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 3813a35..f064aad 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -98,12 +98,12 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 0, arguments.length);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/PresenceTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/PresenceTag.java
index d77296f..5ee12ac 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/PresenceTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/PresenceTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -105,7 +106,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments,  lineNumber);
@@ -130,7 +131,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments,  lineNumber);
@@ -157,7 +158,7 @@
 
     if (arguments.length != 1)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 1, arguments.length);
       throw new InitializationException(message);
     }
@@ -168,20 +169,20 @@
 
       if (percentage < 0)
       {
-        Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
             percentage, 0, getName(), lineNumber);
         throw new InitializationException(message);
       }
       else if (percentage > 100)
       {
-        Message message = ERR_MAKELDIF_TAG_INTEGER_ABOVE_UPPER_BOUND.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_INTEGER_ABOVE_UPPER_BOUND.get(
             percentage, 100, getName(), lineNumber);
         throw new InitializationException(message);
       }
     }
     catch (NumberFormatException nfe)
     {
-      Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
           arguments[0], getName(), lineNumber);
       throw new InitializationException(message);
     }
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 96bcef4..06573d9 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -98,12 +98,12 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 0, arguments.length);
       throw new InitializationException(message);
     }
@@ -128,12 +128,12 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 0, arguments.length);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RandomTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RandomTag.java
index ed8b785..37f6781 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RandomTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/RandomTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -257,7 +258,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -282,7 +283,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber, warnings);
@@ -305,7 +306,7 @@
    *                                   this tag.
    */
   private void initializeInternal(TemplateFile templateFile, String[] arguments,
-                                  int lineNumber, List<Message> warnings)
+                                  int lineNumber, List<LocalizableMessage> warnings)
           throws InitializationException
   {
     random = templateFile.getRandom();
@@ -314,7 +315,7 @@
     // to generate.
     if ((arguments == null) || (arguments.length == 0))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MAKELDIF_TAG_NO_RANDOM_TYPE_ARGUMENT.get(lineNumber);
       throw new InitializationException(message);
     }
@@ -340,20 +341,20 @@
 
           if (minLength < 0)
           {
-            Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+            LocalizableMessage message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
                 minLength, 0, getName(), lineNumber);
             throw new InitializationException(message);
           }
           else if (minLength == 0)
           {
-            Message message = WARN_MAKELDIF_TAG_WARNING_EMPTY_VALUE.get(
+            LocalizableMessage message = WARN_MAKELDIF_TAG_WARNING_EMPTY_VALUE.get(
                     lineNumber);
             warnings.add(message);
           }
         }
         catch (NumberFormatException nfe)
         {
-          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
               arguments[1], getName(), lineNumber);
           throw new InitializationException(message, nfe);
         }
@@ -370,7 +371,7 @@
           }
           catch (Exception e)
           {
-            Message message = ERR_MAKELDIF_TAG_INVALID_FORMAT_STRING.get(
+            LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_FORMAT_STRING.get(
                 arguments[3], getName(), lineNumber);
             throw new InitializationException(message, e);
           }
@@ -386,7 +387,7 @@
         }
         catch (NumberFormatException nfe)
         {
-          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
               arguments[1], getName(), lineNumber);
           throw new InitializationException(message, nfe);
         }
@@ -396,7 +397,7 @@
           maxValue = Long.parseLong(arguments[2]);
           if (maxValue < minValue)
           {
-            Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+            LocalizableMessage message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
                 maxValue, minValue, getName(), lineNumber);
             throw new InitializationException(message);
           }
@@ -405,14 +406,14 @@
         }
         catch (NumberFormatException nfe)
         {
-          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
               arguments[2], getName(), lineNumber);
           throw new InitializationException(message, nfe);
         }
       }
       else
       {
-        Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
             getName(), lineNumber, 2, 4, numArgs);
         throw new InitializationException(message);
       }
@@ -426,7 +427,7 @@
     {
       if ((numArgs < 3) || (numArgs > 4))
       {
-        Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
             getName(), lineNumber, 3, 4, numArgs);
         throw new InitializationException(message);
       }
@@ -459,21 +460,21 @@
           maxLength = Integer.parseInt(arguments[1]);
           if (maxLength <= 0)
           {
-            Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+            LocalizableMessage message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
                 maxLength, 1, getName(), lineNumber);
             throw new InitializationException(message);
           }
         }
         catch (NumberFormatException nfe)
         {
-          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
               arguments[1], getName(), lineNumber);
           throw new InitializationException(message, nfe);
         }
       }
       else
       {
-        Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
             getName(), lineNumber, 1, 2, numArgs);
         throw new InitializationException(message);
       }
@@ -484,7 +485,7 @@
     }
     else
     {
-      Message message = ERR_MAKELDIF_TAG_UNKNOWN_RANDOM_TYPE.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_UNKNOWN_RANDOM_TYPE.get(
           lineNumber, randomTypeString);
       throw new InitializationException(message);
     }
@@ -506,7 +507,7 @@
    *                     be placed.
    */
   private void decodeLength(String[] arguments, int startPos, int lineNumber,
-                            List<Message> warnings)
+                            List<LocalizableMessage> warnings)
           throws InitializationException
   {
     int numArgs = arguments.length - startPos + 1;
@@ -522,20 +523,20 @@
 
         if (minLength < 0)
         {
-          Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
               minLength, 0, getName(), lineNumber);
           throw new InitializationException(message);
         }
         else if (minLength == 0)
         {
-          Message message = WARN_MAKELDIF_TAG_WARNING_EMPTY_VALUE.get(
+          LocalizableMessage message = WARN_MAKELDIF_TAG_WARNING_EMPTY_VALUE.get(
                   lineNumber);
           warnings.add(message);
         }
       }
       catch (NumberFormatException nfe)
       {
-        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
             arguments[startPos], getName(), lineNumber);
         throw new InitializationException(message, nfe);
       }
@@ -551,14 +552,14 @@
 
         if (minLength < 0)
         {
-          Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
               minLength, 0, getName(), lineNumber);
           throw new InitializationException(message);
         }
       }
       catch (NumberFormatException nfe)
       {
-        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
             arguments[startPos], getName(), lineNumber);
         throw new InitializationException(message, nfe);
       }
@@ -570,27 +571,27 @@
 
         if (maxLength < minLength)
         {
-          Message message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_INTEGER_BELOW_LOWER_BOUND.get(
               maxLength, minLength, getName(), lineNumber);
           throw new InitializationException(message);
         }
         else if (maxLength == 0)
         {
-          Message message =
+          LocalizableMessage message =
                   WARN_MAKELDIF_TAG_WARNING_EMPTY_VALUE.get(lineNumber);
           warnings.add(message);
         }
       }
       catch (NumberFormatException nfe)
       {
-        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
             arguments[startPos+1], getName(), lineNumber);
         throw new InitializationException(message, nfe);
       }
     }
     else
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
           getName(), lineNumber, startPos+1, startPos+2, numArgs);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/SequentialTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/SequentialTag.java
index 224ce6a..db76ec1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/SequentialTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/SequentialTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -107,7 +108,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -132,7 +133,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -169,7 +170,7 @@
         }
         catch (NumberFormatException nfe)
         {
-          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
               arguments[0], getName(), lineNumber);
           throw new InitializationException(message);
         }
@@ -184,7 +185,7 @@
         }
         catch (NumberFormatException nfe)
         {
-          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
               arguments[0], getName(), lineNumber);
           throw new InitializationException(message);
         }
@@ -199,7 +200,7 @@
         }
         else
         {
-          Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_BOOLEAN.get(
+          LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_BOOLEAN.get(
               arguments[1], getName(), lineNumber);
           throw new InitializationException(message);
         }
@@ -207,7 +208,7 @@
         nextValue = initialValue;
         break;
       default:
-        Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
             getName(), lineNumber, 0, 2, arguments.length);
         throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/StaticTextTag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/StaticTextTag.java
index c721ec9..42ba2ea 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/StaticTextTag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/StaticTextTag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -101,12 +102,12 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if (arguments.length != 1)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 1, arguments.length);
       throw new InitializationException(message);
     }
@@ -133,12 +134,12 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if (arguments.length != 1)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 1, arguments.length);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Tag.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Tag.java
index 7c8488e..3b8d423 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Tag.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Tag.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -77,7 +78,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     // No implementation required by default.
@@ -103,7 +104,7 @@
   public abstract void initializeForTemplate(TemplateFile templateFile,
                                              Template template,
                                              String[] arguments, int lineNumber,
-                                             List<Message> warnings)
+                                             List<LocalizableMessage> warnings)
          throws InitializationException;
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Template.java b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Template.java
index ab071ee..b043b3d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Template.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/makeldif/Template.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -164,7 +165,7 @@
              templates.get(toLowerCase(subordinateTemplateNames[i]));
         if (subordinateTemplates[i] == null)
         {
-          Message message = ERR_MAKELDIF_UNDEFINED_TEMPLATE_SUBORDINATE.get(
+          LocalizableMessage message = ERR_MAKELDIF_UNDEFINED_TEMPLATE_SUBORDINATE.get(
               subordinateTemplateNames[i], name);
           throw new MakeLDIFException(message);
         }
@@ -194,7 +195,7 @@
     if (! rdnAttrs.isEmpty())
     {
       AttributeType t       = rdnAttrs.iterator().next();
-      Message message =
+      LocalizableMessage message =
           ERR_MAKELDIF_TEMPLATE_MISSING_RDN_ATTR.get(name, t.getNameOrOID());
       throw new MakeLDIFException(message);
     }
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 aa2bbe9..bf3202c 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -237,7 +237,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_MAKELDIF_CANNOT_LOAD_TAG_CLASS.get(tagClass);
+      LocalizableMessage message = ERR_MAKELDIF_CANNOT_LOAD_TAG_CLASS.get(tagClass);
       throw new MakeLDIFException(message, e);
     }
 
@@ -248,14 +248,14 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_MAKELDIF_CANNOT_INSTANTIATE_TAG.get(tagClass);
+      LocalizableMessage message = ERR_MAKELDIF_CANNOT_INSTANTIATE_TAG.get(tagClass);
       throw new MakeLDIFException(message, e);
     }
 
     String lowerName = toLowerCase(t.getName());
     if (registeredTags.containsKey(lowerName))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MAKELDIF_CONFLICTING_TAG_NAME.get(tagClass, t.getName());
       throw new MakeLDIFException(message);
     }
@@ -591,7 +591,7 @@
    * @throws  MakeLDIFException  If any other problem occurs while parsing the
    *                             template file.
    */
-  public void parse(String filename, List<Message> warnings)
+  public void parse(String filename, List<LocalizableMessage> warnings)
          throws IOException, InitializationException, MakeLDIFException
   {
     ArrayList<String> fileLines = new ArrayList<String>();
@@ -600,7 +600,7 @@
     File f = getFile(filename);
     if ((f == null) || (! f.exists()))
     {
-      Message message = ERR_MAKELDIF_COULD_NOT_FIND_TEMPLATE_FILE.get(filename);
+      LocalizableMessage message = ERR_MAKELDIF_COULD_NOT_FIND_TEMPLATE_FILE.get(filename);
       throw new IOException(message.toString());
     }
     else
@@ -649,7 +649,7 @@
    * @throws  MakeLDIFException  If any other problem occurs while parsing the
    *                             template file.
    */
-  public void parse(InputStream inputStream, List<Message> warnings)
+  public void parse(InputStream inputStream, List<LocalizableMessage> warnings)
          throws IOException, InitializationException, MakeLDIFException
   {
     ArrayList<String> fileLines = new ArrayList<String>();
@@ -690,7 +690,7 @@
    * @throws  MakeLDIFException  If any other problem occurs while parsing the
    *                             template file.
    */
-  public void parse(String[] lines, List<Message> warnings)
+  public void parse(String[] lines, List<LocalizableMessage> warnings)
          throws InitializationException, MakeLDIFException
   {
     // Create temporary variables that will be used to hold the data read.
@@ -730,7 +730,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_MAKELDIF_CANNOT_LOAD_TAG_CLASS.get(className);
+          LocalizableMessage message = ERR_MAKELDIF_CANNOT_LOAD_TAG_CLASS.get(className);
           throw new MakeLDIFException(message, e);
         }
 
@@ -741,7 +741,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_MAKELDIF_CANNOT_INSTANTIATE_TAG.get(className);
+          LocalizableMessage message = ERR_MAKELDIF_CANNOT_INSTANTIATE_TAG.get(className);
           throw new MakeLDIFException(message, e);
         }
 
@@ -749,7 +749,7 @@
         if (registeredTags.containsKey(lowerName) ||
             templateFileIncludeTags.containsKey(lowerName))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_MAKELDIF_CONFLICTING_TAG_NAME.get(className, tag.getName());
           throw new MakeLDIFException(message);
         }
@@ -763,21 +763,21 @@
         int equalPos = line.indexOf('=', 7);
         if (equalPos < 0)
         {
-          Message message = ERR_MAKELDIF_DEFINE_MISSING_EQUALS.get(lineNumber);
+          LocalizableMessage message = ERR_MAKELDIF_DEFINE_MISSING_EQUALS.get(lineNumber);
           throw new MakeLDIFException(message);
         }
 
         String name  = line.substring(7, equalPos).trim();
         if (name.length() == 0)
         {
-          Message message = ERR_MAKELDIF_DEFINE_NAME_EMPTY.get(lineNumber);
+          LocalizableMessage message = ERR_MAKELDIF_DEFINE_NAME_EMPTY.get(lineNumber);
           throw new MakeLDIFException(message);
         }
 
         String lowerName = toLowerCase(name);
         if (templateFileConstants.containsKey(lowerName))
         {
-          Message message =
+          LocalizableMessage message =
               ERR_MAKELDIF_CONFLICTING_CONSTANT_NAME.get(name, lineNumber);
           throw new MakeLDIFException(message);
         }
@@ -785,7 +785,7 @@
         String value = line.substring(equalPos+1);
         if (value.length() == 0)
         {
-          Message message = ERR_MAKELDIF_WARNING_DEFINE_VALUE_EMPTY.get(
+          LocalizableMessage message = ERR_MAKELDIF_WARNING_DEFINE_VALUE_EMPTY.get(
                   name, lineNumber);
           warnings.add(message);
         }
@@ -827,7 +827,7 @@
         DN branchDN = b.getBranchDN();
         if (templateFileBranches.containsKey(branchDN))
         {
-          Message message = ERR_MAKELDIF_CONFLICTING_BRANCH_DN.get(
+          LocalizableMessage message = ERR_MAKELDIF_CONFLICTING_BRANCH_DN.get(
               String.valueOf(branchDN), startLineNumber);
           throw new MakeLDIFException(message);
         }
@@ -871,7 +871,7 @@
         String lowerName = toLowerCase(t.getName());
         if (templateFileTemplates.containsKey(lowerName))
         {
-          Message message = ERR_MAKELDIF_CONFLICTING_TEMPLATE_NAME.get(
+          LocalizableMessage message = ERR_MAKELDIF_CONFLICTING_TEMPLATE_NAME.get(
               String.valueOf(t.getName()), startLineNumber);
           throw new MakeLDIFException(message);
         }
@@ -882,7 +882,7 @@
       }
       else
       {
-        Message message =
+        LocalizableMessage message =
             ERR_MAKELDIF_UNEXPECTED_TEMPLATE_FILE_LINE.get(line, lineNumber);
         throw new MakeLDIFException(message);
       }
@@ -923,7 +923,7 @@
    */
   private String replaceConstants(String line, int lineNumber,
                                   Map<String,String> constants,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
   {
     int closePos = line.lastIndexOf(']');
     // Loop until we've scanned all closing brackets
@@ -948,7 +948,7 @@
           String constantValue = constants.get(constantName);
           if (constantValue == null)
           {
-            Message message = WARN_MAKELDIF_WARNING_UNDEFINED_CONSTANT.get(
+            LocalizableMessage message = WARN_MAKELDIF_WARNING_UNDEFINED_CONSTANT.get(
                 constantName, lineNumber);
             warnings.add(message);
           }
@@ -992,7 +992,7 @@
   private Branch parseBranchDefinition(String[] branchLines,
                                        int startLineNumber,
                                        Map<String, Tag> tags,
-                                       List<Message> warnings)
+                                       List<LocalizableMessage> warnings)
           throws InitializationException, MakeLDIFException
   {
     // The first line must be "branch: " followed by the branch DN.
@@ -1004,7 +1004,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MAKELDIF_CANNOT_DECODE_BRANCH_DN.get(dnString, startLineNumber);
       throw new MakeLDIFException(message);
     }
@@ -1031,7 +1031,7 @@
         int colonPos = line.indexOf(':', 21);
         if (colonPos <= 21)
         {
-          Message message = ERR_MAKELDIF_BRANCH_SUBORDINATE_TEMPLATE_NO_COLON.
+          LocalizableMessage message = ERR_MAKELDIF_BRANCH_SUBORDINATE_TEMPLATE_NO_COLON.
               get(lineNumber, dnString);
           throw new MakeLDIFException(message);
         }
@@ -1044,14 +1044,14 @@
           numEntries = Integer.parseInt(line.substring(colonPos+1).trim());
           if (numEntries < 0)
           {
-            Message message =
+            LocalizableMessage message =
               ERR_MAKELDIF_BRANCH_SUBORDINATE_INVALID_NUM_ENTRIES.
                   get(lineNumber, dnString, numEntries, templateName);
             throw new MakeLDIFException(message);
           }
           else if (numEntries == 0)
           {
-            Message message = WARN_MAKELDIF_BRANCH_SUBORDINATE_ZERO_ENTRIES.get(
+            LocalizableMessage message = WARN_MAKELDIF_BRANCH_SUBORDINATE_ZERO_ENTRIES.get(
                     lineNumber, dnString,
                                         templateName);
             warnings.add(message);
@@ -1061,7 +1061,7 @@
         }
         catch (NumberFormatException nfe)
         {
-          Message message =
+          LocalizableMessage message =
             ERR_MAKELDIF_BRANCH_SUBORDINATE_CANT_PARSE_NUMENTRIES.
                 get(templateName, lineNumber, dnString);
           throw new MakeLDIFException(message);
@@ -1110,7 +1110,7 @@
                                            Map<String, Tag> tags,
                                            Map<String, Template>
                                                definedTemplates,
-                                           List<Message> warnings)
+                                           List<LocalizableMessage> warnings)
           throws InitializationException, MakeLDIFException
   {
     // The first line must be "template: " followed by the template name.
@@ -1142,7 +1142,7 @@
         parentTemplate = definedTemplates.get(parentTemplateName.toLowerCase());
         if (parentTemplate == null)
         {
-          Message message = ERR_MAKELDIF_TEMPLATE_INVALID_PARENT_TEMPLATE.get(
+          LocalizableMessage message = ERR_MAKELDIF_TEMPLATE_INVALID_PARENT_TEMPLATE.get(
               parentTemplateName, lineNumber, templateName);
           throw new MakeLDIFException(message);
         }
@@ -1170,7 +1170,7 @@
         int colonPos = line.indexOf(':', 21);
         if (colonPos <= 21)
         {
-          Message message = ERR_MAKELDIF_TEMPLATE_SUBORDINATE_TEMPLATE_NO_COLON.
+          LocalizableMessage message = ERR_MAKELDIF_TEMPLATE_SUBORDINATE_TEMPLATE_NO_COLON.
               get(lineNumber, templateName);
           throw new MakeLDIFException(message);
         }
@@ -1183,14 +1183,14 @@
           numEntries = Integer.parseInt(line.substring(colonPos+1).trim());
           if (numEntries < 0)
           {
-            Message message =
+            LocalizableMessage message =
               ERR_MAKELDIF_TEMPLATE_SUBORDINATE_INVALID_NUM_ENTRIES.
                   get(lineNumber, templateName, numEntries, subTemplateName);
             throw new MakeLDIFException(message);
           }
           else if (numEntries == 0)
           {
-            Message message = WARN_MAKELDIF_TEMPLATE_SUBORDINATE_ZERO_ENTRIES
+            LocalizableMessage message = WARN_MAKELDIF_TEMPLATE_SUBORDINATE_ZERO_ENTRIES
                     .get(lineNumber, templateName, subTemplateName);
             warnings.add(message);
           }
@@ -1200,7 +1200,7 @@
         }
         catch (NumberFormatException nfe)
         {
-          Message message =
+          LocalizableMessage message =
             ERR_MAKELDIF_TEMPLATE_SUBORDINATE_CANT_PARSE_NUMENTRIES.
                 get(subTemplateName, lineNumber, templateName);
           throw new MakeLDIFException(message);
@@ -1291,7 +1291,7 @@
                                          int lineNumber, Branch branch,
                                          Template template,
                                          Map<String,Tag> tags,
-                                         List<Message> warnings)
+                                         List<LocalizableMessage> warnings)
           throws InitializationException, MakeLDIFException
   {
     // The first component must be the attribute type, followed by a colon.
@@ -1300,13 +1300,13 @@
     {
       if (branch == null)
       {
-        Message message = ERR_MAKELDIF_NO_COLON_IN_TEMPLATE_LINE.get(
+        LocalizableMessage message = ERR_MAKELDIF_NO_COLON_IN_TEMPLATE_LINE.get(
             lineNumber, template.getName());
         throw new MakeLDIFException(message);
       }
       else
       {
-        Message message = ERR_MAKELDIF_NO_COLON_IN_BRANCH_EXTRA_LINE.get(
+        LocalizableMessage message = ERR_MAKELDIF_NO_COLON_IN_BRANCH_EXTRA_LINE.get(
             lineNumber, String.valueOf(branch.getBranchDN()));
         throw new MakeLDIFException(message);
       }
@@ -1315,13 +1315,13 @@
     {
       if (branch == null)
       {
-        Message message = ERR_MAKELDIF_NO_ATTR_IN_TEMPLATE_LINE.get(
+        LocalizableMessage message = ERR_MAKELDIF_NO_ATTR_IN_TEMPLATE_LINE.get(
             lineNumber, template.getName());
         throw new MakeLDIFException(message);
       }
       else
       {
-        Message message = ERR_MAKELDIF_NO_ATTR_IN_BRANCH_EXTRA_LINE.get(
+        LocalizableMessage message = ERR_MAKELDIF_NO_ATTR_IN_BRANCH_EXTRA_LINE.get(
             lineNumber, String.valueOf(branch.getBranchDN()));
         throw new MakeLDIFException(message);
       }
@@ -1362,13 +1362,13 @@
       // warning.
       if (branch == null)
       {
-        Message message = WARN_MAKELDIF_NO_VALUE_IN_TEMPLATE_LINE.get(
+        LocalizableMessage message = WARN_MAKELDIF_NO_VALUE_IN_TEMPLATE_LINE.get(
                 lineNumber, template.getName());
         warnings.add(message);
       }
       else
       {
-        Message message = WARN_MAKELDIF_NO_VALUE_IN_BRANCH_EXTRA_LINE.get(
+        LocalizableMessage message = WARN_MAKELDIF_NO_VALUE_IN_BRANCH_EXTRA_LINE.get(
                 lineNumber, String.valueOf(branch.getBranchDN()));
         warnings.add(message);
       }
@@ -1491,7 +1491,7 @@
     }
     else
     {
-      Message message = ERR_MAKELDIF_INCOMPLETE_TAG.get(lineNumber);
+      LocalizableMessage message = ERR_MAKELDIF_INCOMPLETE_TAG.get(lineNumber);
       throw new InitializationException(message);
     }
 
@@ -1528,7 +1528,7 @@
   private Tag parseReplacementTag(String tagString, Branch branch,
                                   Template template, int lineNumber,
                                   Map<String,Tag> tags,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
           throws InitializationException, MakeLDIFException
   {
     // The components of the replacement tag will be separated by colons, with
@@ -1543,7 +1543,7 @@
       t = tags.get(lowerTagName);
       if (t == null)
       {
-        Message message = ERR_MAKELDIF_NO_SUCH_TAG.get(tagName, lineNumber);
+        LocalizableMessage message = ERR_MAKELDIF_NO_SUCH_TAG.get(tagName, lineNumber);
         throw new MakeLDIFException(message);
       }
     }
@@ -1565,7 +1565,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_MAKELDIF_CANNOT_INSTANTIATE_NEW_TAG.get(
+      LocalizableMessage message = ERR_MAKELDIF_CANNOT_INSTANTIATE_NEW_TAG.get(
           tagName, lineNumber, String.valueOf(e));
       throw new MakeLDIFException(message, e);
     }
@@ -1583,7 +1583,7 @@
       }
       else
       {
-        Message message = ERR_MAKELDIF_TAG_NOT_ALLOWED_IN_BRANCH.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_NOT_ALLOWED_IN_BRANCH.get(
             newTag.getName(), lineNumber);
         throw new MakeLDIFException(message);
       }
@@ -1615,7 +1615,7 @@
    */
   private Tag parseAttributeTag(String tagString, Branch branch,
                                 Template template, int lineNumber,
-                                List<Message> warnings)
+                                List<LocalizableMessage> warnings)
           throws InitializationException, MakeLDIFException
   {
     // The attribute tag must have at least one argument, which is the name of
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 3ffbb6e..03a2280 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -103,7 +103,7 @@
    */
   public void initializeForBranch(TemplateFile templateFile, Branch branch,
                                   String[] arguments, int lineNumber,
-                                  List<Message> warnings)
+                                  List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -128,7 +128,7 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     initializeInternal(templateFile, arguments, lineNumber);
@@ -163,14 +163,14 @@
       }
       catch (NumberFormatException nfe)
       {
-        Message message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
+        LocalizableMessage message = ERR_MAKELDIF_TAG_CANNOT_PARSE_AS_INTEGER.get(
             arguments[0], getName(), lineNumber);
         throw new InitializationException(message);
       }
     }
     else
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_RANGE_COUNT.get(
           getName(), lineNumber, 0, 1, arguments.length);
       throw new InitializationException(message);
     }
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 6c1a8a8..0fe6ffa 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
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.makeldif;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -98,12 +98,12 @@
    */
   public void initializeForTemplate(TemplateFile templateFile,
                                     Template template, String[] arguments,
-                                    int lineNumber, List<Message> warnings)
+                                    int lineNumber, List<LocalizableMessage> warnings)
          throws InitializationException
   {
     if (arguments.length != 0)
     {
-      Message message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
+      LocalizableMessage message = ERR_MAKELDIF_TAG_INVALID_ARGUMENT_COUNT.get(
           getName(), lineNumber, 0, arguments.length);
       throw new InitializationException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/status/StatusCli.java b/opendj3-server-dev/src/server/org/opends/server/tools/status/StatusCli.java
index 5e1c74f..4d2e2d4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/status/StatusCli.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/status/StatusCli.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.tools.status;
@@ -59,8 +59,8 @@
 import org.opends.guitools.controlpanel.datamodel.ServerDescriptor;
 import org.opends.guitools.controlpanel.util.ControlPanelLog;
 import org.opends.guitools.controlpanel.util.Utilities;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.AdministrationConnector;
 import org.opends.server.admin.client.ManagementContext;
 import org.opends.server.admin.client.cli.DsFrameworkCliReturnCode;
@@ -260,7 +260,7 @@
     try {
       argParser.initializeGlobalArguments(getOutputStream());
     } catch (ArgumentException ae) {
-      Message message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(ae.getMessage());
       println(message);
       return ErrorReturnCode.ERROR_UNEXPECTED.getReturnCode();
     }
@@ -278,10 +278,10 @@
     try {
       argParser.parseArguments(args);
     } catch (ArgumentException ae) {
-      Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       println(message);
       println();
-      println(Message.raw(argParser.getUsage()));
+      println(LocalizableMessage.raw(argParser.getUsage()));
 
       return ErrorReturnCode.ERROR_PARSING_ARGS.getReturnCode();
     }
@@ -305,7 +305,7 @@
     int v = argParser.validateGlobalOptions(getErrorStream());
 
     if (v != DsFrameworkCliReturnCode.SUCCESSFUL_NOP.getReturnCode()) {
-      println(Message.raw(argParser.getUsage()));
+      println(LocalizableMessage.raw(argParser.getUsage()));
       return v;
     } else {
       ControlPanelInfo controlInfo = ControlPanelInfo.getInstance();
@@ -480,7 +480,7 @@
 
   private void writeStatus(ServerDescriptor desc)
   {
-    Message[] labels =
+    LocalizableMessage[] labels =
       {
         INFO_SERVER_STATUS_LABEL.get(),
         INFO_CONNECTIONS_LABEL.get(),
@@ -492,10 +492,10 @@
         INFO_CTRL_PANEL_ADMIN_CONNECTOR_LABEL.get()
       };
     int labelWidth = 0;
-    Message title = INFO_SERVER_STATUS_TITLE.get();
+    LocalizableMessage title = INFO_SERVER_STATUS_TITLE.get();
     if (!isScriptFriendly())
     {
-      for (Message label : labels)
+      for (LocalizableMessage label : labels)
       {
         labelWidth = Math.max(labelWidth, label.length());
       }
@@ -567,7 +567,7 @@
   private void writeStatusContents(ServerDescriptor desc,
       int maxLabelWidth)
   {
-    Message status;
+    LocalizableMessage status;
     switch (desc.getStatus())
     {
     case STARTED:
@@ -609,13 +609,13 @@
   private void writeCurrentConnectionContents(ServerDescriptor desc,
       int maxLabelWidth)
   {
-    Message text;
+    LocalizableMessage text;
     if (desc.getStatus() == ServerDescriptor.ServerStatus.STARTED)
     {
       int nConn = desc.getOpenConnections();
       if (nConn >= 0)
       {
-        text = Message.raw(String.valueOf(nConn));
+        text = LocalizableMessage.raw(String.valueOf(nConn));
       }
       else
       {
@@ -646,7 +646,7 @@
       int maxLabelWidth)
   {
     writeLabelValue(INFO_HOSTNAME_LABEL.get(),
-        Message.raw(desc.getHostname()),
+        LocalizableMessage.raw(desc.getHostname()),
         maxLabelWidth);
   }
   /**
@@ -659,7 +659,7 @@
       int maxLabelWidth)
   {
     Set<DN> administrators = desc.getAdministrativeUsers();
-    Message text;
+    LocalizableMessage text;
     if (administrators.size() > 0)
     {
       TreeSet<DN> ordered = new TreeSet<DN>();
@@ -668,7 +668,7 @@
       DN first = ordered.iterator().next();
       writeLabelValue(
               INFO_ADMINISTRATIVE_USERS_LABEL.get(),
-              Message.raw(first.toString()),
+              LocalizableMessage.raw(first.toString()),
               maxLabelWidth);
 
       Iterator<DN> it = ordered.iterator();
@@ -678,7 +678,7 @@
       {
         writeLabelValue(
                 INFO_ADMINISTRATIVE_USERS_LABEL.get(),
-                Message.raw(it.next().toString()),
+                LocalizableMessage.raw(it.next().toString()),
                 maxLabelWidth);
       }
     }
@@ -714,7 +714,7 @@
       int maxLabelWidth)
   {
     writeLabelValue(INFO_INSTALLATION_PATH_LABEL.get(),
-            Message.raw(desc.getInstallPath()),
+            LocalizableMessage.raw(desc.getInstallPath()),
             maxLabelWidth);
   }
 
@@ -728,7 +728,7 @@
       int maxLabelWidth)
   {
     writeLabelValue(INFO_CTRL_PANEL_INSTANCE_PATH_LABEL.get(),
-            Message.raw(desc.getInstancePath()),
+            LocalizableMessage.raw(desc.getInstancePath()),
             maxLabelWidth);
   }
 
@@ -743,7 +743,7 @@
   {
     String openDSVersion = desc.getOpenDSVersion();
     writeLabelValue(INFO_OPENDS_VERSION_LABEL.get(),
-            Message.raw(openDSVersion),
+            LocalizableMessage.raw(openDSVersion),
             maxLabelWidth);
   }
 
@@ -757,10 +757,10 @@
   private void writeJavaVersionContents(ServerDescriptor desc,
       int maxLabelWidth)
   {
-    Message text;
+    LocalizableMessage text;
     if (desc.getStatus() == ServerDescriptor.ServerStatus.STARTED)
     {
-      text = Message.raw(desc.getJavaVersion());
+      text = LocalizableMessage.raw(desc.getJavaVersion());
       if (text == null)
       {
         if (!desc.isAuthenticated() || !desc.getExceptions().isEmpty())
@@ -793,7 +793,7 @@
     ConnectionHandlerDescriptor adminConnector = desc.getAdminConnector();
     if (adminConnector != null)
     {
-      Message text = INFO_CTRL_PANEL_ADMIN_CONNECTOR_DESCRIPTION.get(
+      LocalizableMessage text = INFO_CTRL_PANEL_ADMIN_CONNECTOR_DESCRIPTION.get(
           adminConnector.getPort());
       writeLabelValue(INFO_CTRL_PANEL_ADMIN_CONNECTOR_LABEL.get(), text,
           maxLabelWidth);
@@ -815,7 +815,7 @@
   {
     if (!isScriptFriendly())
     {
-      Message title = INFO_LISTENERS_TITLE.get();
+      LocalizableMessage title = INFO_LISTENERS_TITLE.get();
       getOutputStream().println(centerTitle(title));
     }
 
@@ -856,7 +856,7 @@
    */
   private void writeBaseDNContents(ServerDescriptor desc)
   {
-    Message title = INFO_DATABASES_TITLE.get();
+    LocalizableMessage title = INFO_DATABASES_TITLE.get();
     if (!isScriptFriendly())
     {
       getOutputStream().println(centerTitle(title));
@@ -910,7 +910,7 @@
   {
     for (OpenDsException ex : desc.getExceptions())
     {
-      Message errorMsg = ex.getMessageObject();
+      LocalizableMessage errorMsg = ex.getMessageObject();
       if (errorMsg != null)
       {
         getOutputStream().println();
@@ -924,7 +924,7 @@
    * because the server is down.
    * @return the text.
    */
-  private Message getNotAvailableBecauseServerIsDownText()
+  private LocalizableMessage getNotAvailableBecauseServerIsDownText()
   {
     displayMustStartLegend = true;
     return INFO_NOT_AVAILABLE_SERVER_DOWN_CLI_LABEL.get();
@@ -935,7 +935,7 @@
    * because authentication is required.
    * @return the text.
    */
-  private Message getNotAvailableBecauseAuthenticationIsRequiredText()
+  private LocalizableMessage getNotAvailableBecauseAuthenticationIsRequiredText()
   {
     displayMustAuthenticateLegend = true;
     return INFO_NOT_AVAILABLE_AUTHENTICATION_REQUIRED_CLI_LABEL.get();
@@ -945,7 +945,7 @@
    * Returns the not available text explaining that the data is not available.
    * @return the text.
    */
-  private Message getNotAvailableText()
+  private LocalizableMessage getNotAvailableText()
   {
     return INFO_NOT_AVAILABLE_LABEL.get();
   }
@@ -971,7 +971,7 @@
           getOutputStream().println("-");
           for (int j=0; j<tableModel.getColumnCount(); j++)
           {
-            MessageBuilder line = new MessageBuilder();
+            LocalizableMessageBuilder line = new LocalizableMessageBuilder();
             line.append(tableModel.getColumnName(j)+": ");
             if (j == 0)
             {
@@ -992,7 +992,7 @@
       TableBuilder table = new TableBuilder();
       for (int i=0; i< tableModel.getColumnCount(); i++)
       {
-        table.appendHeading(Message.raw(tableModel.getColumnName(i)));
+        table.appendHeading(LocalizableMessage.raw(tableModel.getColumnName(i)));
       }
       for (int i=0; i<tableModel.getRowCount(); i++)
       {
@@ -1033,21 +1033,21 @@
    return v.split("<br>");
   }
 
-  private Message getCellValue(Object v, ServerDescriptor desc)
+  private LocalizableMessage getCellValue(Object v, ServerDescriptor desc)
   {
-    Message s = null;
+    LocalizableMessage s = null;
     if (v != null)
     {
       if (v instanceof String)
       {
-        s = Message.raw((String)v);
+        s = LocalizableMessage.raw((String)v);
       }
       else if (v instanceof Integer)
       {
         int nEntries = ((Integer)v).intValue();
         if (nEntries >= 0)
         {
-          s = Message.raw(String.valueOf(nEntries));
+          s = LocalizableMessage.raw(String.valueOf(nEntries));
         }
         else
         {
@@ -1087,11 +1087,11 @@
 
     int labelWidth = 0;
     int labelWidthWithoutReplicated = 0;
-    Message[] labels = new Message[tableModel.getColumnCount()];
+    LocalizableMessage[] labels = new LocalizableMessage[tableModel.getColumnCount()];
     for (int i=0; i<tableModel.getColumnCount(); i++)
     {
-      Message header = Message.raw(tableModel.getColumnName(i));
-      labels[i] = new MessageBuilder(header).append(":").toMessage();
+      LocalizableMessage header = LocalizableMessage.raw(tableModel.getColumnName(i));
+      labels[i] = new LocalizableMessageBuilder(header).append(":").toMessage();
       labelWidth = Math.max(labelWidth, labels[i].length());
       if ((i != 4) && (i != 5))
       {
@@ -1100,7 +1100,7 @@
       }
     }
 
-    Message replicatedLabel = INFO_BASEDN_REPLICATED_LABEL.get();
+    LocalizableMessage replicatedLabel = INFO_BASEDN_REPLICATED_LABEL.get();
     for (int i=0; i<tableModel.getRowCount(); i++)
     {
       if (isScriptFriendly())
@@ -1113,7 +1113,7 @@
       }
       for (int j=0; j<tableModel.getColumnCount(); j++)
       {
-        Message value;
+        LocalizableMessage value;
         Object v = tableModel.getValueAt(i, j);
         if (v != null)
         {
@@ -1131,18 +1131,18 @@
           }
           else if (v instanceof String)
           {
-            value = Message.raw((String)v);
+            value = LocalizableMessage.raw((String)v);
           }
-          else if (v instanceof Message)
+          else if (v instanceof LocalizableMessage)
           {
-            value = (Message)v;
+            value = (LocalizableMessage)v;
           }
           else if (v instanceof Integer)
           {
             int nEntries = ((Integer)v).intValue();
             if (nEntries >= 0)
             {
-              value = Message.raw(String.valueOf(nEntries));
+              value = LocalizableMessage.raw(String.valueOf(nEntries));
             }
             else
             {
@@ -1167,7 +1167,7 @@
         }
         else
         {
-          value = Message.EMPTY;
+          value = LocalizableMessage.EMPTY;
         }
 
         if (value.equals(getNotAvailableText()))
@@ -1201,9 +1201,9 @@
     }
   }
 
-  private void writeLabelValue(Message label, Message value, int maxLabelWidth)
+  private void writeLabelValue(LocalizableMessage label, LocalizableMessage value, int maxLabelWidth)
   {
-    MessageBuilder buf = new MessageBuilder();
+    LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
     buf.append(label);
 
     int extra = maxLabelWidth - label.length();
@@ -1215,12 +1215,12 @@
     getOutputStream().println(wrapText(buf.toMessage()));
   }
 
-  private Message centerTitle(Message text)
+  private LocalizableMessage centerTitle(LocalizableMessage text)
   {
-    Message centered;
+    LocalizableMessage centered;
     if (text.length() <= getCommandLineMaxLineWidth() - 8)
     {
-      MessageBuilder buf = new MessageBuilder();
+      LocalizableMessageBuilder buf = new LocalizableMessageBuilder();
       int extra = Math.min(10,
           (getCommandLineMaxLineWidth() - 8 - text.length()) / 2);
       for (int i=0; i<extra; i++)
@@ -1318,9 +1318,9 @@
    * @param text to wrap
    * @return raw message representing wrapped string
    */
-  private Message wrapText(Message text)
+  private LocalizableMessage wrapText(LocalizableMessage text)
   {
-    return Message.raw(
+    return LocalizableMessage.raw(
         StaticUtils.wrapText(text, getCommandLineMaxLineWidth()));
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskClient.java b/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskClient.java
index 5b947ec..7299cda 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskClient.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskClient.java
@@ -41,7 +41,7 @@
 import java.util.UUID;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.backends.task.FailedDependencyAction;
 import org.opends.server.backends.task.TaskState;
 import org.opends.server.config.ConfigConstants;
@@ -429,7 +429,7 @@
     do {
       LDAPMessage responseMessage = reader.readMessage();
       if (responseMessage == null) {
-        Message message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
+        LocalizableMessage message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
         throw new LDAPException(UNAVAILABLE.getIntValue(), message);
       } else {
         opType = responseMessage.getProtocolOpType();
@@ -494,7 +494,7 @@
         LDAPMessage responseMessage = reader.readMessage();
 
         if (responseMessage == null) {
-          Message message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
+          LocalizableMessage message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
           throw new LDAPException(UNAVAILABLE.getIntValue(), message);
         }
 
@@ -509,7 +509,7 @@
 
         ModifyResponseProtocolOp modResponse =
                 responseMessage.getModifyResponseProtocolOp();
-        Message errorMessage = modResponse.getErrorMessage();
+        LocalizableMessage errorMessage = modResponse.getErrorMessage();
         if (errorMessage != null) {
           throw new LDAPException(
                   LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
@@ -529,7 +529,7 @@
         LDAPMessage responseMessage = reader.readMessage();
 
         if (responseMessage == null) {
-          Message message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
+          LocalizableMessage message = ERR_TASK_CLIENT_UNEXPECTED_CONNECTION_CLOSURE.get();
           throw new LDAPException(UNAVAILABLE.getIntValue(), message);
         }
 
@@ -544,7 +544,7 @@
 
         DeleteResponseProtocolOp deleteResponse =
                 responseMessage.getDeleteResponseProtocolOp();
-        Message errorMessage = deleteResponse.getErrorMessage();
+        LocalizableMessage errorMessage = deleteResponse.getErrorMessage();
         if (errorMessage != null) {
           throw new LDAPException(
                   LDAPResultCode.CLIENT_SIDE_LOCAL_ERROR,
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskClientException.java b/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskClientException.java
index 21c4598..8d68062 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskClientException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskClientException.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.tools.tasks;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.types.OpenDsException;
 
@@ -57,7 +58,7 @@
    *
    * @param message for this exception
    */
-  public TaskClientException(Message message) {
+  public TaskClientException(LocalizableMessage message) {
     super(message);
   }
 
@@ -76,7 +77,7 @@
    * @param message for this exception
    * @param cause of this exception
    */
-  public TaskClientException(Message message, Throwable cause) {
+  public TaskClientException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskEntry.java b/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskEntry.java
index 1a42233..8e91897 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskEntry.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskEntry.java
@@ -27,7 +27,7 @@
 
 package org.opends.server.tools.tasks;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
@@ -60,11 +60,11 @@
  */
 public class TaskEntry {
 
-  private static Map<String, Message> mapClassToTypeName =
-          new HashMap<String, Message>();
+  private static Map<String, LocalizableMessage> mapClassToTypeName =
+          new HashMap<String, LocalizableMessage>();
 
-  private static Map<String, Message> mapAttrToDisplayName =
-          new HashMap<String, Message>();
+  private static Map<String, LocalizableMessage> mapAttrToDisplayName =
+          new HashMap<String, LocalizableMessage>();
 
   private int hashCode;
 
@@ -107,8 +107,8 @@
    */
   private Task task;
 
-  private Map<Message, List<String>> taskSpecificAttrValues =
-          new HashMap<Message, List<String>>();
+  private Map<LocalizableMessage, List<String>> taskSpecificAttrValues =
+          new HashMap<LocalizableMessage, List<String>>();
 
   /**
    * Creates a parameterized instance.
@@ -140,7 +140,7 @@
 
       // See if we've handled it already above
       if (!supAttrNames.contains(typeName)) {
-        Message attrTypeName = getAttributeDisplayName(
+        LocalizableMessage attrTypeName = getAttributeDisplayName(
                 type.getNormalizedPrimaryName());
         List<Attribute> attrList = entry.getUserAttribute(type);
         for (Attribute attr : attrList) {
@@ -249,10 +249,10 @@
   /**
    * Gets the state of the task.
    *
-   * @return Message representing state
+   * @return LocalizableMessage representing state
    */
-  public Message getState() {
-    Message m = Message.EMPTY;
+  public LocalizableMessage getState() {
+    LocalizableMessage m = LocalizableMessage.EMPTY;
     if (state != null) {
       TaskState ts = TaskState.fromString(state);
       if (ts != null) {
@@ -267,7 +267,7 @@
    *
    * @return String time
    */
-  public Message getScheduledStartTime() {
+  public LocalizableMessage getScheduledStartTime() {
     return formatTimeString(schedStart);
   }
 
@@ -276,7 +276,7 @@
    *
    * @return String time
    */
-  public Message getActualStartTime() {
+  public LocalizableMessage getActualStartTime() {
     return formatTimeString(actStart);
   }
 
@@ -285,17 +285,17 @@
    *
    * @return String time
    */
-  public Message getCompletionTime() {
+  public LocalizableMessage getCompletionTime() {
     return formatTimeString(compTime);
   }
 
   /**
    * Gets recurring schedule tab.
    *
-   * @return Message tab string
+   * @return LocalizableMessage tab string
    */
-  public Message getScheduleTab() {
-    return Message.raw(schedTab);
+  public LocalizableMessage getScheduleTab() {
+    return LocalizableMessage.raw(schedTab);
   }
 
   /**
@@ -312,8 +312,8 @@
    *
    * @return String action
    */
-  public Message getFailedDependencyAction() {
-    Message m = null;
+  public LocalizableMessage getFailedDependencyAction() {
+    LocalizableMessage m = null;
     if (depFailAct != null) {
       FailedDependencyAction fda =
               FailedDependencyAction.fromString(depFailAct);
@@ -329,10 +329,10 @@
    *
    * @return array of log messages
    */
-  public List<Message> getLogMessages() {
-    List<Message> formattedLogs = new ArrayList<Message>();
+  public List<LocalizableMessage> getLogMessages() {
+    List<LocalizableMessage> formattedLogs = new ArrayList<LocalizableMessage>();
     for (String aLog : logs) {
-      formattedLogs.add(Message.raw(aLog));
+      formattedLogs.add(LocalizableMessage.raw(aLog));
     }
     return Collections.unmodifiableList(formattedLogs);
   }
@@ -360,10 +360,10 @@
   /**
    * Gets a user presentable string indicating the type of this task.
    *
-   * @return Message type
+   * @return LocalizableMessage type
    */
-  public Message getType() {
-    Message type = Message.EMPTY;
+  public LocalizableMessage getType() {
+    LocalizableMessage type = LocalizableMessage.EMPTY;
     if (className != null) {
       type = mapClassToTypeName.get(className);
       if (type == null) {
@@ -372,9 +372,9 @@
           try {
             Method m = Task.class.getMethod("getDisplayName");
             Object oName = m.invoke(task);
-            if (oName instanceof Message) {
-              mapClassToTypeName.put(className, (Message) oName);
-              type = (Message) oName;
+            if (oName instanceof LocalizableMessage) {
+              mapClassToTypeName.put(className, (LocalizableMessage) oName);
+              type = (LocalizableMessage) oName;
             }
           } catch (Exception e) {
             // ignore; this is best effort
@@ -385,7 +385,7 @@
       // If we still can't get the type just resort
       // to the class displayName
       if (type == null) {
-        type = Message.raw(className);
+        type = LocalizableMessage.raw(className);
       }
     }
     return type;
@@ -417,7 +417,7 @@
    * @return mapping of atribute field labels to lists of string values for
    *         each field.
    */
-  public Map<Message, List<String>> getTaskSpecificAttributeValuePairs() {
+  public Map<LocalizableMessage, List<String>> getTaskSpecificAttributeValuePairs() {
     return taskSpecificAttrValues;
   }
 
@@ -468,8 +468,8 @@
     return valuesList;
   }
 
-  private Message getAttributeDisplayName(String attrName) {
-    Message name = mapAttrToDisplayName.get(attrName);
+  private LocalizableMessage getAttributeDisplayName(String attrName) {
+    LocalizableMessage name = mapAttrToDisplayName.get(attrName);
     if (name == null) {
       Task task = getTask();
       if (task != null) {
@@ -477,8 +477,8 @@
           Method m = Task.class.getMethod(
                   "getAttributeDisplayName", String.class);
           Object o = m.invoke(task, attrName);
-          if (o != null && Message.class.isAssignableFrom(o.getClass())) {
-            name= (Message)o;
+          if (o != null && LocalizableMessage.class.isAssignableFrom(o.getClass())) {
+            name= (LocalizableMessage)o;
             mapAttrToDisplayName.put(attrName, name);
           }
         } catch (Exception e) {
@@ -487,7 +487,7 @@
       }
     }
     if (name == null) {
-      name = Message.raw(attrName);
+      name = LocalizableMessage.raw(attrName);
     }
     return name;
   }
@@ -497,8 +497,8 @@
    * @param timeString the is human hostile
    * @return string of time that is human friendly
    */
-  private Message formatTimeString(String timeString) {
-    Message ret = Message.EMPTY;
+  private LocalizableMessage formatTimeString(String timeString) {
+    LocalizableMessage ret = LocalizableMessage.EMPTY;
     if (timeString != null && timeString.length() > 0) {
       try {
         SimpleDateFormat dateFormat;
@@ -513,9 +513,9 @@
                 DateFormat.MEDIUM,
                 DateFormat.LONG);
         String dateString = df.format(date);
-        ret = Message.raw(dateString);
+        ret = LocalizableMessage.raw(dateString);
       } catch (ParseException pe){
-        ret = Message.raw(timeString);
+        ret = LocalizableMessage.raw(timeString);
       }
     }
     return ret;
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskScheduleInteraction.java b/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskScheduleInteraction.java
index 624e7b9..8b7e2ae 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskScheduleInteraction.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskScheduleInteraction.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tools.tasks;
 
@@ -35,7 +36,7 @@
 import java.util.HashSet;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.PlainTextProgressMessageFormatter;
 import org.opends.quicksetup.util.ProgressMessageFormatter;
 import org.opends.server.admin.client.cli.TaskScheduleArgs;
@@ -63,7 +64,7 @@
   private final TaskScheduleUserData uData;
   private final TaskScheduleArgs args;
   private final ConsoleApplication app;
-  private final Message taskName;
+  private final LocalizableMessage taskName;
   private List<? extends TaskEntry> taskEntries =
     Collections.emptyList();
   private ProgressMessageFormatter formatter =
@@ -79,12 +80,12 @@
     RUN_LATER(INFO_RUN_TASK_LATER.get()),
     SCHEDULE_TASK(INFO_SCHEDULE_TASK.get());
 
-    private Message prompt;
-    private ScheduleOption(Message prompt)
+    private LocalizableMessage prompt;
+    private ScheduleOption(LocalizableMessage prompt)
     {
       this.prompt = prompt;
     }
-    Message getPrompt()
+    LocalizableMessage getPrompt()
     {
       return prompt;
     }
@@ -109,7 +110,7 @@
    */
   public TaskScheduleInteraction(TaskScheduleUserData uData,
       TaskScheduleArgs args, ConsoleApplication app,
-      Message taskName)
+      LocalizableMessage taskName)
   {
     this.uData = uData;
     this.args = args;
@@ -216,7 +217,7 @@
     }
     else
     {
-      throw new CLIException(Message.EMPTY);
+      throw new CLIException(LocalizableMessage.EMPTY);
     }
 
   }
@@ -330,8 +331,8 @@
     uData.setNotifyUponErrorEmailAddresses(addresses);
   }
 
-  private List<String> askForEmailNotification(Message hasNotificationPrompt,
-      Message emailAddressPrompt) throws CLIException
+  private List<String> askForEmailNotification(LocalizableMessage hasNotificationPrompt,
+      LocalizableMessage emailAddressPrompt) throws CLIException
   {
     checkHeaderDisplay();
 
@@ -441,7 +442,7 @@
     }
     else
     {
-      throw new CLIException(Message.EMPTY);
+      throw new CLIException(LocalizableMessage.EMPTY);
     }
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskTool.java b/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskTool.java
index fcf26c1..bceda0cb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskTool.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/tasks/TaskTool.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2012-2013 ForgeRock AS
+ *      Portions Copyright 2012-2014 ForgeRock AS
  */
 
 package org.opends.server.tools.tasks;
@@ -49,7 +49,7 @@
 import org.opends.server.admin.client.cli.TaskScheduleArgs;
 import org.opends.server.backends.task.TaskState;
 import org.opends.server.backends.task.FailedDependencyAction;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.ToolMessages.*;
 import static org.opends.messages.TaskMessages.*;
 
@@ -123,7 +123,7 @@
    * @return LDAPConnectionArgumentParser for processing CLI input
    */
   protected LDAPConnectionArgumentParser createArgParser(String className,
-    Message toolDescription)
+    LocalizableMessage toolDescription)
   {
     ArgumentGroup ldapGroup = new ArgumentGroup(
       INFO_DESCRIPTION_TASK_LDAP_ARGS.get(), 1001);
@@ -275,7 +275,7 @@
         }
         catch (Exception e)
         {
-          Message message = ERR_SERVER_BOOTSTRAP_ERROR.get(
+          LocalizableMessage message = ERR_SERVER_BOOTSTRAP_ERROR.get(
                   getExceptionMessage(e));
           err.println(wrapText(message, MAX_LINE_WIDTH));
           return 1;
@@ -287,7 +287,7 @@
         conn = argParser.connect(out, err);
         TaskClient tc = new TaskClient(conn);
         TaskEntry taskEntry = tc.schedule(this);
-        Message startTime = taskEntry.getScheduledStartTime();
+        LocalizableMessage startTime = taskEntry.getScheduledStartTime();
         if (taskEntry.getTaskState() == TaskState.RECURRING) {
           out.println(
                   wrapText(INFO_TASK_TOOL_RECURRING_TASK_SCHEDULED.get(
@@ -312,11 +312,11 @@
 
           // Poll the task printing log messages until finished
           String taskId = taskEntry.getId();
-          Set<Message> printedLogMessages = new HashSet<Message>();
+          Set<LocalizableMessage> printedLogMessages = new HashSet<LocalizableMessage>();
           do {
             taskEntry = tc.getTaskEntry(taskId);
-            List<Message> logs = taskEntry.getLogMessages();
-            for (Message log : logs) {
+            List<LocalizableMessage> logs = taskEntry.getLogMessages();
+            for (LocalizableMessage log : logs) {
               if (!printedLogMessages.contains(log)) {
                 printedLogMessages.add(log);
                 out.println(log);
@@ -350,7 +350,7 @@
         }
         ret = 0;
       } catch (LDAPConnectionException e) {
-        Message message;
+        LocalizableMessage message;
         if (isWrongPortException(e,
             new Integer(argParser.getArguments().getPort())))
         {
@@ -363,19 +363,19 @@
         if (err != null) err.println(wrapText(message, MAX_LINE_WIDTH));
         ret = 1;
       } catch (IOException ioe) {
-        Message message = ERR_TASK_TOOL_IO_ERROR.get(String.valueOf(ioe));
+        LocalizableMessage message = ERR_TASK_TOOL_IO_ERROR.get(String.valueOf(ioe));
         if (err != null) err.println(wrapText(message, MAX_LINE_WIDTH));
         ret = 1;
       } catch (ASN1Exception ae) {
-        Message message = ERR_TASK_TOOL_DECODE_ERROR.get(ae.getMessage());
+        LocalizableMessage message = ERR_TASK_TOOL_DECODE_ERROR.get(ae.getMessage());
         if (err != null) err.println(wrapText(message, MAX_LINE_WIDTH));
         ret = 1;
       } catch (LDAPException le) {
-        Message message = ERR_TASK_TOOL_LDAP_ERROR.get(le.getMessage());
+        LocalizableMessage message = ERR_TASK_TOOL_LDAP_ERROR.get(le.getMessage());
         if (err != null) err.println(wrapText(message, MAX_LINE_WIDTH));
         ret = 1;
       } catch (OpenDsException e) {
-        Message message = e.getMessageObject();
+        LocalizableMessage message = e.getMessageObject();
         if (err != null) err.println(wrapText(message, MAX_LINE_WIDTH));
         ret = 1;
       } finally
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/FileManager.java b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/FileManager.java
index f6ad36b..60e7c62 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/FileManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/FileManager.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.upgrade;
@@ -31,7 +31,7 @@
 
 import static org.opends.messages.ToolMessages.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.FilePermission;
 import org.opends.server.util.StaticUtils;
@@ -371,7 +371,7 @@
         {
           if (insureParentsExist(destination))
           {
-            final Message message = Message.raw("Copying file '%s' to '%s'",
+            final LocalizableMessage message = LocalizableMessage.raw("Copying file '%s' to '%s'",
                 objectFile.getAbsolutePath(), destination.getAbsolutePath());
             LOG.log(Level.INFO, message.toString());
             FileInputStream fis = null;
@@ -404,7 +404,7 @@
             }
             catch (Exception e)
             {
-              final Message errMsg = INFO_ERROR_COPYING_FILE.get(
+              final LocalizableMessage errMsg = INFO_ERROR_COPYING_FILE.get(
                   objectFile.getAbsolutePath(), destination.getAbsolutePath());
               throw new IOException(errMsg.toString(), e);
             }
@@ -415,7 +415,7 @@
           }
           else
           {
-            final Message errMsg = INFO_ERROR_COPYING_FILE.get(
+            final LocalizableMessage errMsg = INFO_ERROR_COPYING_FILE.get(
                 objectFile.getAbsolutePath(), destination.getAbsolutePath());
             LOG.log(Level.SEVERE, errMsg.toString());
             throw new IOException(errMsg.toString());
@@ -423,7 +423,7 @@
         }
         else
         {
-          final Message message = Message.raw(
+          final LocalizableMessage message = LocalizableMessage.raw(
               "Ignoring file '%s' since '%s' already exists",
               objectFile.getAbsolutePath(), destination.getAbsolutePath());
 
@@ -589,7 +589,7 @@
 
       if (!delete)
       {
-        Message errMsg;
+        LocalizableMessage errMsg;
         if (isFile)
         {
           errMsg = INFO_ERROR_DELETING_FILE.get(file.getAbsolutePath());
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/FormattedNotificationCallback.java b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/FormattedNotificationCallback.java
index 27f9d5b..891ea9a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/FormattedNotificationCallback.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/FormattedNotificationCallback.java
@@ -21,13 +21,13 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tools.upgrade;
 
 import javax.security.auth.callback.TextOutputCallback;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A formatted notification callback for display title and more...
@@ -64,7 +64,7 @@
    * @param messageSubType
    *          An integer representing the sub-type of this message.
    */
-  FormattedNotificationCallback(final Message message,
+  FormattedNotificationCallback(final LocalizableMessage message,
       final int messageSubType)
   {
     super(TextOutputCallback.INFORMATION, message.toString());
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/ProgressNotificationCallback.java b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/ProgressNotificationCallback.java
index 9df17c8..90ae13a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/ProgressNotificationCallback.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/ProgressNotificationCallback.java
@@ -21,13 +21,13 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tools.upgrade;
 
 import javax.security.auth.callback.TextOutputCallback;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * A progress notification callback.
@@ -55,7 +55,7 @@
    *          An integer representing the percentage of the task's progress.
    */
   ProgressNotificationCallback(final int messageType,
-      final Message message, final int progress)
+      final LocalizableMessage message, final int progress)
   {
     super(messageType, message.toString());
     this.progress = progress;
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/Upgrade.java b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/Upgrade.java
index 2222b47..c196a74 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/Upgrade.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/Upgrade.java
@@ -44,7 +44,7 @@
 
 import javax.security.auth.callback.ConfirmationCallback;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.LockFileManager;
 import org.opends.server.tools.ClientException;
 import org.opends.server.util.BuildVersion;
@@ -413,7 +413,7 @@
             ConfirmationCallback.YES);
     if (userResponse == ConfirmationCallback.NO)
     {
-      final Message message = INFO_UPGRADE_ABORTED_BY_USER.get();
+      final LocalizableMessage message = INFO_UPGRADE_ABORTED_BY_USER.get();
       context.notify(message, WARNING);
       throw new ClientException(EXIT_CODE_ERROR, message);
     }
@@ -464,7 +464,7 @@
     }
     catch (final Exception e)
     {
-      final Message message = ERR_UPGRADE_TASKS_FAIL.get(e.getMessage());
+      final LocalizableMessage message = ERR_UPGRADE_TASKS_FAIL.get(e.getMessage());
       context.notify(message, ERROR_CALLBACK);
       throw new ClientException(EXIT_CODE_ERROR, message);
     }
@@ -537,7 +537,7 @@
       // running.
       if (!LockFileManager.acquireExclusiveLock(lockFile, failureReason))
       {
-        final Message message = ERR_UPGRADE_REQUIRES_SERVER_OFFLINE.get();
+        final LocalizableMessage message = ERR_UPGRADE_REQUIRES_SERVER_OFFLINE.get();
         context.notify(message, NOTICE_CALLBACK);
         throw new ClientException(EXIT_CODE_ERROR, message);
       }
@@ -565,7 +565,7 @@
        * If the server is already up to date then treat it as a successful
        * upgrade so that upgrade is idempotent.
        */
-      final Message message =
+      final LocalizableMessage message =
           ERR_UPGRADE_VERSION_UP_TO_DATE.get(context.getToVersion().toString());
       context.notify(message, NOTICE_CALLBACK);
       throw new ClientException(EXIT_CODE_SUCCESS, message);
@@ -574,7 +574,7 @@
     // The upgrade only supports version >= 2.4.5.
     if (context.getFromVersion().compareTo(UPGRADESUPPORTSVERSIONFROM) < 0)
     {
-      final Message message =
+      final LocalizableMessage message =
           INFO_UPGRADE_VERSION_IS_NOT_SUPPORTED.get(UPGRADESUPPORTSVERSIONFROM
               .toString(), UPGRADESUPPORTSVERSIONFROM.toString());
       context.notify(message, NOTICE_CALLBACK);
@@ -611,7 +611,7 @@
     }
     catch (IOException e)
     {
-      final Message message = Message.raw(e.getMessage());
+      final LocalizableMessage message = LocalizableMessage.raw(e.getMessage());
       context.notify(message, ERROR_CALLBACK);
       throw new ClientException(EXIT_CODE_ERROR, message);
     }
@@ -629,7 +629,7 @@
     {
       if (LicenseFile.exists())
       {
-        context.notify(Message.raw("\n" + LicenseFile.getText()));
+        context.notify(LocalizableMessage.raw("\n" + LicenseFile.getText()));
         context.notify(INFO_LICENSE_DETAILS_CLI_LABEL.get());
         if (!context.isAcceptLicenseMode())
         {
@@ -641,7 +641,7 @@
           if (context.isForceUpgradeMode())
           {
             answer = ConfirmationCallback.NO;
-            context.notify(Message.raw(INFO_LICENSE_ACCEPT.get() + " "
+            context.notify(LocalizableMessage.raw(INFO_LICENSE_ACCEPT.get() + " "
                 + INFO_PROMPT_NO_COMPLETE_ANSWER.get()));
           }
           else
@@ -663,7 +663,7 @@
         else
         {
           // We automatically accept the license with this option.
-          context.notify(Message.raw(INFO_LICENSE_ACCEPT.get() + " "
+          context.notify(LocalizableMessage.raw(INFO_LICENSE_ACCEPT.get() + " "
               + INFO_PROMPT_YES_COMPLETE_ANSWER.get()));
           LicenseFile.setApproval(true);
         }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeCli.java b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeCli.java
index 7e62238..a0389de 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeCli.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeCli.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.tools.upgrade;
 
@@ -49,7 +49,7 @@
 import javax.security.auth.callback.TextOutputCallback;
 import javax.security.auth.callback.UnsupportedCallbackException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.extensions.ConfigFileHandler;
 import org.opends.server.tools.ClientException;
 import org.opends.server.util.ServerConstants;
@@ -222,7 +222,7 @@
   }
 
   // Displays the provided message followed by a help usage reference.
-  private void displayMessageAndUsageReference(final Message message)
+  private void displayMessageAndUsageReference(final LocalizableMessage message)
   {
     println(message);
     println();
@@ -301,7 +301,7 @@
     }
     catch (ArgumentException e)
     {
-      final Message message = ERR_CANNOT_INITIALIZE_ARGS.get(e.getMessage());
+      final LocalizableMessage message = ERR_CANNOT_INITIALIZE_ARGS.get(e.getMessage());
       this.getOutputStream().print(message);
       return EXIT_CODE_ERROR;
     }
@@ -312,7 +312,7 @@
       parser.parseArguments(args);
       if (isInteractive() && isQuiet())
       {
-        final Message message =
+        final LocalizableMessage message =
             ERR_UPGRADE_INCOMPATIBLE_ARGS.get(OPTION_LONG_QUIET,
                 "interactive mode");
         this.getOutputStream().println(message);
@@ -320,7 +320,7 @@
       }
       if (isInteractive() && isForceUpgrade())
       {
-        final Message message =
+        final LocalizableMessage message =
             ERR_UPGRADE_INCOMPATIBLE_ARGS.get(OPTION_LONG_FORCE_UPGRADE,
                 "interactive mode");
         this.getOutputStream().println(message);
@@ -328,7 +328,7 @@
       }
       if (isQuiet() && isVerbose())
       {
-        final Message message =
+        final LocalizableMessage message =
             ERR_UPGRADE_INCOMPATIBLE_ARGS.get(OPTION_LONG_QUIET,
                 OPTION_LONG_VERBOSE);
         this.getOutputStream().println(message);
@@ -337,7 +337,7 @@
     }
     catch (ArgumentException ae)
     {
-      final Message message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
+      final LocalizableMessage message = ERR_ERROR_PARSING_ARGS.get(ae.getMessage());
       displayMessageAndUsageReference(message);
       return EXIT_CODE_ERROR;
     }
@@ -391,7 +391,7 @@
       {
         final ProgressNotificationCallback pnc =
             (ProgressNotificationCallback) c;
-        final Message msg = Message.raw("  " + pnc.getMessage());
+        final LocalizableMessage msg = LocalizableMessage.raw("  " + pnc.getMessage());
         printProgress(msg);
         printProgressBar(msg.length(), pnc.getProgress());
       }
@@ -403,24 +403,24 @@
         switch (fnc.getMessageSubType())
         {
         case TITLE_CALLBACK:
-          println(Style.TITLE, Message.raw(fnc.getMessage()), 0);
+          println(Style.TITLE, LocalizableMessage.raw(fnc.getMessage()), 0);
           LOG.log(INFO, fnc.getMessage());
           break;
         case SUBTITLE_CALLBACK:
-          println(Style.SUBTITLE, Message.raw(fnc.getMessage()),
+          println(Style.SUBTITLE, LocalizableMessage.raw(fnc.getMessage()),
               4);
           LOG.log(INFO, fnc.getMessage());
           break;
         case NOTICE_CALLBACK:
-          println(Style.NOTICE, Message.raw(fnc.getMessage()), 1);
+          println(Style.NOTICE, LocalizableMessage.raw(fnc.getMessage()), 1);
           LOG.log(INFO, fnc.getMessage());
           break;
         case ERROR_CALLBACK:
-          println(Style.ERROR, Message.raw(fnc.getMessage()), 1);
+          println(Style.ERROR, LocalizableMessage.raw(fnc.getMessage()), 1);
           LOG.log(Level.SEVERE, fnc.getMessage());
           break;
         case WARNING:
-          println(Style.WARNING, Message.raw(fnc.getMessage()), 2);
+          println(Style.WARNING, LocalizableMessage.raw(fnc.getMessage()), 2);
           LOG.log(Level.WARNING, fnc.getMessage());
           break;
         default:
@@ -435,7 +435,7 @@
         final TextOutputCallback toc = (TextOutputCallback) c;
         if(toc.getMessageType() == TextOutputCallback.INFORMATION) {
           LOG.log(INFO, toc.getMessage());
-          printlnProgress(Message.raw(toc.getMessage()));
+          printlnProgress(LocalizableMessage.raw(toc.getMessage()));
         } else {
           LOG.log(SEVERE, "Unsupported message type: "
             + toc.getMessage());
@@ -497,7 +497,7 @@
             try
             {
               value =
-                  readInput(Message.raw(prompt), defaultOption,
+                  readInput(LocalizableMessage.raw(prompt), defaultOption,
                       Style.SUBTITLE);
             }
             catch (CLIException e)
@@ -547,7 +547,7 @@
           }
           // Displays the prompt
           prompt.append(" ").append(getDefaultOption(cc.getSelectedIndex()));
-          println(Style.SUBTITLE, Message.raw(prompt), 0);
+          println(Style.SUBTITLE, LocalizableMessage.raw(prompt), 0);
           LOG.log(INFO, getDefaultOption(cc.getSelectedIndex()));
         }
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeContext.java b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeContext.java
index 1cf2fc9..2bed0e8 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeContext.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeContext.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 
 package org.opends.server.tools.upgrade;
@@ -36,7 +36,7 @@
 import javax.security.auth.callback.ConfirmationCallback;
 import javax.security.auth.callback.TextOutputCallback;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.ClientException;
 import org.opends.server.types.InitializationException;
 import org.opends.server.util.BuildVersion;
@@ -277,7 +277,7 @@
    * @throws ClientException
    *           If an error occurred while reporting the message.
    */
-  void notify(final Message message) throws ClientException
+  void notify(final LocalizableMessage message) throws ClientException
   {
     try
     {
@@ -304,7 +304,7 @@
    * @throws ClientException
    *           If an error occurred while reporting the message.
    */
-  void notify(final Message message, final int msgType) throws ClientException
+  void notify(final LocalizableMessage message, final int msgType) throws ClientException
   {
     try
     {
@@ -355,7 +355,7 @@
    *           If an error occurred while reporting the message.
    * @return an integer corresponding to the user's answer.
    */
-  int confirmYN(final Message message, final int defaultOption)
+  int confirmYN(final LocalizableMessage message, final int defaultOption)
       throws ClientException
   {
     final ConfirmationCallback confirmYNCallback = new ConfirmationCallback(
diff --git a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeTasks.java b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeTasks.java
index 9b9cef9..96c2f84 100644
--- a/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeTasks.java
+++ b/opendj3-server-dev/src/server/org/opends/server/tools/upgrade/UpgradeTasks.java
@@ -47,7 +47,7 @@
 import javax.security.auth.callback.TextOutputCallback;
 
 import org.forgerock.opendj.ldap.Filter;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.ClientException;
 import org.opends.server.tools.RebuildIndex;
 import org.opends.server.util.BuildVersion;
@@ -95,7 +95,7 @@
    * @return A new upgrade task which applies an LDIF record to all
    *         configuration entries matching the provided filter.
    */
-  public static UpgradeTask addConfigEntry(final Message summary,
+  public static UpgradeTask addConfigEntry(final LocalizableMessage summary,
       final String... ldif)
   {
     return addConfigEntry0(summary, summary, false, ldif);
@@ -114,8 +114,8 @@
    * @return A new upgrade task which applies an LDIF record to all
    *         configuration entries matching the provided filter.
    */
-  public static UpgradeTask addConfigEntryOptional(final Message summary,
-      final Message description, final String... ldif)
+  public static UpgradeTask addConfigEntryOptional(final LocalizableMessage summary,
+      final LocalizableMessage description, final String... ldif)
   {
     return addConfigEntry0(summary, description, true, ldif);
   }
@@ -137,7 +137,7 @@
       @Override
       public void perform(final UpgradeContext context) throws ClientException
       {
-        final Message msg = INFO_UPGRADE_TASK_REPLACE_SCHEMA_FILE.get(fileName);
+        final LocalizableMessage msg = INFO_UPGRADE_TASK_REPLACE_SCHEMA_FILE.get(fileName);
         LOG.log(Level.INFO, msg.toString());
 
         final ProgressNotificationCallback pnc =
@@ -182,7 +182,7 @@
       @Override
       public void perform(final UpgradeContext context) throws ClientException
       {
-        final Message msg = INFO_UPGRADE_TASK_ADD_CONFIG_FILE.get(fileName);
+        final LocalizableMessage msg = INFO_UPGRADE_TASK_ADD_CONFIG_FILE.get(fileName);
         LOG.log(Level.INFO, msg.toString());
 
         final ProgressNotificationCallback pnc =
@@ -219,7 +219,7 @@
    * @return A new upgrade task which applies an LDIF record to all
    *         configuration entries matching the provided filter.
    */
-  public static UpgradeTask modifyConfigEntry(final Message summary,
+  public static UpgradeTask modifyConfigEntry(final LocalizableMessage summary,
       final String filter, final String... ldif)
   {
     return modifyConfigEntry(summary, summary, false, filter, ldif);
@@ -240,8 +240,8 @@
    * @return A new upgrade task which applies an LDIF record to all
    *         configuration entries matching the provided filter.
    */
-  public static UpgradeTask modifyConfigEntryOptional(final Message summary,
-      final Message description, final String filter, final String... ldif)
+  public static UpgradeTask modifyConfigEntryOptional(final LocalizableMessage summary,
+      final LocalizableMessage description, final String filter, final String... ldif)
   {
     return modifyConfigEntry(summary, description, true, filter, ldif);
   }
@@ -255,7 +255,7 @@
    *
    * <pre>
    * register(&quot;2.5.0.7192&quot;,
-   *   newAttributeTypes(Message.raw(&quot;New attribute etag&quot;),
+   *   newAttributeTypes(LocalizableMessage.raw(&quot;New attribute etag&quot;),
    *   false, &quot;00-core.ldif&quot;,
    *   &quot;1.3.6.1.4.1.36733.2.1.1.59&quot;));
    * </pre>
@@ -271,7 +271,7 @@
    *         in the configuration template files, reads the definition
    *         and adds it onto the specified file in parameter.
    */
-  public static UpgradeTask newAttributeTypes(final Message summary,
+  public static UpgradeTask newAttributeTypes(final LocalizableMessage summary,
       final String fileName, final String... attributeOids)
   {
     return new AbstractUpgradeTask()
@@ -330,7 +330,7 @@
    *         reads the definition and adds it onto the specified file in
    *         parameter.
    */
-  public static UpgradeTask newObjectClasses(final Message summary,
+  public static UpgradeTask newObjectClasses(final LocalizableMessage summary,
       final String fileName, final String... objectClassesOids)
   {
     return new AbstractUpgradeTask()
@@ -478,7 +478,7 @@
    *          The summary of this upgrade task.
    * @return An Upgrade task which rebuild all the indexes.
    */
-  public static UpgradeTask rebuildAllIndexes(final Message summary)
+  public static UpgradeTask rebuildAllIndexes(final LocalizableMessage summary)
   {
     return new AbstractUpgradeTask()
     {
@@ -533,7 +533,7 @@
    *          The index to rebuild.
    * @return The rebuild index task.
    */
-  public static UpgradeTask rebuildSingleIndex(final Message summary,
+  public static UpgradeTask rebuildSingleIndex(final LocalizableMessage summary,
       final String index)
   {
     return new AbstractUpgradeTask()
@@ -591,7 +591,7 @@
       public void postUpgrade(final UpgradeContext context)
           throws ClientException
       {
-        Message message = null;
+        LocalizableMessage message = null;
         final List<String> args = new LinkedList<String>();
 
         if (isRebuildAllIndexesIsPresent && isRebuildAllIndexesTaskAccepted)
@@ -666,14 +666,14 @@
           }
           else
           {
-            final Message msg = ERR_UPGRADE_PERFORMING_POST_TASKS_FAIL.get();
+            final LocalizableMessage msg = ERR_UPGRADE_PERFORMING_POST_TASKS_FAIL.get();
             context.notifyProgress(pnc.setProgress(-100));
             throw new ClientException(EXIT_CODE_ERROR, msg);
           }
         }
         else
         {
-          final Message msg = INFO_UPGRADE_REBUILD_INDEX_NO_BACKEND_FOUND.get();
+          final LocalizableMessage msg = INFO_UPGRADE_REBUILD_INDEX_NO_BACKEND_FOUND.get();
           LOG.log(Level.INFO, msg.toString());
           LOG.log(Level.INFO, INFO_UPGRADE_REBUILD_INDEX_DECLINED.get(
               Arrays.toString(indexesListToRebuild.toArray())).toString());
@@ -699,7 +699,7 @@
       @Override
       public void perform(final UpgradeContext context) throws ClientException
       {
-        final Message msg = INFO_UPGRADE_TASK_REFRESH_UPGRADE_DIRECTORY.get();
+        final LocalizableMessage msg = INFO_UPGRADE_TASK_REFRESH_UPGRADE_DIRECTORY.get();
         LOG.log(Level.INFO, msg.toString());
 
         final ProgressNotificationCallback pnc =
@@ -731,7 +731,7 @@
    * @return An upgrade task which renames the old SNMP security config file if
    *         it exists.
    */
-  public static UpgradeTask renameSnmpSecurityConfig(final Message summary)
+  public static UpgradeTask renameSnmpSecurityConfig(final LocalizableMessage summary)
   {
     return new AbstractUpgradeTask()
     {
@@ -777,8 +777,8 @@
     };
   }
 
-  private static UpgradeTask addConfigEntry0(final Message summary,
-      final Message description, final boolean needsUserConfirmation,
+  private static UpgradeTask addConfigEntry0(final LocalizableMessage summary,
+      final LocalizableMessage description, final boolean needsUserConfirmation,
       final String... ldif)
   {
     return new AbstractUpgradeTask()
@@ -833,8 +833,8 @@
           }
           catch (final Exception e)
           {
-            manageTaskException(context, Message.fromObject(e.getMessage()),
-                pnc);
+            manageTaskException(context,
+                LocalizableMessage.raw(e.getMessage()), pnc);
           }
         }
       }
@@ -871,7 +871,7 @@
   }
 
   private static void manageTaskException(final UpgradeContext context,
-      final Message message, final ProgressNotificationCallback pnc)
+      final LocalizableMessage message, final ProgressNotificationCallback pnc)
       throws ClientException
   {
     countErrors++;
@@ -883,8 +883,8 @@
     }
   }
 
-  private static UpgradeTask modifyConfigEntry(final Message summary,
-      final Message description, final boolean needsUserConfirmation,
+  private static UpgradeTask modifyConfigEntry(final LocalizableMessage summary,
+      final LocalizableMessage description, final boolean needsUserConfirmation,
       final String filter, final String... ldif)
   {
     return new AbstractUpgradeTask()
@@ -938,8 +938,8 @@
           }
           catch (final Exception e)
           {
-            manageTaskException(context, Message.fromObject(e.getMessage()),
-                pnc);
+            manageTaskException(context,
+                LocalizableMessage.raw(e.getMessage()), pnc);
           }
         }
       }
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 0f29389..c5b0984 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
@@ -28,8 +28,8 @@
 
 import java.util.*;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.controls.ControlDecoder;
 import org.opends.server.core.DirectoryServer;
@@ -152,13 +152,13 @@
    * The error message for this operation that should be included in the log and
    * in the response to the client.
    */
-  private MessageBuilder errorMessage;
+  private LocalizableMessageBuilder errorMessage;
 
   /**
    * The real, masked error message for this operation that will not be included
    * in the response to the client, but will be logged.
    */
-  private MessageBuilder maskedErrorMessage;
+  private LocalizableMessageBuilder maskedErrorMessage;
 
   /**
    * Indicates whether this operation needs to be synchronized to other copies
@@ -213,7 +213,7 @@
 
     resultCode                 = ResultCode.UNDEFINED;
     additionalLogItems         = null;
-    errorMessage               = new MessageBuilder();
+    errorMessage               = new LocalizableMessageBuilder();
     attachments                = new HashMap<String,Object>();
     matchedDN                  = null;
     referralURLs               = null;
@@ -230,7 +230,7 @@
   @Override
   public void disconnectClient(DisconnectReason disconnectReason,
                                boolean sendNotification,
-                               Message message)
+                               LocalizableMessage message)
   {
     clientConnection.disconnect(disconnectReason, sendNotification, message);
   }
@@ -335,54 +335,57 @@
 
   /** {@inheritDoc} */
   @Override
-  public final MessageBuilder getErrorMessage()
+  public final LocalizableMessageBuilder getErrorMessage()
   {
     return errorMessage;
   }
 
   /** {@inheritDoc} */
   @Override
-  public final void setErrorMessage(MessageBuilder errorMessage)
+  public final void setErrorMessage(LocalizableMessageBuilder errorMessage)
   {
     this.errorMessage = errorMessage;
   }
 
   /** {@inheritDoc} */
   @Override
-  public final void appendErrorMessage(Message message)
+  public final void appendErrorMessage(LocalizableMessage message)
   {
     if (errorMessage == null)
     {
-      errorMessage = new MessageBuilder();
+      errorMessage = new LocalizableMessageBuilder();
     }
-    else if (errorMessage.length() > 0)
+    if (message != null)
     {
-      errorMessage.append("  ");
+      if (errorMessage.length() > 0)
+      {
+        errorMessage.append("  ");
+      }
+      errorMessage.append(message);
     }
-    errorMessage.append(message);
   }
 
   /** {@inheritDoc} */
   @Override
-  public final MessageBuilder getMaskedErrorMessage()
+  public final LocalizableMessageBuilder getMaskedErrorMessage()
   {
     return maskedErrorMessage;
   }
 
   /** {@inheritDoc} */
   @Override
-  public final void setMaskedErrorMessage(MessageBuilder maskedErrorMessage)
+  public final void setMaskedErrorMessage(LocalizableMessageBuilder maskedErrorMessage)
   {
     this.maskedErrorMessage = maskedErrorMessage;
   }
 
   /** {@inheritDoc} */
   @Override
-  public final void appendMaskedErrorMessage(Message maskedMessage)
+  public final void appendMaskedErrorMessage(LocalizableMessage maskedMessage)
   {
     if (maskedErrorMessage == null)
     {
-      maskedErrorMessage = new MessageBuilder();
+      maskedErrorMessage = new LocalizableMessageBuilder();
     }
     else if (maskedErrorMessage.length() > 0)
     {
@@ -454,7 +457,10 @@
     this.referralURLs     = directoryException.getReferralURLs();
 
     appendErrorMessage(directoryException.getMessageObject());
-    appendMaskedErrorMessage(directoryException.getMaskedMessage());
+    final LocalizableMessage maskedMessage = directoryException.getMaskedMessage();
+    if (maskedMessage != null) {
+      appendMaskedErrorMessage(maskedMessage);
+    }
   }
 
   /** {@inheritDoc} */
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/AccountStatusNotification.java b/opendj3-server-dev/src/server/org/opends/server/types/AccountStatusNotification.java
index 41596ef..1181bea 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/AccountStatusNotification.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/AccountStatusNotification.java
@@ -32,7 +32,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.PasswordPolicy;
 import org.opends.server.core.PasswordPolicyState;
 
@@ -66,7 +66,7 @@
 
   // A message that provides additional information for this account
   // status notification.
-  private Message message;
+  private LocalizableMessage message;
 
 
 
@@ -86,7 +86,7 @@
    */
   public AccountStatusNotification(
               AccountStatusNotificationType notificationType,
-              Entry userEntry, Message message,
+              Entry userEntry, LocalizableMessage message,
               Map<AccountStatusNotificationProperty,List<String>>
                    notificationProperties)
   {
@@ -155,7 +155,7 @@
    * @return  A message that provides additional information for this
    *          account status notification.
    */
-  public Message getMessage()
+  public LocalizableMessage getMessage()
   {
     return message;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/AttributeValues.java b/opendj3-server-dev/src/server/org/opends/server/types/AttributeValues.java
index 7502ec8..dc7380d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/AttributeValues.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/AttributeValues.java
@@ -34,7 +34,7 @@
 import static org.opends.messages.CoreMessages.*;
 import static org.opends.server.loggers.debug.DebugLogger.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.EqualityMatchingRule;
 import org.opends.server.loggers.debug.DebugTracer;
 
@@ -181,7 +181,7 @@
             .getEqualityMatchingRule();
         if (equalityMatchingRule == null)
         {
-          Message message = ERR_ATTR_TYPE_NORMALIZE_NO_MR.get(String
+          LocalizableMessage message = ERR_ATTR_TYPE_NORMALIZE_NO_MR.get(String
               .valueOf(value), attributeType.getNameOrOID());
           throw new DirectoryException(
               ResultCode.INAPPROPRIATE_MATCHING, message);
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 29f992f..a224f20 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
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -249,7 +249,7 @@
     String backupID = backupInfo.getBackupID();
     if (backups.containsKey(backupID))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_BACKUPDIRECTORY_ADD_DUPLICATE_ID.get(backupID, path);
       throw new ConfigException(message);
     }
@@ -276,7 +276,7 @@
   {
     if (! backups.containsKey(backupID))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_BACKUPDIRECTORY_NO_SUCH_BACKUP.get(backupID, path);
       throw new ConfigException(message);
     }
@@ -285,7 +285,7 @@
     {
       if (backup.dependsOn(backupID))
       {
-        Message message = ERR_BACKUPDIRECTORY_UNRESOLVED_DEPENDENCY.
+        LocalizableMessage message = ERR_BACKUPDIRECTORY_UNRESOLVED_DEPENDENCY.
             get(backupID, path, backup.getBackupID());
         throw new ConfigException(message);
       }
@@ -335,14 +335,14 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_BACKUPDIRECTORY_CANNOT_CREATE_DIRECTORY.
+        LocalizableMessage message = ERR_BACKUPDIRECTORY_CANNOT_CREATE_DIRECTORY.
             get(path, getExceptionMessage(e));
         throw new IOException(message.toString());
       }
     }
     else if (! dir.isDirectory())
     {
-      Message message = ERR_BACKUPDIRECTORY_NOT_DIRECTORY.get(path);
+      LocalizableMessage message = ERR_BACKUPDIRECTORY_NOT_DIRECTORY.get(path);
       throw new IOException(message.toString());
     }
 
@@ -407,7 +407,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message =
+          LocalizableMessage message =
               ERR_BACKUPDIRECTORY_CANNOT_DELETE_SAVED_DESCRIPTOR.
                 get(savedDescriptorFilePath, getExceptionMessage(e),
                     newDescriptorFilePath, descriptorFilePath);
@@ -426,7 +426,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_BACKUPDIRECTORY_CANNOT_RENAME_CURRENT_DESCRIPTOR.
               get(descriptorFilePath, savedDescriptorFilePath,
                   getExceptionMessage(e), newDescriptorFilePath,
@@ -448,7 +448,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
         ERR_BACKUPDIRECTORY_CANNOT_RENAME_NEW_DESCRIPTOR.
             get(newDescriptorFilePath, descriptorFilePath,
                 getExceptionMessage(e));
@@ -486,7 +486,7 @@
     File descriptorFile = new File(descriptorFilePath);
     if (! descriptorFile.exists())
     {
-      Message message = ERR_BACKUPDIRECTORY_NO_DESCRIPTOR_FILE.get(
+      LocalizableMessage message = ERR_BACKUPDIRECTORY_NO_DESCRIPTOR_FILE.get(
           descriptorFilePath);
       throw new ConfigException(message);
     }
@@ -499,14 +499,14 @@
     String line = reader.readLine();
     if ((line == null) || (line.length() == 0))
     {
-      Message message =
+      LocalizableMessage message =
         ERR_BACKUPDIRECTORY_CANNOT_READ_CONFIG_ENTRY_DN.
             get(descriptorFilePath);
       throw new ConfigException(message);
     }
     else if (! line.startsWith(PROPERTY_BACKEND_CONFIG_DN))
     {
-      Message message = ERR_BACKUPDIRECTORY_FIRST_LINE_NOT_DN.get(
+      LocalizableMessage message = ERR_BACKUPDIRECTORY_FIRST_LINE_NOT_DN.get(
           descriptorFilePath, line);
       throw new ConfigException(message);
     }
@@ -520,13 +520,13 @@
     }
     catch (DirectoryException de)
     {
-      Message message = ERR_BACKUPDIRECTORY_CANNOT_DECODE_DN.get(
+      LocalizableMessage message = ERR_BACKUPDIRECTORY_CANNOT_DECODE_DN.get(
           dnString, descriptorFilePath, de.getMessageObject());
       throw new ConfigException(message, de);
     }
     catch (Exception e)
     {
-      Message message = ERR_BACKUPDIRECTORY_CANNOT_DECODE_DN.get(
+      LocalizableMessage message = ERR_BACKUPDIRECTORY_CANNOT_DECODE_DN.get(
           dnString, descriptorFilePath, getExceptionMessage(e));
       throw new ConfigException(message, e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/BackupInfo.java b/opendj3-server-dev/src/server/org/opends/server/types/BackupInfo.java
index 7029229..4586963 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/BackupInfo.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/BackupInfo.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -523,13 +523,13 @@
         int equalPos = line.indexOf('=');
         if (equalPos < 0)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_BACKUPINFO_NO_DELIMITER.get(line, backupPath);
           throw new ConfigException(message);
         }
         else if (equalPos == 0)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_BACKUPINFO_NO_NAME.get(line, backupPath);
           throw new ConfigException(message);
         }
@@ -545,7 +545,7 @@
           }
           else
           {
-            Message message = ERR_BACKUPINFO_MULTIPLE_BACKUP_IDS.get(
+            LocalizableMessage message = ERR_BACKUPINFO_MULTIPLE_BACKUP_IDS.get(
                 backupPath, backupID, value);
             throw new ConfigException(message);
           }
@@ -589,7 +589,7 @@
         }
         else
         {
-          Message message = ERR_BACKUPINFO_UNKNOWN_PROPERTY.get(
+          LocalizableMessage message = ERR_BACKUPINFO_UNKNOWN_PROPERTY.get(
               backupPath, name, value);
           throw new ConfigException(message);
         }
@@ -606,7 +606,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_BACKUPINFO_CANNOT_DECODE.get(
+      LocalizableMessage message = ERR_BACKUPINFO_CANNOT_DECODE.get(
           backupPath, getExceptionMessage(e));
       throw new ConfigException(message, e);
     }
@@ -616,13 +616,13 @@
     // specified.
     if (backupID == null)
     {
-      Message message = ERR_BACKUPINFO_NO_BACKUP_ID.get(backupPath);
+      LocalizableMessage message = ERR_BACKUPINFO_NO_BACKUP_ID.get(backupPath);
       throw new ConfigException(message);
     }
 
     if (backupDate == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_BACKUPINFO_NO_BACKUP_DATE.get(backupID, backupPath);
       throw new ConfigException(message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/CancelRequest.java b/opendj3-server-dev/src/server/org/opends/server/types/CancelRequest.java
index 9268bb8..0cf606d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/CancelRequest.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/CancelRequest.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This class defines a data structure that can be used to hold
@@ -46,7 +46,7 @@
 
   // A message that explains the purpose for this cancellation (may be
   // included in the response to the original requestor).
-  private final Message cancelReason;
+  private final LocalizableMessage cancelReason;
 
 
 
@@ -61,7 +61,7 @@
    *                                  purpose for this cancellation.
    */
   public CancelRequest(boolean notifyOriginalRequestor,
-                       Message cancelReason)
+                       LocalizableMessage cancelReason)
   {
     this.notifyOriginalRequestor = notifyOriginalRequestor;
     this.cancelReason            = cancelReason;
@@ -91,7 +91,7 @@
    * @return  A message that explains the purpose for this
    *          cancellation.
    */
-  public Message getCancelReason()
+  public LocalizableMessage getCancelReason()
   {
     return cancelReason;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/CancelResult.java b/opendj3-server-dev/src/server/org/opends/server/types/CancelResult.java
index dec3f97..087622d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/CancelResult.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/CancelResult.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -45,7 +46,7 @@
 
   // A human-readable response that the server
   // provided for the result of the cancellation.
-  private final Message responseMessage;
+  private final LocalizableMessage responseMessage;
 
   /**
    * Creates a new cancel result with the provided result code.
@@ -57,7 +58,7 @@
    *                         server provided for the result
    *                         of the cancellation.
    */
-  public CancelResult(ResultCode resultCode, Message responseMessage)
+  public CancelResult(ResultCode resultCode, LocalizableMessage responseMessage)
   {
     this.resultCode = resultCode;
     this.responseMessage = responseMessage;
@@ -84,7 +85,7 @@
    *          response that the server provided for the result of this
    *          cancellation.
    */
-  public Message getResponseMessage()
+  public LocalizableMessage getResponseMessage()
   {
     return responseMessage;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/CanceledOperationException.java b/opendj3-server-dev/src/server/org/opends/server/types/CanceledOperationException.java
index 7fc4ba0..33dab8f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/CanceledOperationException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/CanceledOperationException.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -86,7 +86,7 @@
    *                       <CODE>null</CODE> if there is no message.
    */
   public CanceledOperationException(CancelRequest cancelRequest,
-                                     Message message)
+                                     LocalizableMessage message)
   {
     super(message);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/CommonSchemaElements.java b/opendj3-server-dev/src/server/org/opends/server/types/CommonSchemaElements.java
index 6f77762..b55be44 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/CommonSchemaElements.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/CommonSchemaElements.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.SchemaMessages.*;
 import static org.opends.server.util.ServerConstants.*;
 import static org.opends.server.util.StaticUtils.toLowerCase;
@@ -208,7 +208,7 @@
       String filename = filenames.get(0);
       if (filename.indexOf('/') != -1 || filename.indexOf('\\') != -1)
       {
-        Message message = ERR_ATTR_SYNTAX_ILLEGAL_X_SCHEMA_FILE.get(filename);
+        LocalizableMessage message = ERR_ATTR_SYNTAX_ILLEGAL_X_SCHEMA_FILE.get(filename);
         throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
             message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/ConfigChangeResult.java b/opendj3-server-dev/src/server/org/opends/server/types/ConfigChangeResult.java
index 9e7fff2..9fad715 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/ConfigChangeResult.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/ConfigChangeResult.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -53,7 +53,7 @@
   // A set of messages describing the changes that were made, any
   // action that may be required, or any problems that were
   // encountered.
-  private List<Message> messages;
+  private List<LocalizableMessage> messages;
 
   // Indicates whether one or more of the changes requires
   // administrative action in order to take effect.
@@ -80,7 +80,7 @@
   {
     this.resultCode          = resultCode;
     this.adminActionRequired = adminActionRequired;
-    this.messages            = new ArrayList<Message>();
+    this.messages            = new ArrayList<LocalizableMessage>();
   }
 
 
@@ -100,7 +100,7 @@
    */
   public ConfigChangeResult(ResultCode resultCode,
                             boolean adminActionRequired,
-                            List<Message> messages)
+                            List<LocalizableMessage> messages)
   {
     this.resultCode          = resultCode;
     this.adminActionRequired = adminActionRequired;
@@ -173,7 +173,7 @@
    * @return  The set of messages that provide explanation for the
    *          processing of the configuration changes.
    */
-  public List<Message> getMessages()
+  public List<LocalizableMessage> getMessages()
   {
     return messages;
   }
@@ -187,7 +187,7 @@
    * @param  message  The message to add to the set of messages for
    *                  this config change result.
    */
-  public void addMessage(Message message)
+  public void addMessage(LocalizableMessage message)
   {
     messages.add(message);
   }
@@ -225,9 +225,9 @@
 
     if (! messages.isEmpty())
     {
-      Iterator<Message> iterator = messages.iterator();
+      Iterator<LocalizableMessage> iterator = messages.iterator();
 
-      Message firstMessage = iterator.next();
+      LocalizableMessage firstMessage = iterator.next();
       buffer.append(firstMessage);
 
       while (iterator.hasNext())
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/CryptoManagerException.java b/opendj3-server-dev/src/server/org/opends/server/types/CryptoManagerException.java
index b448808..8cfe023 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/CryptoManagerException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/CryptoManagerException.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This class defines an exception that is thrown in the case of
@@ -53,7 +54,7 @@
    * Creates an exception with the given message.
    * @param message the message message.
    */
-  public CryptoManagerException(Message message) {
+  public CryptoManagerException(LocalizableMessage message) {
     super(message);
    }
 
@@ -63,7 +64,7 @@
    * @param message The message message.
    * @param cause  The underlying cause.
    */
-  public CryptoManagerException(Message message, Exception cause) {
+  public CryptoManagerException(LocalizableMessage message, Exception cause) {
     super(message, cause);
   }
 }
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 5eec0aa..c7b8efa 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
@@ -34,7 +34,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
 
@@ -582,7 +582,7 @@
       // that would be invalid.
       if (dnReader.remaining() <= 0)
       {
-        Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
             dnString.toString(), attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -600,7 +600,7 @@
         // This means that we hit the end of the value before
         // finding a '='.  This is illegal because there is no
         // attribute-value separator.
-        Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
             dnString.toString(), attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
             message);
@@ -610,7 +610,7 @@
       // then that's an error.
       if (b != '=')
       {
-        Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.
             get(dnString.toString(), attributeName.toString(),
                 (char) b);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
@@ -712,7 +712,7 @@
       {
         // This should not happen.  At any rate, it's an illegal
         // character, so throw an exception.
-        Message message = ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(
             dnReader.toString(), (char) b, dnReader.position()-1);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -740,7 +740,7 @@
         // because that would be invalid.
         if (b == ' ')
         {
-          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
               dnString.toString(), attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -759,7 +759,7 @@
           // This means that we hit the end of the value before
           // finding a '='.  This is illegal because there is no
           // attribute-value separator.
-          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.
               get(dnString.toString(), attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
               message);
@@ -770,7 +770,7 @@
         // then that's an error.
         if (b != '=')
         {
-          Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.
               get(dnString.toString(), attributeName.toString(),
                   (char) b);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
@@ -874,7 +874,7 @@
         {
           // This should not happen.  At any rate, it's an illegal
           // character, so throw an exception.
-          Message message = ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(
               dnString.toString(), (char) b, dnReader.position()-1);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
               message);
@@ -949,7 +949,7 @@
       // that would be invalid.
       if (pos >= length)
       {
-        Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
             dnString, attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -967,7 +967,7 @@
           // This means that we hit the end of the value before
           // finding a '='.  This is illegal because there is no
           // attribute-value separator.
-          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
               dnString, attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -987,7 +987,7 @@
       }
       else
       {
-        Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(
             dnString, attributeName.toString(), c);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -1087,7 +1087,7 @@
       {
         // This should not happen.  At any rate, it's an illegal
         // character, so throw an exception.
-        Message message =
+        LocalizableMessage message =
             ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(dnString, c, pos);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -1118,7 +1118,7 @@
         // because that would be invalid.
         if (pos >= length)
         {
-          Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.get(
               dnString, attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -1136,7 +1136,7 @@
             // This means that we hit the end of the value before
             // finding a '='.  This is illegal because there is no
             // attribute-value separator.
-            Message message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.
+            LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_ATTR_NAME.
                 get(dnString, attributeName.toString());
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                          message);
@@ -1156,7 +1156,7 @@
         }
         else
         {
-          Message message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_NO_EQUAL.get(
               dnString, attributeName.toString(), c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -1254,7 +1254,7 @@
         {
           // This should not happen.  At any rate, it's an illegal
           // character, so throw an exception.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DN_INVALID_CHAR.get(dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -1296,7 +1296,7 @@
       // know that there is at least one RDN component, and
       // therefore the last non-space character of the DN must
       // have been a comma. This is not acceptable.
-      Message message = ERR_ATTR_SYNTAX_DN_END_WITH_COMMA.get(
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DN_END_WITH_COMMA.get(
           dnBytes.toString());
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
           message);
@@ -1343,7 +1343,7 @@
         case ',':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          Message msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+          LocalizableMessage msg = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
               dnBytes.toString(), (char) b, dnBytes.position()-1);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        msg);
@@ -1556,7 +1556,7 @@
     // least one character.
     if (nameBytes == null || nameBytes.length() == 0)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ATTR_SYNTAX_DN_ATTR_NO_NAME.get(dnBytes.toString());
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                    message);
@@ -1632,7 +1632,7 @@
 
       if (! validOID)
       {
-        Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD.get(
             dnBytes.toString(), nameBytes.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -1640,7 +1640,7 @@
     }
     else if (isDigit((char)nameBytes.byteAt(0)) && (!allowExceptions))
     {
-      Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DIGIT.
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DIGIT.
           get(dnBytes.toString(), ((char)nameBytes.byteAt(0)),
               ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
@@ -1694,7 +1694,7 @@
           // know that there is at least one RDN component, and
           // therefore the last non-space character of the DN must
           // have been a comma. This is not acceptable.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DN_END_WITH_COMMA.get(dnString);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -1739,7 +1739,7 @@
         case ',':
           // None of these are allowed in an attribute name or any
           // character immediately following it.
-          Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_CHAR.get(
               dnString, c, pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -1961,7 +1961,7 @@
     // have at least one character.
     if (attributeName.length() == 0)
     {
-      Message message = ERR_ATTR_SYNTAX_DN_ATTR_NO_NAME.get(dnString);
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_NO_NAME.get(dnString);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                    message);
     }
@@ -2036,7 +2036,7 @@
 
       if (! validOID)
       {
-        Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_PERIOD.get(
             dnString, attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -2045,7 +2045,7 @@
     else if (isDigit(attributeName.charAt(0)) &&
              (! allowExceptions))
     {
-      Message message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DIGIT.
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_ILLEGAL_INITIAL_DIGIT.
           get(dnString, attributeName.charAt(0),
               ATTR_ALLOW_ATTRIBUTE_NAME_EXCEPTIONS);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
@@ -2092,7 +2092,7 @@
       StringBuilder hexString = new StringBuilder();
       if (dnBytes.remaining() < 2)
       {
-        Message message = ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(
+        LocalizableMessage message = ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(
             dnBytes.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -2107,7 +2107,7 @@
         }
         else
         {
-          Message message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(
               dnBytes.toString(), (char) b);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -2134,7 +2134,7 @@
             }
             else
             {
-              Message message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.
+              LocalizableMessage message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.
                   get(dnBytes.toString(), (char) b);
               throw new DirectoryException(
                              ResultCode.INVALID_DN_SYNTAX, message);
@@ -2142,7 +2142,7 @@
           }
           else
           {
-            Message message = ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.
+            LocalizableMessage message = ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.
                 get(dnBytes.toString());
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                          message);
@@ -2156,7 +2156,7 @@
         }
         else
         {
-          Message message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(
               dnBytes.toString(), (char) b);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -2179,7 +2179,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.
               get(dnBytes.toString(), String.valueOf(e));
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
@@ -2201,7 +2201,7 @@
         {
           // We hit the end of the DN before the closing quote.
           // That's an error.
-          Message message = ERR_ATTR_SYNTAX_DN_UNMATCHED_QUOTE.get(
+          LocalizableMessage message = ERR_ATTR_SYNTAX_DN_UNMATCHED_QUOTE.get(
               dnBytes.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -2227,7 +2227,7 @@
       //We don't allow an empty attribute value. So do not allow the
       // first character to be a '+' or ',' since it is not escaped
       // by the user.
-      Message message =
+      LocalizableMessage message =
              ERR_ATTR_SYNTAX_DN_INVALID_REQUIRES_ESCAPE_CHAR.get(
                       dnBytes.toString(),dnBytes.position());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
@@ -2314,7 +2314,7 @@
       StringBuilder hexString = new StringBuilder();
       if ((pos+2) > length)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(dnString);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                      message);
@@ -2329,7 +2329,7 @@
         }
         else
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(dnString, c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -2356,7 +2356,7 @@
             }
             else
             {
-              Message message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.
+              LocalizableMessage message = ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.
                   get(dnString, c);
               throw new DirectoryException(
                              ResultCode.INVALID_DN_SYNTAX, message);
@@ -2364,7 +2364,7 @@
           }
           else
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ATTR_SYNTAX_DN_HEX_VALUE_TOO_SHORT.get(dnString);
             throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                          message);
@@ -2378,7 +2378,7 @@
         }
         else
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DN_INVALID_HEX_DIGIT.get(dnString, c);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -2402,7 +2402,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message =
+        LocalizableMessage message =
             ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.
               get(dnString, String.valueOf(e));
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
@@ -2425,7 +2425,7 @@
         {
           // We hit the end of the DN before the closing quote.
           // That's an error.
-          Message message =
+          LocalizableMessage message =
               ERR_ATTR_SYNTAX_DN_UNMATCHED_QUOTE.get(dnString);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                        message);
@@ -2466,7 +2466,7 @@
       //We don't allow an empty attribute value. So do not allow the
       // first character to be a '+' or ',' since it is not escaped
       // by the user.
-      Message message =
+      LocalizableMessage message =
              ERR_ATTR_SYNTAX_DN_INVALID_REQUIRES_ESCAPE_CHAR.get(
                       dnString,pos);
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
@@ -2525,7 +2525,7 @@
             // value.
             if (pos >= length)
             {
-              Message message =
+              LocalizableMessage message =
                 ERR_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID.
                     get(dnString);
               throw new DirectoryException(
@@ -2541,7 +2541,7 @@
               }
               else
               {
-                Message message =
+                LocalizableMessage message =
                   ERR_ATTR_SYNTAX_DN_ESCAPED_HEX_VALUE_INVALID.
                       get(dnString);
                 throw new DirectoryException(
@@ -2648,7 +2648,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.
+      LocalizableMessage message = ERR_ATTR_SYNTAX_DN_ATTR_VALUE_DECODE_FAILURE.
           get(dnString, String.valueOf(e));
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX,
                                    message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/DebugLogCategory.java b/opendj3-server-dev/src/server/org/opends/server/types/DebugLogCategory.java
index 2bea3dd..c31355b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/DebugLogCategory.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/DebugLogCategory.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types;
 
@@ -45,62 +46,12 @@
       DEBUG_CATEGORY_MESSAGE);
 
   /**
-   * The log category that will be used for constructor messages.
-   * Only logger related classes may use this.
-   */
-  public static final LogCategory CONSTRUCTOR = new DebugLogCategory(
-      DEBUG_CATEGORY_CONSTRUCTOR);
-
-
-  /**
-   * The log category that will be used for raw data read messages.
-   */
-  public static final LogCategory DATA = new DebugLogCategory(
-      DEBUG_CATEGORY_DATA);
-
-
-  /**
-   * The log category that will be used for thrown exception messages.
-   * Only logger related classes may use this.
-   */
-  public static final LogCategory THROWN = new DebugLogCategory(
-      DEBUG_CATEGORY_THROWN);
-
-  /**
    * The log category that will be used for caught exception messages.
    * Only logger related classes may use this.
    */
   public static final LogCategory CAUGHT = new DebugLogCategory(
       DEBUG_CATEGORY_CAUGHT);
 
-  /**
-   * The log category that will be used for method entry messages.
-   * Only logger related classes may use this.
-   */
-  public static final LogCategory ENTER = new DebugLogCategory(
-      DEBUG_CATEGORY_ENTER);
-
-  /**
-   * The log category that will be used for method exit messages.
-   * Only logger related classes may use this.
-   */
-  public static final LogCategory EXIT = new DebugLogCategory(
-      DEBUG_CATEGORY_EXIT);
-
-  /**
-   * The log category that will be used for protocol
-   * elements messages.
-   */
-  public static final LogCategory PROTOCOL = new DebugLogCategory(
-      DEBUG_CATEGORY_PROTOCOL);
-
-  /**
-   * The log category that will be used for raw data access
-   * from the JE database messages.
-   */
-  public static final LogCategory DATABASE_ACCESS =
-      new DebugLogCategory(DEBUG_CATEGORY_DATABASE_ACCESS);
-
 
   /**
    * Constructor for the DebugLogCategory class.
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/DirectoryConfig.java b/opendj3-server-dev/src/server/org/opends/server/types/DirectoryConfig.java
index 1a9e20e..3332586 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/DirectoryConfig.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/DirectoryConfig.java
@@ -27,7 +27,7 @@
 package org.opends.server.types;
 
 import java.util.List;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -773,7 +773,7 @@
   public static void
        sendAlertNotification(AlertGenerator generator,
                              String alertType,
-                             Message alertMessage)
+                             LocalizableMessage alertMessage)
   {
     DirectoryServer.sendAlertNotification(generator, alertType,
             alertMessage);
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/DirectoryException.java b/opendj3-server-dev/src/server/org/opends/server/types/DirectoryException.java
index b5b9d9e..2d5d64e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/DirectoryException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/DirectoryException.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.types;
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * This class defines an exception that may be thrown if a problem
@@ -76,7 +76,7 @@
    *
    * @see #getMessage() for the message returned to the client
    */
-  private Message maskedMessage;
+  private LocalizableMessage maskedMessage;
 
   /**
    * If set, this is the real result code for this directory exception that
@@ -95,7 +95,7 @@
    *                         exception.
    */
   public DirectoryException(ResultCode resultCode,
-                            Message errorMessage)
+                            LocalizableMessage errorMessage)
   {
     super(errorMessage);
 
@@ -118,7 +118,7 @@
    *                         this directory exception.
    */
   public DirectoryException(ResultCode resultCode,
-                            Message errorMessage,
+                            LocalizableMessage errorMessage,
                             Throwable cause)
   {
     super(errorMessage, cause);
@@ -165,7 +165,7 @@
    *                         this directory exception.
    */
   public DirectoryException(ResultCode resultCode,
-                            Message errorMessage,
+                            LocalizableMessage errorMessage,
                             DN matchedDN, Throwable cause)
   {
     super(errorMessage, cause);
@@ -192,7 +192,7 @@
    *                         this directory exception.
    */
   public DirectoryException(ResultCode resultCode,
-                            Message errorMessage,
+                            LocalizableMessage errorMessage,
                             DN matchedDN, List<String> referralURLs,
                             Throwable cause)
   {
@@ -249,7 +249,7 @@
    * @return the real, masked message
    * @see #getMessage() for the message returned to the client
    */
-  public Message getMaskedMessage()
+  public LocalizableMessage getMaskedMessage()
   {
     return maskedMessage;
   }
@@ -273,7 +273,7 @@
    * @param maskedMessage
    *          the real, masked message to set
    */
-  public void setMaskedMessage(Message maskedMessage)
+  public void setMaskedMessage(LocalizableMessage maskedMessage)
   {
     this.maskedMessage = maskedMessage;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/DisconnectReason.java b/opendj3-server-dev/src/server/org/opends/server/types/DisconnectReason.java
index 059d230..218c5e5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/DisconnectReason.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/DisconnectReason.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -190,7 +190,7 @@
 
 
   // The disconnect reason.
-  private Message message;
+  private LocalizableMessage message;
 
 
   /**
@@ -199,7 +199,7 @@
    *
    * @param  message  The message for this disconnect reason.
    */
-  private DisconnectReason(Message message)
+  private DisconnectReason(LocalizableMessage message)
   {
     this.message = message;
   }
@@ -211,7 +211,7 @@
    *
    * @return  The human-readable disconnect reason.
    */
-  public Message getClosureMessage()
+  public LocalizableMessage getClosureMessage()
   {
     return message;
   }
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 d2390ea..0b3d85a 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
@@ -36,8 +36,8 @@
 import java.util.*;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.AttributeValueDecoder;
 import org.opends.server.api.CompressedSchema;
 import org.opends.server.api.ProtocolElement;
@@ -312,7 +312,7 @@
       ObjectClass oc = DirectoryServer.getObjectClass(lowerName);
       if (oc == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ENTRY_ADD_UNKNOWN_OC.get(name, String.valueOf(dn));
         throw new DirectoryException(OBJECTCLASS_VIOLATION, message);
       }
@@ -345,7 +345,7 @@
 
     if (objectClasses.containsKey(oc))
     {
-      Message message = ERR_ENTRY_ADD_DUPLICATE_OC.get(
+      LocalizableMessage message = ERR_ENTRY_ADD_DUPLICATE_OC.get(
           oc.getNameOrOID(), String.valueOf(dn));
       throw new DirectoryException(OBJECTCLASS_VIOLATION, message);
     }
@@ -1349,7 +1349,7 @@
     Attribute a = getExactAttribute(attributeType, attribute.getOptions());
     if (a == null)
     {
-      Message message = ERR_ENTRY_INCREMENT_NO_SUCH_ATTRIBUTE.get(
+      LocalizableMessage message = ERR_ENTRY_INCREMENT_NO_SUCH_ATTRIBUTE.get(
             attribute.getName());
       throw new DirectoryException(ResultCode.NO_SUCH_ATTRIBUTE, message);
     }
@@ -1358,7 +1358,7 @@
     Iterator<AttributeValue> i = attribute.iterator();
     if (!i.hasNext())
     {
-      Message message = ERR_ENTRY_INCREMENT_INVALID_VALUE_COUNT.get(
+      LocalizableMessage message = ERR_ENTRY_INCREMENT_INVALID_VALUE_COUNT.get(
           attribute.getName());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -1371,14 +1371,14 @@
     }
     catch (NumberFormatException e)
     {
-      Message message = ERR_ENTRY_INCREMENT_CANNOT_PARSE_AS_INT.get(
+      LocalizableMessage message = ERR_ENTRY_INCREMENT_CANNOT_PARSE_AS_INT.get(
           attribute.getName());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
 
     if (i.hasNext())
     {
-      Message message = ERR_ENTRY_INCREMENT_INVALID_VALUE_COUNT.get(
+      LocalizableMessage message = ERR_ENTRY_INCREMENT_INVALID_VALUE_COUNT.get(
           attribute.getName());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -1396,7 +1396,7 @@
       }
       catch (NumberFormatException e)
       {
-        Message message = ERR_ENTRY_INCREMENT_CANNOT_PARSE_AS_INT.get(
+        LocalizableMessage message = ERR_ENTRY_INCREMENT_CANNOT_PARSE_AS_INT.get(
             attribute.getName());
         throw new DirectoryException(
             ResultCode.CONSTRAINT_VIOLATION, message);
@@ -1660,7 +1660,7 @@
             {
               if (!relaxConstraints)
               {
-                Message message = ERR_ENTRY_DUPLICATE_VALUES.get(a.getName());
+                LocalizableMessage message = ERR_ENTRY_DUPLICATE_VALUES.get(a.getName());
                 throw new DirectoryException(ATTRIBUTE_OR_VALUE_EXISTS,message);
               }
             }
@@ -1677,7 +1677,7 @@
           {
             if (objectClasses.remove(oc) == null && !relaxConstraints)
             {
-              Message message = ERR_ENTRY_NO_SUCH_VALUE.get(a.getName());
+              LocalizableMessage message = ERR_ENTRY_NO_SUCH_VALUE.get(a.getName());
               throw new DirectoryException(NO_SUCH_ATTRIBUTE, message);
             }
           }
@@ -1690,7 +1690,7 @@
           break;
 
         case INCREMENT:
-          Message message = ERR_ENTRY_OC_INCREMENT_NOT_SUPPORTED.get();
+          LocalizableMessage message = ERR_ENTRY_OC_INCREMENT_NOT_SUPPORTED.get();
           throw new DirectoryException(CONSTRAINT_VIOLATION, message);
 
         default:
@@ -1709,7 +1709,7 @@
         addAttribute(a, duplicateValues);
         if (!duplicateValues.isEmpty() && !relaxConstraints)
         {
-          Message message = ERR_ENTRY_DUPLICATE_VALUES.get(a.getName());
+          LocalizableMessage message = ERR_ENTRY_DUPLICATE_VALUES.get(a.getName());
           throw new DirectoryException(ATTRIBUTE_OR_VALUE_EXISTS, message);
         }
         break;
@@ -1719,7 +1719,7 @@
         removeAttribute(a, missingValues);
         if (!missingValues.isEmpty() && !relaxConstraints)
         {
-          Message message = ERR_ENTRY_NO_SUCH_VALUE.get(a.getName());
+          LocalizableMessage message = ERR_ENTRY_NO_SUCH_VALUE.get(a.getName());
           throw new DirectoryException(NO_SUCH_ATTRIBUTE, message);
         }
         break;
@@ -1733,7 +1733,7 @@
         break;
 
       default:
-        Message message = ERR_ENTRY_UNKNOWN_MODIFICATION_TYPE.get(
+        LocalizableMessage message = ERR_ENTRY_UNKNOWN_MODIFICATION_TYPE.get(
             String.valueOf(mod.getModificationType()));
         throw new DirectoryException(UNWILLING_TO_PERFORM, message);
     }
@@ -1830,7 +1830,7 @@
                                   boolean parentProvided,
                                   boolean validateNameForms,
                                   boolean validateStructureRules,
-                                  MessageBuilder invalidReason)
+                                  LocalizableMessageBuilder invalidReason)
   {
     // Get the structural objectclass for the entry.  If there isn't
     // one, or if there's more than one, then see if that's OK.
@@ -1848,7 +1848,7 @@
         }
         else if (! structuralClass.isDescendantOf(oc))
         {
-          Message message =
+          LocalizableMessage message =
                   ERR_ENTRY_SCHEMA_MULTIPLE_STRUCTURAL_CLASSES.get(
                     String.valueOf(dn),
                     structuralClass.getNameOrOID(),
@@ -1874,7 +1874,7 @@
     DITStructureRule ditStructureRule = null;
     if (structuralClass == null)
     {
-      Message message = ERR_ENTRY_SCHEMA_NO_STRUCTURAL_CLASS.get(
+      LocalizableMessage message = ERR_ENTRY_SCHEMA_NO_STRUCTURAL_CLASS.get(
               String.valueOf(dn));
 
       if (structuralPolicy == AcceptRejectWarn.REJECT)
@@ -1990,7 +1990,7 @@
   private boolean checkAttributesAndObjectClasses(
                        DITContentRule ditContentRule,
                        AcceptRejectWarn structuralPolicy,
-                       MessageBuilder invalidReason)
+                       LocalizableMessageBuilder invalidReason)
   {
     // Make sure that we recognize all of the objectclasses, that all
     // auxiliary classes are allowed by the DIT content rule, and that
@@ -1999,7 +1999,7 @@
     {
       if (DirectoryServer.getObjectClass(o.getOID()) == null)
       {
-        Message message = ERR_ENTRY_SCHEMA_UNKNOWN_OC.get(
+        LocalizableMessage message = ERR_ENTRY_SCHEMA_UNKNOWN_OC.get(
                 String.valueOf(dn), o.getNameOrOID());
         invalidReason.append(message);
         return false;
@@ -2009,7 +2009,7 @@
           (ditContentRule != null) &&
           (! ditContentRule.getAuxiliaryClasses().contains(o)))
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_ENTRY_SCHEMA_DISALLOWED_AUXILIARY_CLASS.get(
                   String.valueOf(dn),
                   o.getNameOrOID(),
@@ -2031,7 +2031,7 @@
                operationalAttributes.containsKey(t) ||
                t.isObjectClassType()))
         {
-          Message message =
+          LocalizableMessage message =
                   ERR_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_OC.get(
                     String.valueOf(dn),
                     t.getNameOrOID(),
@@ -2066,7 +2066,7 @@
 
       if (! found)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_ENTRY_SCHEMA_DISALLOWED_USER_ATTR_FOR_OC.get(
                   String.valueOf(dn),
                   t.getNameOrOID());
@@ -2081,7 +2081,7 @@
         {
           if (a.isEmpty())
           {
-            Message message = ERR_ENTRY_SCHEMA_ATTR_NO_VALUES.get(
+            LocalizableMessage message = ERR_ENTRY_SCHEMA_ATTR_NO_VALUES.get(
                     String.valueOf(dn),
                     t.getNameOrOID());
 
@@ -2090,7 +2090,7 @@
           }
           else if (t.isSingleValue() && (a.size() != 1))
           {
-            Message message = ERR_ENTRY_SCHEMA_ATTR_SINGLE_VALUED.get(
+            LocalizableMessage message = ERR_ENTRY_SCHEMA_ATTR_SINGLE_VALUED.get(
                     String.valueOf(dn),
                     t.getNameOrOID());
 
@@ -2115,7 +2115,7 @@
           {
             if (a.size() > 1)
             {
-              Message message =
+              LocalizableMessage message =
                       ERR_ENTRY_SCHEMA_ATTR_SINGLE_VALUED.get(
                         String.valueOf(dn),
                         t.getNameOrOID());
@@ -2150,7 +2150,7 @@
    */
   private boolean checkNameForm(NameForm nameForm,
                        AcceptRejectWarn structuralPolicy,
-                       MessageBuilder invalidReason)
+                       LocalizableMessageBuilder invalidReason)
   {
     RDN rdn = dn.rdn();
     if (rdn != null)
@@ -2160,7 +2160,7 @@
         {
           if (! rdn.hasAttributeType(t))
           {
-            Message message =
+            LocalizableMessage message =
                     ERR_ENTRY_SCHEMA_RDN_MISSING_REQUIRED_ATTR.get(
                       String.valueOf(dn),
                       t.getNameOrOID(),
@@ -2185,7 +2185,7 @@
             AttributeType t = rdn.getAttributeType(i);
             if (! nameForm.isRequiredOrOptional(t))
             {
-              Message message =
+              LocalizableMessage message =
                       ERR_ENTRY_SCHEMA_RDN_DISALLOWED_ATTR.get(
                         String.valueOf(dn),
                         t.getNameOrOID(),
@@ -2225,7 +2225,7 @@
    */
   private boolean checkDITContentRule(DITContentRule ditContentRule,
                        AcceptRejectWarn structuralPolicy,
-                       MessageBuilder invalidReason)
+                       LocalizableMessageBuilder invalidReason)
   {
     // Make sure that all of the required attributes are present.
     for (AttributeType t : ditContentRule.getRequiredAttributes())
@@ -2234,7 +2234,7 @@
              operationalAttributes.containsKey(t) ||
              t.isObjectClassType()))
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_ENTRY_SCHEMA_MISSING_REQUIRED_ATTR_FOR_DCR.get(
                   String.valueOf(dn),
                   t.getNameOrOID(),
@@ -2258,7 +2258,7 @@
       if (userAttributes.containsKey(t) ||
           operationalAttributes.containsKey(t))
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_ENTRY_SCHEMA_PROHIBITED_ATTR_FOR_DCR.get(
                   String.valueOf(dn),
                   t.getNameOrOID(),
@@ -2311,7 +2311,7 @@
                        Entry parentEntry, boolean parentProvided,
                        boolean validateStructureRules,
                        AcceptRejectWarn structuralPolicy,
-                       MessageBuilder invalidReason)
+                       LocalizableMessageBuilder invalidReason)
   {
     // If there is a DIT structure rule for this entry, then make sure
     // that the entry is in compliance with it.
@@ -2342,7 +2342,7 @@
           final Lock lock = LockManager.lockRead(parentDN);
           if (lock == null)
           {
-            Message message =
+            LocalizableMessage message =
                     ERR_ENTRY_SCHEMA_DSR_COULD_NOT_LOCK_PARENT.get(
                       String.valueOf(dn), String.valueOf(parentDN));
 
@@ -2363,7 +2363,7 @@
               parentEntry = DirectoryServer.getEntry(parentDN);
               if (parentEntry == null)
               {
-                Message message =
+                LocalizableMessage message =
                      ERR_ENTRY_SCHEMA_DSR_NO_PARENT_ENTRY.get(
                              String.valueOf(dn),
                              String.valueOf(parentDN));
@@ -2399,7 +2399,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              Message message =
+              LocalizableMessage message =
                    ERR_ENTRY_SCHEMA_COULD_NOT_CHECK_DSR.get(
                            String.valueOf(dn),
                            ditStructureRule.getNameOrRuleID(),
@@ -2444,7 +2444,7 @@
           final Lock lock = LockManager.lockRead(parentDN);
           if (lock == null)
           {
-            Message message =
+            LocalizableMessage message =
                     ERR_ENTRY_SCHEMA_DSR_COULD_NOT_LOCK_PARENT.get(
                       String.valueOf(dn),
                       String.valueOf(parentDN));
@@ -2466,7 +2466,7 @@
               parentEntry = DirectoryServer.getEntry(parentDN);
               if (parentEntry == null)
               {
-                Message message =
+                LocalizableMessage message =
                      ERR_ENTRY_SCHEMA_DSR_NO_PARENT_ENTRY.get(
                              String.valueOf(dn),
                              String.valueOf(parentDN));
@@ -2494,7 +2494,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              Message message =
+              LocalizableMessage message =
                    ERR_ENTRY_SCHEMA_COULD_NOT_CHECK_PARENT_DSR.get(
                            String.valueOf(dn),
                            getExceptionMessage(e));
@@ -2521,7 +2521,7 @@
       {
         if (parentStructuralClass == null)
         {
-          Message message = ERR_ENTRY_SCHEMA_DSR_NO_PARENT_OC.get(
+          LocalizableMessage message = ERR_ENTRY_SCHEMA_DSR_NO_PARENT_OC.get(
                   String.valueOf(dn),
                   String.valueOf(parentEntry.getName()));
 
@@ -2549,7 +2549,7 @@
                      DirectoryServer.getDITStructureRule(parentNF);
                 if (parentDSR != null && !parentDSR.isObsolete())
                 {
-                  Message message =
+                  LocalizableMessage message =
                        ERR_ENTRY_SCHEMA_VIOLATES_PARENT_DSR.get(
                                String.valueOf(dn),
                                String.valueOf(parentEntry.getName()));
@@ -2599,12 +2599,12 @@
   private boolean validateDITStructureRule(DITStructureRule dsr,
                        ObjectClass structuralClass, Entry parentEntry,
                        AcceptRejectWarn structuralPolicy,
-                       MessageBuilder invalidReason)
+                       LocalizableMessageBuilder invalidReason)
   {
     ObjectClass oc = parentEntry.getStructuralObjectClass();
     if (oc == null)
     {
-      Message message = ERR_ENTRY_SCHEMA_DSR_NO_PARENT_OC.get(
+      LocalizableMessage message = ERR_ENTRY_SCHEMA_DSR_NO_PARENT_OC.get(
               String.valueOf(dn),
               String.valueOf(parentEntry.getName()));
 
@@ -2630,7 +2630,7 @@
 
     if (! matchFound)
     {
-      Message message =
+      LocalizableMessage message =
               ERR_ENTRY_SCHEMA_DSR_DISALLOWED_SUPERIOR_OC.get(
                 String.valueOf(dn),
                 dsr.getNameOrRuleID(),
@@ -3741,7 +3741,7 @@
       Byte version = entryBuffer.get();
       if (version != 0x03 && version != 0x02 && version != 0x01)
       {
-        Message message = ERR_ENTRY_DECODE_UNRECOGNIZED_VERSION.get(
+        LocalizableMessage message = ERR_ENTRY_DECODE_UNRECOGNIZED_VERSION.get(
             byteToHex(version));
         throw new DirectoryException(
                        DirectoryServer.getServerErrorResultCode(),
@@ -3813,7 +3813,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_ENTRY_DECODE_EXCEPTION.get(getExceptionMessage(e));
       throw new DirectoryException(
                      DirectoryServer.getServerErrorResultCode(),
@@ -4144,7 +4144,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_EXPORT.
             get(String.valueOf(dn), String.valueOf(e));
       throw new LDIFException(message, e);
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/EntryEncodeConfig.java b/opendj3-server-dev/src/server/org/opends/server/types/EntryEncodeConfig.java
index cbf690e..38ba34a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/EntryEncodeConfig.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/EntryEncodeConfig.java
@@ -31,7 +31,7 @@
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.CompressedSchema;
 import org.opends.server.core.DirectoryServer;
 
@@ -297,7 +297,7 @@
   {
     if (length != 1)
     {
-      Message message = ERR_ENTRYENCODECFG_INVALID_LENGTH.get();
+      LocalizableMessage message = ERR_ENTRYENCODECFG_INVALID_LENGTH.get();
       throw new DirectoryException(
                      DirectoryServer.getServerErrorResultCode(),
                      message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/FilePermission.java b/opendj3-server-dev/src/server/org/opends/server/types/FilePermission.java
index dd3117e..1b5efdc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/FilePermission.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/FilePermission.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -610,7 +610,7 @@
   {
     if (! f.exists())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_FILEPERM_SET_NO_SUCH_FILE.get(f.getAbsolutePath());
       throw new FileNotFoundException(message.toString());
     }
@@ -911,7 +911,7 @@
     {
       // If an exception was thrown, we can't be sure whether or not
       // any permissions were updated.
-      Message message =
+      LocalizableMessage message =
           ERR_FILEPERM_SET_JAVA_EXCEPTION.get(f.getAbsolutePath());
       throw new DirectoryException(ResultCode.OTHER, message);
     }
@@ -920,14 +920,14 @@
       if (anySuccessful)
       {
         // Some of the file permissions may have been altered.
-        Message message = ERR_FILEPERM_SET_JAVA_FAILED_ALTERED.get(
+        LocalizableMessage message = ERR_FILEPERM_SET_JAVA_FAILED_ALTERED.get(
             f.getAbsolutePath());
         throw new DirectoryException(ResultCode.OTHER, message);
       }
       else
       {
         // The file permissions should have been left intact.
-        Message message = ERR_FILEPERM_SET_JAVA_FAILED_UNALTERED.get(
+        LocalizableMessage message = ERR_FILEPERM_SET_JAVA_FAILED_UNALTERED.get(
             f.getAbsolutePath());
         throw new DirectoryException(ResultCode.OTHER, message);
       }
@@ -1037,7 +1037,7 @@
   {
     if ((modeString == null) || (modeString.length() != 3))
     {
-      Message message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
+      LocalizableMessage message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
           String.valueOf(modeString));
       throw new DirectoryException(ResultCode.OTHER, message);
     }
@@ -1070,7 +1070,7 @@
                              OWNER_EXECUTABLE;
         break;
       default:
-      Message message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
+      LocalizableMessage message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
           String.valueOf(modeString));
       throw new DirectoryException(ResultCode.OTHER, message);
     }
@@ -1102,7 +1102,7 @@
                              GROUP_EXECUTABLE;
         break;
       default:
-      Message message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
+      LocalizableMessage message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
           String.valueOf(modeString));
       throw new DirectoryException(ResultCode.OTHER, message);
     }
@@ -1134,7 +1134,7 @@
                              OTHER_EXECUTABLE;
         break;
       default:
-      Message message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
+      LocalizableMessage message = ERR_FILEPERM_INVALID_UNIX_MODE_STRING.get(
           String.valueOf(modeString));
       throw new DirectoryException(ResultCode.OTHER, message);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/HostPort.java b/opendj3-server-dev/src/server/org/opends/server/types/HostPort.java
index e413158..f6a2df7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/HostPort.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/HostPort.java
@@ -31,7 +31,7 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.loggers.debug.DebugTracer;
 
 import static org.opends.messages.ReplicationMessages.*;
@@ -314,7 +314,7 @@
     catch (UnknownHostException e)
     {
       // We could not resolve this host name, default to the provided host name
-      Message message = ERR_COULD_NOT_SOLVE_HOSTNAME.get(host);
+      LocalizableMessage message = ERR_COULD_NOT_SOLVE_HOSTNAME.get(host);
       logError(message);
       return host;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/IdentifiedException.java b/opendj3-server-dev/src/server/org/opends/server/types/IdentifiedException.java
index bb1d31b..a181bdc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/IdentifiedException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/IdentifiedException.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -66,7 +66,7 @@
    * @param  message  The message that explains the problem that
    *                  occurred.
    */
-  protected IdentifiedException(Message message)
+  protected IdentifiedException(LocalizableMessage message)
   {
     super(message);
   }
@@ -94,7 +94,7 @@
    * @param  cause    The underlying cause that triggered this
    *                  exception.
    */
-  protected IdentifiedException(Message message, Throwable cause)
+  protected IdentifiedException(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/InitializationException.java b/opendj3-server-dev/src/server/org/opends/server/types/InitializationException.java
index a1f3755..b5f6347 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/InitializationException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/InitializationException.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -62,7 +62,7 @@
    * @param  message    The message that explains the problem that
    *                    occurred.
    */
-  public InitializationException(Message message)
+  public InitializationException(LocalizableMessage message)
   {
     super(message);
   }
@@ -78,7 +78,7 @@
    * @param  cause      The exception that was caught to trigger this
    *                    exception.
    */
-  public InitializationException(Message message,
+  public InitializationException(LocalizableMessage message,
                                  Throwable cause)
   {
     super(message, cause);
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/LDAPException.java b/opendj3-server-dev/src/server/org/opends/server/types/LDAPException.java
index bc9eae9..0308d57 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/LDAPException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/LDAPException.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -61,7 +61,7 @@
   private final int resultCode;
 
   // The server-provided error message for this LDAP exception.
-  private final Message errorMessage;
+  private final LocalizableMessage errorMessage;
 
 
 
@@ -73,7 +73,7 @@
    * @param  message     The message that explains the problem that
    *                     occurred.
    */
-  public LDAPException(int resultCode, Message message)
+  public LDAPException(int resultCode, LocalizableMessage message)
   {
     super(message);
 
@@ -94,8 +94,8 @@
    * @param  message       The message that explains the problem that
    *                       occurred.
    */
-  public LDAPException(int resultCode, Message errorMessage,
-                       Message message)
+  public LDAPException(int resultCode, LocalizableMessage errorMessage,
+                       LocalizableMessage message)
   {
     super(message);
 
@@ -118,7 +118,7 @@
    * @param  cause       The exception that was caught to trigger this
    *                     exception.
    */
-  public LDAPException(int resultCode, Message message,
+  public LDAPException(int resultCode, LocalizableMessage message,
                        Throwable cause)
   {
     super(message, cause);
@@ -143,8 +143,8 @@
    * @param  cause         The exception that was caught to trigger
    *                       this exception.
    */
-  public LDAPException(int resultCode, Message errorMessage,
-                       Message message, Throwable cause)
+  public LDAPException(int resultCode, LocalizableMessage errorMessage,
+                       LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
 
@@ -169,8 +169,8 @@
    * @param  cause         The exception that was caught to trigger
    *                       this exception.
    */
-  public LDAPException(int resultCode, Message errorMessage,
-                       Message message, DN matchedDN,
+  public LDAPException(int resultCode, LocalizableMessage errorMessage,
+                       LocalizableMessage message, DN matchedDN,
                        Throwable cause)
   {
     super(message, cause);
@@ -200,7 +200,7 @@
    * @return  The server-provided error message for this exception, or
    *          {@code null} if none was given.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return errorMessage;
   }
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 c903c12..d507240 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
@@ -31,7 +31,7 @@
 import java.util.LinkedList;
 import java.util.StringTokenizer;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
 
@@ -337,13 +337,13 @@
     int schemeEndPos = url.indexOf("://");
     if (schemeEndPos < 0)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAPURL_NO_COLON_SLASH_SLASH.get(String.valueOf(url));
       throw new DirectoryException(INVALID_ATTRIBUTE_SYNTAX, message);
     }
     else if (schemeEndPos == 0)
     {
-      Message message = ERR_LDAPURL_NO_SCHEME.get(String.valueOf(url));
+      LocalizableMessage message = ERR_LDAPURL_NO_SCHEME.get(String.valueOf(url));
       throw new DirectoryException(INVALID_ATTRIBUTE_SYNTAX, message);
     }
     else
@@ -389,12 +389,12 @@
       }
       else if (colonPos == 0)
       {
-        Message message = ERR_LDAPURL_NO_HOST.get(String.valueOf(url));
+        LocalizableMessage message = ERR_LDAPURL_NO_HOST.get(String.valueOf(url));
         throw new DirectoryException(INVALID_ATTRIBUTE_SYNTAX, message);
       }
       else if (colonPos == (hostPort.length() - 1))
       {
-        Message message = ERR_LDAPURL_NO_PORT.get(String.valueOf(url));
+        LocalizableMessage message = ERR_LDAPURL_NO_PORT.get(String.valueOf(url));
         throw new DirectoryException(INVALID_ATTRIBUTE_SYNTAX, message);
       }
       else
@@ -407,13 +407,13 @@
         }
         catch (NumberFormatException e)
         {
-          Message message = ERR_LDAPURL_CANNOT_DECODE_PORT.get(
+          LocalizableMessage message = ERR_LDAPURL_CANNOT_DECODE_PORT.get(
               String.valueOf(url), hostPort.substring(colonPos+1));
           throw new DirectoryException(INVALID_ATTRIBUTE_SYNTAX, message);
         }
         catch (IllegalArgumentException e)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_LDAPURL_INVALID_PORT.get(String.valueOf(url), port);
           throw new DirectoryException(INVALID_ATTRIBUTE_SYNTAX, message);
         }
@@ -557,7 +557,7 @@
     }
     else
     {
-      Message message = ERR_LDAPURL_INVALID_SCOPE_STRING.get(
+      LocalizableMessage message = ERR_LDAPURL_INVALID_SCOPE_STRING.get(
           String.valueOf(url), String.valueOf(scopeString));
       throw new DirectoryException(
                      ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -681,7 +681,7 @@
         // a problem.
         if (i+2 > length)
         {
-          Message message = ERR_LDAPURL_PERCENT_TOO_CLOSE_TO_END.get(
+          LocalizableMessage message = ERR_LDAPURL_PERCENT_TOO_CLOSE_TO_END.get(
               String.valueOf(s), i);
           throw new DirectoryException(
                         ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
@@ -745,7 +745,7 @@
             b = (byte) 0xF0;
             break;
           default:
-            Message message = ERR_LDAPURL_INVALID_HEX_BYTE.get(
+            LocalizableMessage message = ERR_LDAPURL_INVALID_HEX_BYTE.get(
                 String.valueOf(s), i);
             throw new DirectoryException(
                            ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -808,7 +808,7 @@
             b |= 0x0F;
             break;
           default:
-            Message message = ERR_LDAPURL_INVALID_HEX_BYTE.get(
+            LocalizableMessage message = ERR_LDAPURL_INVALID_HEX_BYTE.get(
                 String.valueOf(s), i);
             throw new DirectoryException(
                            ResultCode.INVALID_ATTRIBUTE_SYNTAX,
@@ -835,7 +835,7 @@
       }
 
       // This should never happen.
-      Message message = ERR_LDAPURL_CANNOT_CREATE_UTF8_STRING.get(
+      LocalizableMessage message = ERR_LDAPURL_CANNOT_CREATE_UTF8_STRING.get(
           getExceptionMessage(e));
       throw new DirectoryException(
                      ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/LDIFExportConfig.java b/opendj3-server-dev/src/server/org/opends/server/types/LDIFExportConfig.java
index 8e124ec..6cfe251 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/LDIFExportConfig.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/LDIFExportConfig.java
@@ -37,7 +37,7 @@
 import java.util.Set;
 import java.util.zip.GZIPOutputStream;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.loggers.debug.DebugTracer;
 
 /**
@@ -255,7 +255,7 @@
         case FAIL:
           if (f.exists())
           {
-            Message message = ERR_LDIF_FILE_EXISTS.get(ldifFile);
+            LocalizableMessage message = ERR_LDIF_FILE_EXISTS.get(ldifFile);
             throw new IOException(message.toString());
           }
           else
@@ -279,7 +279,7 @@
           catch (Exception e)
           {
             // The file could not be created with the correct permissions.
-            Message message =
+            LocalizableMessage message =
               WARN_EXPORT_LDIF_SET_PERMISSION_FAILED.get(f.toString(),
                     stackTraceToSingleLineString(e));
             throw new IOException(message.toString());
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/MembershipException.java b/opendj3-server-dev/src/server/org/opends/server/types/MembershipException.java
index 9ba26c4..274a301 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/MembershipException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/MembershipException.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -71,7 +71,7 @@
    *                            continue iterating through the list of
    *                            group members.
    */
-  public MembershipException(Message errorMessage,
+  public MembershipException(LocalizableMessage errorMessage,
                              boolean continueIterating)
   {
     super(errorMessage);
@@ -92,7 +92,7 @@
    * @param  cause              The underlying cause for this
    *                            membership exception.
    */
-  public MembershipException(Message errorMessage,
+  public MembershipException(LocalizableMessage errorMessage,
                              boolean continueIterating,
                              Throwable cause)
   {
@@ -109,7 +109,7 @@
    *
    * @return  The error message for this membership exception.
    */
-  public Message getErrorMessage()
+  public LocalizableMessage getErrorMessage()
   {
     return getMessageObject();
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/NamedCharacterSet.java b/opendj3-server-dev/src/server/org/opends/server/types/NamedCharacterSet.java
index 17840a6..fe6d3aa 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/NamedCharacterSet.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/NamedCharacterSet.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -83,7 +83,7 @@
 
     if ((name == null) || (name.length() == 0))
     {
-      Message message = ERR_CHARSET_CONSTRUCTOR_NO_NAME.get();
+      LocalizableMessage message = ERR_CHARSET_CONSTRUCTOR_NO_NAME.get();
       throw new ConfigException(message);
     }
 
@@ -91,7 +91,7 @@
     {
       if (! isAlpha(name.charAt(i)))
       {
-        Message message = ERR_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR.
+        LocalizableMessage message = ERR_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR.
             get(String.valueOf(name.charAt(i)), i);
         throw new ConfigException(message);
       }
@@ -122,7 +122,7 @@
 
     if ((name == null) || (name.length() == 0))
     {
-      Message message = ERR_CHARSET_CONSTRUCTOR_NO_NAME.get();
+      LocalizableMessage message = ERR_CHARSET_CONSTRUCTOR_NO_NAME.get();
       throw new ConfigException(message);
     }
 
@@ -130,7 +130,7 @@
     {
       if (! isAlpha(name.charAt(i)))
       {
-        Message message = ERR_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR.
+        LocalizableMessage message = ERR_CHARSET_CONSTRUCTOR_INVALID_NAME_CHAR.
             get(String.valueOf(name.charAt(i)), i);
         throw new ConfigException(message);
       }
@@ -242,19 +242,19 @@
       int colonPos = value.indexOf(':');
       if (colonPos < 0)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CHARSET_NO_COLON.get(String.valueOf(value));
         throw new ConfigException(message);
       }
       else if (colonPos == 0)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CHARSET_NO_NAME.get(String.valueOf(value));
         throw new ConfigException(message);
       }
       else if (colonPos == (value.length() - 1))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_CHARSET_NO_CHARS.get(String.valueOf(value));
         throw new ConfigException(message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/OpenDsException.java b/opendj3-server-dev/src/server/org/opends/server/types/OpenDsException.java
index 9b71218..233e980 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/OpenDsException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/OpenDsException.java
@@ -27,7 +27,7 @@
 
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -47,8 +47,8 @@
    */
   private static final long serialVersionUID = 7310881401563732702L;
 
-  /** Message that explains the problem. */
-  Message message;
+  /** LocalizableMessage that explains the problem. */
+  LocalizableMessage message;
 
   /**
    * Creates a new identified exception.
@@ -77,7 +77,7 @@
    * @param  message  The message that explains the problem that
    *                  occurred.
    */
-  protected OpenDsException(Message message)
+  protected OpenDsException(LocalizableMessage message)
   {
     this(message, null);
   }
@@ -105,7 +105,7 @@
    * @param  cause    The underlying cause that triggered this
    *                  exception.
    */
-  protected OpenDsException(Message message, Throwable cause)
+  protected OpenDsException(LocalizableMessage message, Throwable cause)
   {
     super(message != null ? message.toString() :
             cause != null ? cause.getMessage() : null, cause);
@@ -121,9 +121,9 @@
   /**
    * Returns the message that explains the problem that occurred.
    *
-   * @return Message of the problem
+   * @return LocalizableMessage of the problem
    */
-  public Message getMessageObject() {
+  public LocalizableMessage getMessageObject() {
     return this.message;
   }
 }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/Operation.java b/opendj3-server-dev/src/server/org/opends/server/types/Operation.java
index 9253358..7b8253f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/Operation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/Operation.java
@@ -22,15 +22,15 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.types;
 
 import java.util.List;
 import java.util.Map;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.controls.ControlDecoder;
 
@@ -84,7 +84,7 @@
    */
   public abstract void disconnectClient(
           DisconnectReason disconnectReason,
-          boolean sendNotification, Message message
+          boolean sendNotification, LocalizableMessage message
   );
 
   /**
@@ -223,7 +223,7 @@
    *
    * @return  The error message for this operation.
    */
-  public abstract MessageBuilder getErrorMessage();
+  public abstract LocalizableMessageBuilder getErrorMessage();
 
   /**
    * Specifies the error message for this operation.  This method may
@@ -231,7 +231,7 @@
    *
    * @param  errorMessage  The error message for this operation.
    */
-  public abstract void setErrorMessage(MessageBuilder errorMessage);
+  public abstract void setErrorMessage(LocalizableMessageBuilder errorMessage);
 
   /**
    * Appends the provided message to the error message buffer.  If the
@@ -241,7 +241,7 @@
    *
    * @param  message  The message to append to the error message
    */
-  public abstract void appendErrorMessage(Message message);
+  public abstract void appendErrorMessage(LocalizableMessage message);
 
   /**
    * Retrieves the real, masked error message for this operation. Its contents
@@ -250,7 +250,7 @@
    *
    * @return The real, masked error message for this operation.
    */
-  MessageBuilder getMaskedErrorMessage();
+  LocalizableMessageBuilder getMaskedErrorMessage();
 
   /**
    * Specifies the real, masked error message for this operation. This method
@@ -259,7 +259,7 @@
    * @param maskedErrorMessage
    *          The real, masked error message for this operation.
    */
-  void setMaskedErrorMessage(MessageBuilder maskedErrorMessage);
+  void setMaskedErrorMessage(LocalizableMessageBuilder maskedErrorMessage);
 
   /**
    * Appends the provided message to the real, masked error message buffer. If
@@ -270,7 +270,7 @@
    * @param maskedMessage
    *          The message to append to the real, masked error message
    */
-  void appendMaskedErrorMessage(Message maskedMessage);
+  void appendMaskedErrorMessage(LocalizableMessage maskedMessage);
 
   /**
    * Returns an unmodifiable list containing the additional log items for this
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/RDN.java b/opendj3-server-dev/src/server/org/opends/server/types/RDN.java
index 5cef8dd..72d19fa 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/RDN.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/RDN.java
@@ -31,7 +31,7 @@
 
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.OrderingMatchingRule;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -560,14 +560,14 @@
     // A null or empty RDN is not acceptable.
     if (rdnString == null)
     {
-      Message message = ERR_RDN_DECODE_NULL.get();
+      LocalizableMessage message = ERR_RDN_DECODE_NULL.get();
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
     }
 
     int length = rdnString.length();
     if (length == 0)
     {
-      Message message = ERR_RDN_DECODE_NULL.get();
+      LocalizableMessage message = ERR_RDN_DECODE_NULL.get();
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
     }
 
@@ -583,7 +583,7 @@
       {
         // This means that the RDN was completely comprised of spaces,
         // which is not valid.
-        Message message = ERR_RDN_DECODE_NULL.get();
+        LocalizableMessage message = ERR_RDN_DECODE_NULL.get();
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
       }
       else
@@ -604,7 +604,7 @@
     // that would be invalid.
     if (pos >= length)
     {
-      Message message = ERR_RDN_END_WITH_ATTR_NAME.get(
+      LocalizableMessage message = ERR_RDN_END_WITH_ATTR_NAME.get(
           rdnString, attributeName.toString());
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
     }
@@ -619,7 +619,7 @@
       {
         // This means that we hit the end of the string before finding a '='.
         // This is illegal because there is no attribute-value separator.
-        Message message = ERR_RDN_END_WITH_ATTR_NAME.get(
+        LocalizableMessage message = ERR_RDN_END_WITH_ATTR_NAME.get(
             rdnString, attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
       }
@@ -638,7 +638,7 @@
     }
     else
     {
-      Message message = ERR_RDN_NO_EQUAL.get(
+      LocalizableMessage message = ERR_RDN_NO_EQUAL.get(
           rdnString, attributeName.toString(), c);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
     }
@@ -657,7 +657,7 @@
     {
       String        name      = attributeName.toString();
       String        lowerName = toLowerCase(name);
-      Message message = ERR_RDN_MISSING_ATTRIBUTE_VALUE.get(rdnString,
+      LocalizableMessage message = ERR_RDN_MISSING_ATTRIBUTE_VALUE.get(rdnString,
              lowerName);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
     }
@@ -707,7 +707,7 @@
     // allowed.  It would be legal for a DN but not an RDN.
     if ((c == ',') || (c == ';'))
     {
-      Message message = ERR_RDN_UNEXPECTED_COMMA.get(rdnString, pos);
+      LocalizableMessage message = ERR_RDN_UNEXPECTED_COMMA.get(rdnString, pos);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
     }
 
@@ -715,7 +715,7 @@
     // If the next character is anything but a plus sign, then it is illegal.
     if (c != '+')
     {
-      Message message = ERR_RDN_ILLEGAL_CHARACTER.get(rdnString, c, pos);
+      LocalizableMessage message = ERR_RDN_ILLEGAL_CHARACTER.get(rdnString, c, pos);
       throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
     }
 
@@ -743,7 +743,7 @@
       // Make sure we're not at the end of the RDN.
       if (pos >= length)
       {
-        Message message = ERR_RDN_END_WITH_ATTR_NAME.get(
+        LocalizableMessage message = ERR_RDN_END_WITH_ATTR_NAME.get(
             rdnString, attributeName.toString());
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
       }
@@ -758,7 +758,7 @@
         {
           // This means that we hit the end of the string before finding a '='.
           // This is illegal because there is no attribute-value separator.
-          Message message = ERR_RDN_END_WITH_ATTR_NAME.get(
+          LocalizableMessage message = ERR_RDN_END_WITH_ATTR_NAME.get(
               rdnString, attributeName.toString());
           throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
         }
@@ -776,7 +776,7 @@
       }
       else
       {
-        Message message = ERR_RDN_NO_EQUAL.get(
+        LocalizableMessage message = ERR_RDN_NO_EQUAL.get(
             rdnString, attributeName.toString(), c);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
       }
@@ -856,7 +856,7 @@
       // not allowed.  It would be legal for a DN but not an RDN.
       if ((c == ',') || (c == ';'))
       {
-        Message message = ERR_RDN_UNEXPECTED_COMMA.get(rdnString, pos);
+        LocalizableMessage message = ERR_RDN_UNEXPECTED_COMMA.get(rdnString, pos);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
       }
 
@@ -864,7 +864,7 @@
       // If the next character is anything but a plus sign, then it is illegal.
       if (c != '+')
       {
-        Message message = ERR_RDN_ILLEGAL_CHARACTER.get(rdnString, c, pos);
+        LocalizableMessage message = ERR_RDN_ILLEGAL_CHARACTER.get(rdnString, c, pos);
         throw new DirectoryException(ResultCode.INVALID_DN_SYNTAX, message);
       }
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/RawAttribute.java b/opendj3-server-dev/src/server/org/opends/server/types/RawAttribute.java
index 4552cb2..f8fa7e7 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/RawAttribute.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/RawAttribute.java
@@ -36,7 +36,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.protocols.asn1.ASN1Reader;
 import org.opends.server.protocols.asn1.ASN1Writer;
@@ -248,7 +248,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_ATTRIBUTE_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -266,7 +266,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_ATTRIBUTE_DECODE_TYPE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -290,7 +290,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_ATTRIBUTE_DECODE_VALUES.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -306,7 +306,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_ATTRIBUTE_DECODE_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/RawFilter.java b/opendj3-server-dev/src/server/org/opends/server/types/RawFilter.java
index c33832b..c37d902 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/RawFilter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/RawFilter.java
@@ -27,7 +27,7 @@
 package org.opends.server.types;
 
 import org.forgerock.opendj.ldap.ByteString;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -552,7 +552,7 @@
     }
     catch(Exception e)
     {
-      Message message = ERR_LDAP_FILTER_DECODE_NULL.get();
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_NULL.get();
       throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
@@ -581,7 +581,7 @@
         return decodeExtensibleMatchFilter(reader);
 
       default:
-        Message message =
+        LocalizableMessage message =
             ERR_LDAP_FILTER_DECODE_INVALID_TYPE.get(type);
         throw new LDAPException(PROTOCOL_ERROR, message);
     }
@@ -610,7 +610,7 @@
     }
     catch(Exception e)
     {
-      Message message = ERR_LDAP_FILTER_DECODE_NULL.get();
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_NULL.get();
       throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
@@ -657,7 +657,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_DECODE_COMPOUND_COMPONENTS.
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_COMPOUND_COMPONENTS.
           get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -699,7 +699,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_FILTER_DECODE_NOT_COMPONENT.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -733,7 +733,7 @@
     }
     catch(Exception e)
     {
-      Message message = ERR_LDAP_FILTER_DECODE_NULL.get();
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_NULL.get();
       throw new LDAPException(PROTOCOL_ERROR, message);
     }
 
@@ -773,7 +773,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_FILTER_DECODE_TV_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -790,7 +790,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_FILTER_DECODE_TV_TYPE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -808,7 +808,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_FILTER_DECODE_TV_VALUE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -824,7 +824,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_FILTER_DECODE_TV_SEQUENCE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -861,7 +861,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_DECODE_SUBSTRING_SEQUENCE.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_SUBSTRING_SEQUENCE.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -879,7 +879,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_DECODE_SUBSTRING_TYPE.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_SUBSTRING_TYPE.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -895,7 +895,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_DECODE_SUBSTRING_ELEMENTS.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_SUBSTRING_ELEMENTS.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -908,7 +908,7 @@
     }
     catch (Exception e)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_FILTER_DECODE_SUBSTRING_NO_SUBELEMENTS.get();
       throw new LDAPException(PROTOCOL_ERROR, message);
     }
@@ -946,7 +946,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_DECODE_SUBSTRING_VALUES.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_SUBSTRING_VALUES.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -962,7 +962,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_DECODE_SUBSTRING_ELEMENTS.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_SUBSTRING_ELEMENTS.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -978,7 +978,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_DECODE_SUBSTRING_SEQUENCE.get(
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_SUBSTRING_SEQUENCE.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1017,7 +1017,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_FILTER_DECODE_PRESENCE_TYPE.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1054,7 +1054,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_DECODE_EXTENSIBLE_SEQUENCE.
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_EXTENSIBLE_SEQUENCE.
           get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1089,7 +1089,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_DECODE_EXTENSIBLE_ELEMENTS.
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_EXTENSIBLE_ELEMENTS.
           get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -1105,7 +1105,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_FILTER_DECODE_EXTENSIBLE_SEQUENCE.
+      LocalizableMessage message = ERR_LDAP_FILTER_DECODE_EXTENSIBLE_SEQUENCE.
           get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/RawModification.java b/opendj3-server-dev/src/server/org/opends/server/types/RawModification.java
index f136e02..de73c42 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/RawModification.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/RawModification.java
@@ -35,7 +35,7 @@
 import java.io.IOException;
 import java.util.ArrayList;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.protocols.asn1.ASN1Reader;
 import org.opends.server.protocols.asn1.ASN1Writer;
@@ -259,7 +259,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_MODIFICATION_DECODE_SEQUENCE.get(
+      LocalizableMessage message = ERR_LDAP_MODIFICATION_DECODE_SEQUENCE.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -284,7 +284,7 @@
           modificationType = ModificationType.INCREMENT;
           break;
         default:
-          Message message =
+          LocalizableMessage message =
               ERR_LDAP_MODIFICATION_DECODE_INVALID_MOD_TYPE.
                 get(type);
           throw new LDAPException(PROTOCOL_ERROR, message);
@@ -301,7 +301,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_MODIFICATION_DECODE_MOD_TYPE.get(
+      LocalizableMessage message = ERR_LDAP_MODIFICATION_DECODE_MOD_TYPE.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -319,7 +319,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message =
+      LocalizableMessage message =
           ERR_LDAP_MODIFICATION_DECODE_ATTR.get(String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
@@ -335,7 +335,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_LDAP_MODIFICATION_DECODE_SEQUENCE.get(
+      LocalizableMessage message = ERR_LDAP_MODIFICATION_DECODE_SEQUENCE.get(
           String.valueOf(e));
       throw new LDAPException(PROTOCOL_ERROR, message, e);
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/ResultCode.java b/opendj3-server-dev/src/server/org/opends/server/types/ResultCode.java
index 4dc0242..a9adf7a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/ResultCode.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/ResultCode.java
@@ -26,7 +26,7 @@
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import org.opends.server.protocols.ldap.LDAPResultCode;
@@ -694,7 +694,7 @@
   private int intValue;
 
   // The short human-readable name for this result code.
-  private Message resultCodeName;
+  private LocalizableMessage resultCodeName;
 
 
 
@@ -705,7 +705,7 @@
    * @param  intValue      The integer value for this result code.
    * @param  name          The name for this result code.
    */
-  private ResultCode(int intValue, Message name)
+  private ResultCode(int intValue, LocalizableMessage name)
   {
     Reject.ifNull(name);
     this.intValue       = intValue;
@@ -884,7 +884,7 @@
    *
    * @return  The short human-readable name for this result code.
    */
-  public Message getResultCodeName()
+  public LocalizableMessage getResultCodeName()
   {
     return resultCodeName;
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/Schema.java b/opendj3-server-dev/src/server/org/opends/server/types/Schema.java
index da85046..e27bd36 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/Schema.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/Schema.java
@@ -27,6 +27,7 @@
 package org.opends.server.types;
 
 import org.forgerock.opendj.ldap.ByteString;
+
 import java.io.*;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -39,7 +40,7 @@
 import java.util.TreeSet;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.ApproximateMatchingRule;
 import org.opends.server.api.AttributeSyntax;
 import org.opends.server.api.EqualityMatchingRule;
@@ -51,6 +52,7 @@
 import org.opends.server.core.SchemaConfigManager;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.schema.CaseIgnoreEqualityMatchingRule;
+import org.opends.server.util.StaticUtils;
 
 import static org.opends.messages.BackendMessages.*;
 import static org.opends.messages.CoreMessages.*;
@@ -399,7 +401,7 @@
         {
           AttributeType conflictingType = attributeTypes.get(oid);
 
-          Message message = ERR_SCHEMA_CONFLICTING_ATTRIBUTE_OID.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_ATTRIBUTE_OID.
               get(attributeType.getNameOrOID(), oid,
                   conflictingType.getNameOrOID());
           throw new DirectoryException(
@@ -412,7 +414,7 @@
           {
             AttributeType conflictingType = attributeTypes.get(name);
 
-            Message message = ERR_SCHEMA_CONFLICTING_ATTRIBUTE_NAME.
+            LocalizableMessage message = ERR_SCHEMA_CONFLICTING_ATTRIBUTE_NAME.
                 get(attributeType.getNameOrOID(), name,
                     conflictingType.getNameOrOID());
             throw new DirectoryException(
@@ -697,7 +699,7 @@
         {
           ObjectClass conflictingClass = objectClasses.get(oid);
 
-          Message message = ERR_SCHEMA_CONFLICTING_OBJECTCLASS_OID.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_OBJECTCLASS_OID.
               get(objectClass.getNameOrOID(), oid,
                   conflictingClass.getNameOrOID());
           throw new DirectoryException(
@@ -710,7 +712,7 @@
           {
             ObjectClass conflictingClass = objectClasses.get(name);
 
-            Message message = ERR_SCHEMA_CONFLICTING_OBJECTCLASS_NAME.
+            LocalizableMessage message = ERR_SCHEMA_CONFLICTING_OBJECTCLASS_NAME.
                 get(objectClass.getNameOrOID(), name,
                     conflictingClass.getNameOrOID());
             throw new DirectoryException(
@@ -887,7 +889,7 @@
         {
           AttributeSyntax<?> conflictingSyntax = syntaxes.get(oid);
 
-          Message message = ERR_SCHEMA_CONFLICTING_SYNTAX_OID.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_SYNTAX_OID.
               get(syntax.getSyntaxName(), oid,
                   conflictingSyntax.getSyntaxName());
           throw new DirectoryException(
@@ -1037,7 +1039,7 @@
       {
         if (ldapSyntaxDescriptions.containsKey(oid))
         {
-           Message message =
+           LocalizableMessage message =
             ERR_SCHEMA_MODIFY_MULTIPLE_CONFLICTS_FOR_ADD_LDAP_SYNTAX.
               get(oid);
           throw new DirectoryException(
@@ -1210,7 +1212,7 @@
           {
             MatchingRule conflictingRule = matchingRules.get(oid);
 
-            Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+            LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_OID.
                 get(matchingRule.getNameOrOID(), oid,
                     conflictingRule.getNameOrOID());
             throw new DirectoryException(
@@ -1227,7 +1229,7 @@
                 MatchingRule conflictingRule =
                         matchingRules.get(name);
 
-                Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+                LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_NAME.
                     get(matchingRule.getOID(), name,
                         conflictingRule.getOID());
                 throw new DirectoryException(
@@ -1403,7 +1405,7 @@
         {
           MatchingRule conflictingRule = matchingRules.get(oid);
 
-          Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_OID.
               get(matchingRule.getNameOrOID(), oid,
                   conflictingRule.getNameOrOID());
           throw new DirectoryException(
@@ -1419,7 +1421,7 @@
           {
             MatchingRule conflictingRule = matchingRules.get(name);
 
-            Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+            LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_NAME.
                 get(matchingRule.getOID(), name,
                     conflictingRule.getOID());
             throw new DirectoryException(
@@ -1575,7 +1577,7 @@
         {
           MatchingRule conflictingRule = matchingRules.get(oid);
 
-          Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_OID.
               get(matchingRule.getNameOrOID(), oid,
                   conflictingRule.getNameOrOID());
           throw new DirectoryException(
@@ -1592,7 +1594,7 @@
                 MatchingRule conflictingRule =
                         matchingRules.get(name);
 
-                Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+                LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_NAME.
                     get(matchingRule.getOID(), name,
                         conflictingRule.getOID());
                 throw new DirectoryException(
@@ -1750,7 +1752,7 @@
         {
           MatchingRule conflictingRule = matchingRules.get(oid);
 
-          Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_OID.
               get(matchingRule.getNameOrOID(), oid,
                   conflictingRule.getNameOrOID());
           throw new DirectoryException(
@@ -1766,7 +1768,7 @@
             {
               MatchingRule conflictingRule = matchingRules.get(name);
 
-              Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+              LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_NAME.
                   get(matchingRule.getOID(), name,
                       conflictingRule.getOID());
               throw new DirectoryException(
@@ -1923,7 +1925,7 @@
         {
           MatchingRule conflictingRule = matchingRules.get(oid);
 
-          Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_OID.
               get(matchingRule.getNameOrOID(), oid,
                   conflictingRule.getNameOrOID());
           throw new DirectoryException(
@@ -1939,7 +1941,7 @@
             {
               MatchingRule conflictingRule = matchingRules.get(name);
 
-              Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+              LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_NAME.
                   get(matchingRule.getOID(), name,
                       conflictingRule.getOID());
               throw new DirectoryException(
@@ -2103,7 +2105,7 @@
         {
           MatchingRule conflictingRule = matchingRules.get(oid);
 
-          Message message = ERR_SCHEMA_CONFLICTING_MR_OID.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_OID.
               get(matchingRule.getNameOrOID(), oid,
                   conflictingRule.getNameOrOID());
           throw new DirectoryException(
@@ -2119,7 +2121,7 @@
           {
             MatchingRule conflictingRule = matchingRules.get(name);
 
-            Message message = ERR_SCHEMA_CONFLICTING_MR_NAME.
+            LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MR_NAME.
                 get(matchingRule.getOID(), name,
                     conflictingRule.getOID());
             throw new DirectoryException(
@@ -2303,7 +2305,7 @@
           MatchingRuleUse conflictingUse =
                                matchingRuleUses.get(matchingRule);
 
-          Message message = ERR_SCHEMA_CONFLICTING_MATCHING_RULE_USE.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_MATCHING_RULE_USE.
               get(matchingRuleUse.getName(),
                   matchingRule.getNameOrOID(),
                   conflictingUse.getName());
@@ -2464,7 +2466,7 @@
           DITContentRule conflictingRule =
                               ditContentRules.get(objectClass);
 
-          Message message = ERR_SCHEMA_CONFLICTING_DIT_CONTENT_RULE.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_DIT_CONTENT_RULE.
               get(ditContentRule.getName(),
                   objectClass.getNameOrOID(),
                   conflictingRule.getName());
@@ -2678,7 +2680,7 @@
           DITStructureRule conflictingRule =
                ditStructureRulesByNameForm.get(nameForm);
 
-          Message message =
+          LocalizableMessage message =
               ERR_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_NAME_FORM.
                 get(ditStructureRule.getNameOrRuleID(),
                     nameForm.getNameOrOID(),
@@ -2692,7 +2694,7 @@
           DITStructureRule conflictingRule =
                ditStructureRulesByID.get(ruleID);
 
-          Message message =
+          LocalizableMessage message =
               ERR_SCHEMA_CONFLICTING_DIT_STRUCTURE_RULE_ID.
                 get(ditStructureRule.getNameOrRuleID(), ruleID,
                     conflictingRule.getNameOrRuleID());
@@ -2906,7 +2908,7 @@
           {
             if(nf.equals(nameForm))
             {
-              Message message = ERR_SCHEMA_CONFLICTING_NAME_FORM_OC.
+              LocalizableMessage message = ERR_SCHEMA_CONFLICTING_NAME_FORM_OC.
                 get(nameForm.getNameOrOID(),
                     objectClass.getNameOrOID(),
                     nf.getNameOrOID());
@@ -2921,7 +2923,7 @@
         {
           NameForm conflictingNameForm = nameFormsByName.get(oid);
 
-          Message message = ERR_SCHEMA_CONFLICTING_NAME_FORM_OID.
+          LocalizableMessage message = ERR_SCHEMA_CONFLICTING_NAME_FORM_OID.
               get(nameForm.getNameOrOID(), oid,
                   conflictingNameForm.getNameOrOID());
           throw new DirectoryException(
@@ -2934,7 +2936,7 @@
           {
             NameForm conflictingNameForm = nameFormsByName.get(name);
 
-            Message message = ERR_SCHEMA_CONFLICTING_NAME_FORM_NAME.
+            LocalizableMessage message = ERR_SCHEMA_CONFLICTING_NAME_FORM_NAME.
                 get(nameForm.getNameOrOID(), oid,
                     conflictingNameForm.getNameOrOID());
             throw new DirectoryException(
@@ -3140,10 +3142,10 @@
       // If we got an error as a result of a circular reference, then
       // we want to make sure that the schema element we call out is
       // the one that is at the root of the problem.
-      if (de.getMessageObject().getDescriptor().equals(
+      if (StaticUtils.hasDescriptor(de.getMessageObject(),
           ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE))
       {
-        Message message = ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE.
+        LocalizableMessage message = ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE.
             get(element.getDefinition());
         throw new DirectoryException(de.getResultCode(), message,
                                      de);
@@ -3178,7 +3180,7 @@
     {
       // FIXME -- Is this an appropriate maximum depth for detecting
       // circular references?
-      Message message = ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE.get(
+      LocalizableMessage message = ERR_SCHEMA_CIRCULAR_DEPENDENCY_REFERENCE.get(
           element.getDefinition());
       throw new DirectoryException(ResultCode.UNWILLING_TO_PERFORM,
                                    message);
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 2cbdaa5..d9986b7 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
@@ -29,7 +29,7 @@
 
 import org.forgerock.opendj.ldap.ByteString;
 import org.forgerock.opendj.ldap.ByteStringBuilder;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import java.util.ArrayList;
@@ -541,7 +541,7 @@
   {
     if ((attributeType == null) && (matchingRuleID == null))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_CREATE_EXTENSIBLE_MATCH_NO_AT_OR_MR.get();
       throw new DirectoryException(
               ResultCode.PROTOCOL_ERROR, message);
@@ -586,7 +586,7 @@
   {
     if ((attributeType == null) && (matchingRuleID == null))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_CREATE_EXTENSIBLE_MATCH_NO_AT_OR_MR.get();
       throw new DirectoryException(
               ResultCode.PROTOCOL_ERROR, message);
@@ -618,7 +618,7 @@
   {
     if (filterString == null)
     {
-      Message message = ERR_SEARCH_FILTER_NULL.get();
+      LocalizableMessage message = ERR_SEARCH_FILTER_NULL.get();
       throw new DirectoryException(
               ResultCode.PROTOCOL_ERROR, message);
     }
@@ -645,7 +645,7 @@
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
 
-      Message message = ERR_SEARCH_FILTER_UNCAUGHT_EXCEPTION.get(
+      LocalizableMessage message = ERR_SEARCH_FILTER_UNCAUGHT_EXCEPTION.get(
           filterString, String.valueOf(e));
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message,
                                    e);
@@ -682,7 +682,7 @@
     int length = endPos - startPos;
     if (length <= 0)
     {
-      Message message = ERR_SEARCH_FILTER_NULL.get();
+      LocalizableMessage message = ERR_SEARCH_FILTER_NULL.get();
       throw new DirectoryException(
               ResultCode.PROTOCOL_ERROR, message);
     }
@@ -699,7 +699,7 @@
       }
       else
       {
-        Message message = ERR_SEARCH_FILTER_MISMATCHED_PARENTHESES.
+        LocalizableMessage message = ERR_SEARCH_FILTER_MISMATCHED_PARENTHESES.
             get(filterString, startPos, endPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
                                      message);
@@ -742,7 +742,7 @@
 
     if (equalPos <= startPos)
     {
-      Message message = ERR_SEARCH_FILTER_NO_EQUAL_SIGN.get(
+      LocalizableMessage message = ERR_SEARCH_FILTER_NO_EQUAL_SIGN.get(
           filterString, startPos, endPos);
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
                                    message);
@@ -870,7 +870,7 @@
             // comprise the binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                     get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -934,7 +934,7 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                Message message =
+                LocalizableMessage message =
                     ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                       get(filterString, equalPos+i+1);
                 throw new DirectoryException(
@@ -997,7 +997,7 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                Message message =
+                LocalizableMessage message =
                     ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                       get(filterString, equalPos+i+1);
                 throw new DirectoryException(
@@ -1064,7 +1064,7 @@
     {
       if (filterType == FilterType.NOT)
       {
-        Message message = ERR_SEARCH_FILTER_NOT_EXACTLY_ONE.get(
+        LocalizableMessage message = ERR_SEARCH_FILTER_NOT_EXACTLY_ONE.get(
             filterString, startPos, endPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
                                      message);
@@ -1084,7 +1084,7 @@
     if ((filterString.charAt(startPos) != '(') ||
         (filterString.charAt(endPos-1) != ')'))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_COMPOUND_MISSING_PARENTHESES.
             get(filterString, startPos, endPos);
       throw new DirectoryException(
@@ -1121,7 +1121,7 @@
         }
         else if (pendingOpens < 0)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_SEARCH_FILTER_NO_CORRESPONDING_OPEN_PARENTHESIS.
                 get(filterString, i);
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -1130,7 +1130,7 @@
       }
       else if (pendingOpens <= 0)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_SEARCH_FILTER_COMPOUND_MISSING_PARENTHESES.
               get(filterString, startPos, endPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -1144,7 +1144,7 @@
     // empty.
     if (pendingOpens != 0)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_NO_CORRESPONDING_CLOSE_PARENTHESIS.
             get(filterString, openPos);
       throw new DirectoryException(
@@ -1157,7 +1157,7 @@
     {
       if (filterComponents.size() != 1)
       {
-        Message message = ERR_SEARCH_FILTER_NOT_EXACTLY_ONE.get(
+        LocalizableMessage message = ERR_SEARCH_FILTER_NOT_EXACTLY_ONE.get(
             filterString, startPos, endPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
                                      message);
@@ -1229,7 +1229,7 @@
     // If there were no asterisks, then this isn't a substring filter.
     if (asteriskPositions.isEmpty())
     {
-      Message message = ERR_SEARCH_FILTER_SUBSTRING_NO_ASTERISKS.get(
+      LocalizableMessage message = ERR_SEARCH_FILTER_SUBSTRING_NO_ASTERISKS.get(
           filterString, equalPos+1, endPos);
       throw new DirectoryException(
               ResultCode.PROTOCOL_ERROR, message);
@@ -1263,7 +1263,7 @@
             // comprise the binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                     get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -1327,7 +1327,7 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                Message message =
+                LocalizableMessage message =
                     ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                       get(filterString, equalPos+i+1);
                 throw new DirectoryException(
@@ -1390,7 +1390,7 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                Message message =
+                LocalizableMessage message =
                     ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                       get(filterString, equalPos+i+1);
                 throw new DirectoryException(
@@ -1432,7 +1432,7 @@
             // comprise the binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                     get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -1496,7 +1496,7 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                Message message =
+                LocalizableMessage message =
                     ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                       get(filterString, equalPos+i+1);
                 throw new DirectoryException(
@@ -1559,7 +1559,7 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                Message message =
+                LocalizableMessage message =
                     ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                       get(filterString, equalPos+i+1);
                 throw new DirectoryException(
@@ -1609,7 +1609,7 @@
             // comprise the binary value.
             if ((i + 2) >= valueBytes.length)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                     get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -1673,7 +1673,7 @@
                 byteValue = (byte) 0xF0;
                 break;
               default:
-                Message message =
+                LocalizableMessage message =
                     ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                       get(filterString, equalPos+i+1);
                 throw new DirectoryException(
@@ -1736,7 +1736,7 @@
                 byteValue |= (byte) 0x0F;
                 break;
               default:
-                Message message =
+                LocalizableMessage message =
                     ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                       get(filterString, equalPos+i+1);
                 throw new DirectoryException(
@@ -1826,7 +1826,7 @@
       int colonPos = filterString.indexOf(':',startPos);
       if (colonPos < 0)
       {
-        Message message = ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_COLON.
+        LocalizableMessage message = ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_COLON.
             get(filterString, startPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
                                      message);
@@ -1924,7 +1924,7 @@
           // comprise the binary value.
           if ((i + 2) >= valueBytes.length)
           {
-            Message message = ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
+            LocalizableMessage message = ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                 get(filterString, equalPos+i+1);
             throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
                                          message);
@@ -1987,7 +1987,7 @@
               byteValue = (byte) 0xF0;
               break;
             default:
-              Message message =
+              LocalizableMessage message =
                   ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                     get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -2050,7 +2050,7 @@
               byteValue |= (byte) 0x0F;
               break;
             default:
-              Message message =
+              LocalizableMessage message =
                   ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.
                     get(filterString, equalPos+i+1);
               throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -2080,7 +2080,7 @@
     {
       if (matchingRuleID == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_AD_OR_MR.
               get(filterString, startPos);
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -2092,7 +2092,7 @@
                                toLowerCase(matchingRuleID));
         if (mr == null)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_SUCH_MR.
                 get(filterString, startPos, matchingRuleID);
           throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -2272,7 +2272,7 @@
       case UNDEFINED:
         return false;
       default:
-        Message message = ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+        LocalizableMessage message = ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
             get(String.valueOf(entry.getName()), toString(),
                 String.valueOf(result));
         logError(message);
@@ -2342,7 +2342,7 @@
 
       default:
         // This is an invalid filter type.
-        Message message = ERR_SEARCH_FILTER_INVALID_FILTER_TYPE.
+        LocalizableMessage message = ERR_SEARCH_FILTER_INVALID_FILTER_TYPE.
             get(String.valueOf(entry.getName()), toString(),
                 filterType.toString());
         throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -2379,7 +2379,7 @@
     if (filterComponents == null)
     {
       // The set of subcomponents was null.  This is not allowed.
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_COMPOUND_COMPONENTS_NULL.
             get(String.valueOf(entry.getName()),
                 String.valueOf(completeFilter),
@@ -2408,7 +2408,7 @@
       // nesting too deep.
       if (depth >= MAX_NESTED_FILTER_DEPTH)
       {
-        Message message = ERR_SEARCH_FILTER_NESTED_TOO_DEEP.
+        LocalizableMessage message = ERR_SEARCH_FILTER_NESTED_TOO_DEEP.
             get(String.valueOf(entry.getName()),
                 String.valueOf(completeFilter));
         throw new DirectoryException(
@@ -2443,7 +2443,7 @@
             }
             return result;
           default:
-            Message message =
+            LocalizableMessage message =
                 ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
                   get(String.valueOf(entry.getName()),
                       String.valueOf(completeFilter),
@@ -2496,7 +2496,7 @@
     if (filterComponents == null)
     {
       // The set of subcomponents was null.  This is not allowed.
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_COMPOUND_COMPONENTS_NULL.
             get(String.valueOf(entry.getName()),
                 String.valueOf(completeFilter),
@@ -2525,7 +2525,7 @@
       // nesting too deep.
       if (depth >= MAX_NESTED_FILTER_DEPTH)
       {
-        Message message = ERR_SEARCH_FILTER_NESTED_TOO_DEEP.
+        LocalizableMessage message = ERR_SEARCH_FILTER_NESTED_TOO_DEEP.
             get(String.valueOf(entry.getName()),
                 String.valueOf(completeFilter));
         throw new DirectoryException(
@@ -2561,7 +2561,7 @@
             result = ConditionResult.UNDEFINED;
             break;
           default:
-            Message message =
+            LocalizableMessage message =
                 ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
                   get(String.valueOf(entry.getName()),
                       String.valueOf(completeFilter),
@@ -2614,7 +2614,7 @@
     if (notComponent == null)
     {
       // The NOT subcomponent was null.  This is not allowed.
-      Message message = ERR_SEARCH_FILTER_NOT_COMPONENT_NULL.
+      LocalizableMessage message = ERR_SEARCH_FILTER_NOT_COMPONENT_NULL.
           get(String.valueOf(entry.getName()),
               String.valueOf(completeFilter));
       throw new DirectoryException(
@@ -2628,7 +2628,7 @@
       // that we don't go too deep.
       if (depth >= MAX_NESTED_FILTER_DEPTH)
       {
-        Message message = ERR_SEARCH_FILTER_NESTED_TOO_DEEP.
+        LocalizableMessage message = ERR_SEARCH_FILTER_NESTED_TOO_DEEP.
             get(String.valueOf(entry.getName()),
                 String.valueOf(completeFilter));
         throw new DirectoryException(
@@ -2669,7 +2669,7 @@
           }
           return ConditionResult.UNDEFINED;
         default:
-          Message message = ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+          LocalizableMessage message = ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
               get(String.valueOf(entry.getName()),
                   String.valueOf(completeFilter),
                   String.valueOf(result));
@@ -2706,7 +2706,7 @@
     // Make sure that an attribute type has been defined.
     if (attributeType == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_EQUALITY_NO_ATTRIBUTE_TYPE.
             get(String.valueOf(entry.getName()), toString());
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -2716,7 +2716,7 @@
     // Make sure that an assertion value has been defined.
     if (assertionValue == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_EQUALITY_NO_ASSERTION_VALUE.
             get(String.valueOf(entry.getName()), toString(),
                 attributeType.getNameOrOID());
@@ -2833,7 +2833,7 @@
     // Make sure that an attribute type has been defined.
     if (attributeType == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_SUBSTRING_NO_ATTRIBUTE_TYPE.
             get(String.valueOf(entry.getName()), toString());
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -2846,7 +2846,7 @@
         (subFinalElement == null) &&
         ((subAnyElements == null) || subAnyElements.isEmpty()))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_SUBSTRING_NO_SUBSTRING_COMPONENTS.
             get(String.valueOf(entry.getName()), toString(),
                 attributeType.getNameOrOID());
@@ -2941,7 +2941,7 @@
     // Make sure that an attribute type has been defined.
     if (attributeType == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_GREATER_OR_EQUAL_NO_ATTRIBUTE_TYPE.
             get(String.valueOf(entry.getName()), toString());
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -2951,7 +2951,7 @@
     // Make sure that an assertion value has been defined.
     if (assertionValue == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_GREATER_OR_EQUAL_NO_VALUE.
             get(String.valueOf(entry.getName()), toString(),
                 attributeType.getNameOrOID());
@@ -3044,7 +3044,7 @@
     // Make sure that an attribute type has been defined.
     if (attributeType == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_LESS_OR_EQUAL_NO_ATTRIBUTE_TYPE.
             get(String.valueOf(entry.getName()), toString());
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -3054,7 +3054,7 @@
     // Make sure that an assertion value has been defined.
     if (assertionValue == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_LESS_OR_EQUAL_NO_ASSERTION_VALUE.
             get(String.valueOf(entry.getName()), toString(),
                 attributeType.getNameOrOID());
@@ -3146,7 +3146,7 @@
     // Make sure that an attribute type has been defined.
     if (attributeType == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_PRESENCE_NO_ATTRIBUTE_TYPE.
             get(String.valueOf(entry.getName()), toString());
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -3206,7 +3206,7 @@
     // Make sure that an attribute type has been defined.
     if (attributeType == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_APPROXIMATE_NO_ATTRIBUTE_TYPE.
             get(String.valueOf(entry.getName()), toString());
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR,
@@ -3216,7 +3216,7 @@
     // Make sure that an assertion value has been defined.
     if (assertionValue == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_APPROXIMATE_NO_ASSERTION_VALUE.
             get(String.valueOf(entry.getName()), toString(),
                 attributeType.getNameOrOID());
@@ -3312,7 +3312,7 @@
     // determination.
     if (assertionValue == null)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_ASSERTION_VALUE.
             get(String.valueOf(entry.getName()),
                 String.valueOf(completeFilter));
@@ -3344,7 +3344,7 @@
     {
       if (attributeType == null)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_SEARCH_FILTER_EXTENSIBLE_MATCH_NO_RULE_OR_TYPE.
               get(String.valueOf(entry.getName()),
                   String.valueOf(completeFilter));
@@ -3444,7 +3444,7 @@
                   result = ConditionResult.UNDEFINED;
                   break;
                 default:
-                  Message message =
+                  LocalizableMessage message =
                       ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
                         get(String.valueOf(entry.getName()),
                             String.valueOf(completeFilter),
@@ -3492,7 +3492,7 @@
                   result = ConditionResult.UNDEFINED;
                   break;
                 default:
-                  Message message =
+                  LocalizableMessage message =
                       ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
                         get(String.valueOf(entry.getName()),
                             String.valueOf(completeFilter),
@@ -3535,7 +3535,7 @@
               result = ConditionResult.UNDEFINED;
               break;
             default:
-              Message message = ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
+              LocalizableMessage message = ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
                   get(String.valueOf(entry.getName()),
                       String.valueOf(completeFilter),
                       String.valueOf(r));
@@ -3582,7 +3582,7 @@
                   result = ConditionResult.UNDEFINED;
                   break;
                 default:
-                  Message message =
+                  LocalizableMessage message =
                       ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
                         get(String.valueOf(entry.getName()),
                             String.valueOf(completeFilter),
@@ -3643,7 +3643,7 @@
                   result = ConditionResult.UNDEFINED;
                   break;
                 default:
-                  Message message =
+                  LocalizableMessage message =
                       ERR_SEARCH_FILTER_INVALID_RESULT_TYPE.
                         get(String.valueOf(entry.getName()),
                             String.valueOf(completeFilter),
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 ec59675..d9b11d4 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
@@ -27,7 +27,7 @@
 
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Set;
@@ -233,7 +233,7 @@
     // that means all parsers have failed and it is ivalid syntax.
     if (!isValidSpec)
     {
-      Message message =
+      LocalizableMessage message =
         ERR_ATTR_SYNTAX_SUBTREE_SPECIFICATION_INVALID.get(
           specString);
       throw new DirectoryException(
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 ef3a1df..7ac4e18 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
@@ -31,7 +31,7 @@
 import java.util.*;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.util.StaticUtils;
 
@@ -1152,7 +1152,7 @@
     }
     else
     {
-      final Message message =
+      final LocalizableMessage message =
         ERR_ATTR_SYNTAX_RFC3672_SUBTREE_SPECIFICATION_INVALID.get(s);
       throw new DirectoryException(
           ResultCode.INVALID_ATTRIBUTE_SYNTAX, message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/SynchronizationProviderResult.java b/opendj3-server-dev/src/server/org/opends/server/types/SynchronizationProviderResult.java
index 66774a0..7e2f880 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/SynchronizationProviderResult.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/SynchronizationProviderResult.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.List;
 
@@ -58,7 +59,7 @@
    * @return An error message explaining why processing should
    * stop or <code>null</code> if none is provided.
    */
-  public Message getErrorMessage();
+  public LocalizableMessage getErrorMessage();
 
   /**
    * Retrieves the result code for the operation
@@ -128,7 +129,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return null;
     }
@@ -149,7 +150,7 @@
     // The result code for this result.
     private final ResultCode resultCode;
 
-    private final Message errorMessage;
+    private final LocalizableMessage errorMessage;
 
     /**
      * Contrust a new stop processing synchronization provider
@@ -161,7 +162,7 @@
      * @param matchedDN The matched DN for this result.
      * @param referralURLs The set of referral URLs for this result.
      */
-    public StopProcessing(ResultCode resultCode, Message errorMessage,
+    public StopProcessing(ResultCode resultCode, LocalizableMessage errorMessage,
                           DN matchedDN, List<String> referralURLs)
     {
       this.errorMessage = errorMessage;
@@ -178,7 +179,7 @@
      * @param errorMessage An message explaining why processing
      * should stop.
      */
-    public StopProcessing(ResultCode resultCode, Message errorMessage)
+    public StopProcessing(ResultCode resultCode, LocalizableMessage errorMessage)
     {
       this.errorMessage = errorMessage;
       this.resultCode = resultCode;
@@ -221,7 +222,7 @@
     /**
      * {@inheritDoc}
      */
-    public Message getErrorMessage()
+    public LocalizableMessage getErrorMessage()
     {
       return errorMessage;
     }
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/InProgressOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/InProgressOperation.java
index b54a852..bb03012 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/InProgressOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/InProgressOperation.java
@@ -25,14 +25,14 @@
  *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.types.operation;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
 import java.util.List;
 
 import org.opends.server.types.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -99,7 +99,7 @@
    *
    * @return  The error message for this operation.
    */
-  public MessageBuilder getErrorMessage();
+  public LocalizableMessageBuilder getErrorMessage();
 
 
 
@@ -108,7 +108,7 @@
    *
    * @param  errorMessage  The error message for this operation.
    */
-  public void setErrorMessage(MessageBuilder errorMessage);
+  public void setErrorMessage(LocalizableMessageBuilder errorMessage);
 
 
 
@@ -119,7 +119,7 @@
    *
    * @param  message  The message to append to the error message
    */
-  public void appendErrorMessage(Message message);
+  public void appendErrorMessage(LocalizableMessage message);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/PluginOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/PluginOperation.java
index 27db12b..00dcda4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/PluginOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/PluginOperation.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types.operation;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -87,7 +88,7 @@
    */
   public void disconnectClient(DisconnectReason disconnectReason,
                                boolean sendNotification,
-                               Message message);
+                               LocalizableMessage message);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/PostOperationBindOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/PostOperationBindOperation.java
index b9fb0d9..55cc4e6 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/PostOperationBindOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/PostOperationBindOperation.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types.operation;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -171,7 +171,7 @@
    *          authentication failed, or <CODE>null</CODE> if none is
    *          available.
    */
-  public Message getAuthFailureReason();
+  public LocalizableMessage getAuthFailureReason();
 
 
 
@@ -181,7 +181,7 @@
    * @param  reason  A human-readable message providing the reason
    *                 that the authentication failed.
    */
-  public void setAuthFailureReason(Message reason);
+  public void setAuthFailureReason(LocalizableMessage reason);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/PostOperationOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/PostOperationOperation.java
index c7b2c49..5fa3219 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/PostOperationOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/PostOperationOperation.java
@@ -25,14 +25,14 @@
  *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.types.operation;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
 import java.util.List;
 
 import org.opends.server.types.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -97,7 +97,7 @@
    *
    * @return  The error message for this operation.
    */
-  public MessageBuilder getErrorMessage();
+  public LocalizableMessageBuilder getErrorMessage();
 
 
 
@@ -106,7 +106,7 @@
    *
    * @param  errorMessage  The error message for this operation.
    */
-  public void setErrorMessage(MessageBuilder errorMessage);
+  public void setErrorMessage(LocalizableMessageBuilder errorMessage);
 
 
 
@@ -117,7 +117,7 @@
    *
    * @param  message  The message to append to the error message
    */
-  public void appendErrorMessage(Message message);
+  public void appendErrorMessage(LocalizableMessage message);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/PostResponseBindOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/PostResponseBindOperation.java
index 1a2e057..e83f969 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/PostResponseBindOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/PostResponseBindOperation.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types.operation;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -159,7 +159,7 @@
    *          authentication failed, or <CODE>null</CODE> if none is
    *          available.
    */
-  public Message getAuthFailureReason();
+  public LocalizableMessage getAuthFailureReason();
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/PostResponseOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/PostResponseOperation.java
index 19b33a0..14d98fc 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/PostResponseOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/PostResponseOperation.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.types.operation;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 import java.util.List;
@@ -67,7 +67,7 @@
    *
    * @return  The error message for this operation.
    */
-  public MessageBuilder getErrorMessage();
+  public LocalizableMessageBuilder getErrorMessage();
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/PostSynchronizationOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/PostSynchronizationOperation.java
index dda0b9d..fdfb2b4 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/PostSynchronizationOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/PostSynchronizationOperation.java
@@ -22,10 +22,10 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.types.operation;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 import java.util.List;
@@ -68,7 +68,7 @@
    *
    * @return  The error message for this operation.
    */
-  public MessageBuilder getErrorMessage();
+  public LocalizableMessageBuilder getErrorMessage();
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/PreOperationBindOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/PreOperationBindOperation.java
index fbbb476..b096d50 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/PreOperationBindOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/PreOperationBindOperation.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types.operation;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -141,7 +141,7 @@
    * @param  reason  A human-readable message providing the reason
    *                 that the authentication failed.
    */
-  public void setAuthFailureReason(Message reason);
+  public void setAuthFailureReason(LocalizableMessage reason);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/PreOperationOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/PreOperationOperation.java
index 7132e3b..8dd6451 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/PreOperationOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/PreOperationOperation.java
@@ -22,19 +22,19 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.types.operation;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 import org.opends.server.types.AdditionalLogItem;
 import org.opends.server.types.Control;
 import org.opends.server.types.DN;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -79,7 +79,7 @@
    *
    * @return  The error message for this operation.
    */
-  public MessageBuilder getErrorMessage();
+  public LocalizableMessageBuilder getErrorMessage();
 
 
 
@@ -88,7 +88,7 @@
    *
    * @param  errorMessage  The error message for this operation.
    */
-  public void setErrorMessage(MessageBuilder errorMessage);
+  public void setErrorMessage(LocalizableMessageBuilder errorMessage);
 
 
 
@@ -100,7 +100,7 @@
    * @param  message  The message to append to the error message
    *                  buffer.
    */
-  public void appendErrorMessage(Message message);
+  public void appendErrorMessage(LocalizableMessage message);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/PreParseBindOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/PreParseBindOperation.java
index 6f40fda..f3a9a7f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/PreParseBindOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/PreParseBindOperation.java
@@ -25,7 +25,7 @@
  *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.types.operation;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -176,6 +176,6 @@
    * @param  reason  A human-readable message providing the reason
    *                 that the authentication failed.
    */
-  public void setAuthFailureReason(Message reason);
+  public void setAuthFailureReason(LocalizableMessage reason);
 }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/types/operation/PreParseOperation.java b/opendj3-server-dev/src/server/org/opends/server/types/operation/PreParseOperation.java
index 92d203a..7e3016a 100644
--- a/opendj3-server-dev/src/server/org/opends/server/types/operation/PreParseOperation.java
+++ b/opendj3-server-dev/src/server/org/opends/server/types/operation/PreParseOperation.java
@@ -22,14 +22,14 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011-2013 ForgeRock AS.
+ *      Portions Copyright 2011-2014 ForgeRock AS.
  */
 package org.opends.server.types.operation;
 
 import java.util.List;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.types.AdditionalLogItem;
 import org.opends.server.types.Control;
 
@@ -86,7 +86,7 @@
    *
    * @return  The error message for this operation.
    */
-  public MessageBuilder getErrorMessage();
+  public LocalizableMessageBuilder getErrorMessage();
 
 
 
@@ -95,7 +95,7 @@
    *
    * @param  errorMessage  The error message for this operation.
    */
-  public void setErrorMessage(MessageBuilder errorMessage);
+  public void setErrorMessage(LocalizableMessageBuilder errorMessage);
 
 
 
@@ -107,7 +107,7 @@
    * @param  message  The message to append to the error message
    *                  buffer.
    */
-  public void appendErrorMessage(Message message);
+  public void appendErrorMessage(LocalizableMessage message);
 
 
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/Base64.java b/opendj3-server-dev/src/server/org/opends/server/util/Base64.java
index 7f95add..d4f5934 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/Base64.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/Base64.java
@@ -43,8 +43,8 @@
 import java.util.ArrayList;
 import java.util.StringTokenizer;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.NullOutputStream;
 import org.forgerock.opendj.ldap.ByteSequence;
@@ -207,7 +207,7 @@
     int length = encodedData.length();
     if ((length % 4) != 0)
     {
-      Message message = ERR_BASE64_DECODE_INVALID_LENGTH.get(encodedData);
+      LocalizableMessage message = ERR_BASE64_DECODE_INVALID_LENGTH.get(encodedData);
       throw new ParseException(message.toString(), 0);
     }
 
@@ -428,7 +428,7 @@
             }
             break;
           default:
-            Message message = ERR_BASE64_DECODE_INVALID_CHARACTER.get(
+            LocalizableMessage message = ERR_BASE64_DECODE_INVALID_CHARACTER.get(
                 encodedData, encodedData.charAt(i+j));
             throw new ParseException(message.toString(), i+j);
         }
@@ -470,7 +470,7 @@
    */
   public static void main(String[] args)
   {
-    Message description = INFO_BASE64_TOOL_DESCRIPTION.get();
+    LocalizableMessage description = INFO_BASE64_TOOL_DESCRIPTION.get();
     SubCommandArgumentParser argParser =
          new SubCommandArgumentParser(Base64.class.getName(), description,
                                       false);
@@ -573,7 +573,7 @@
       }
       else
       {
-        MessageBuilder messageBuilder = new MessageBuilder();
+        LocalizableMessageBuilder messageBuilder = new LocalizableMessageBuilder();
         argParser.getSubCommandUsage(messageBuilder, subCommand);
         System.out.println(messageBuilder.toString());
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/CertificateManager.java b/opendj3-server-dev/src/server/org/opends/server/util/CertificateManager.java
index 66409b6..acd0961 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/CertificateManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/CertificateManager.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.util;
@@ -32,7 +32,7 @@
 import java.security.cert.Certificate;
 import java.util.ArrayList;
 import java.util.Enumeration;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.UtilityMessages.*;
 
 
@@ -137,7 +137,7 @@
     ensureValid(keyStoreType, KEYSTORE_TYPE_MSG);
     if (keyStoreType.equals(KEY_STORE_TYPE_PKCS11)) {
       if (! keyStorePath.equals(KEY_STORE_PATH_PKCS11)) {
-        Message msg =
+        LocalizableMessage msg =
           ERR_CERTMGR_INVALID_PKCS11_PATH.get(KEY_STORE_PATH_PKCS11);
         throw new IllegalArgumentException(msg.toString());
       }
@@ -147,19 +147,19 @@
       File keyStoreFile = new File(keyStorePath);
       if (keyStoreFile.exists()) {
         if (! keyStoreFile.isFile()) {
-          Message msg = ERR_CERTMGR_INVALID_KEYSTORE_PATH.get(keyStorePath);
+          LocalizableMessage msg = ERR_CERTMGR_INVALID_KEYSTORE_PATH.get(keyStorePath);
           throw new IllegalArgumentException(msg.toString());
         }
       } else {
         final File keyStoreDirectory = keyStoreFile.getParentFile();
         if ((keyStoreDirectory == null) || (! keyStoreDirectory.exists()) ||
             (! keyStoreDirectory.isDirectory())) {
-          Message msg = ERR_CERTMGR_INVALID_PARENT.get(keyStorePath);
+          LocalizableMessage msg = ERR_CERTMGR_INVALID_PARENT.get(keyStorePath);
           throw new IllegalArgumentException(msg.toString());
         }
       }
     } else {
-      Message msg =  ERR_CERTMGR_INVALID_STORETYPE.get(
+      LocalizableMessage msg =  ERR_CERTMGR_INVALID_STORETYPE.get(
           KEY_STORE_TYPE_JKS, KEY_STORE_TYPE_JCEKS,
           KEY_STORE_TYPE_PKCS11, KEY_STORE_TYPE_PKCS12);
       throw new IllegalArgumentException(msg.toString());
@@ -240,7 +240,7 @@
     Certificate cert = null;
     KeyStore ks = getKeyStore();
     if (ks == null) {
-      Message msg = ERR_CERTMGR_KEYSTORE_NONEXISTANT.get();
+      LocalizableMessage msg = ERR_CERTMGR_KEYSTORE_NONEXISTANT.get();
       throw new KeyStoreException(msg.toString());
     }
     cert = ks.getCertificate(alias);
@@ -271,11 +271,11 @@
     ensureValid(alias, CERT_ALIAS_MSG);
     ensureValid(subjectDN, SUBJECT_DN_MSG);
     if (validity <= 0) {
-      Message msg = ERR_CERTMGR_VALIDITY.get(validity);
+      LocalizableMessage msg = ERR_CERTMGR_VALIDITY.get(validity);
       throw new IllegalArgumentException(msg.toString());
     }
     if (aliasInUse(alias)) {
-      Message msg = ERR_CERTMGR_ALIAS_ALREADY_EXISTS.get(alias);
+      LocalizableMessage msg = ERR_CERTMGR_ALIAS_ALREADY_EXISTS.get(alias);
       throw new IllegalArgumentException(msg.toString());
     }
     keyStore = null;
@@ -306,7 +306,7 @@
     ensureFileValid(certificateFile, CERT_REQUEST_FILE_MSG);
     if ((! certificateFile.exists()) ||
         (! certificateFile.isFile())) {
-      Message msg = ERR_CERTMGR_INVALID_CERT_FILE.get(
+      LocalizableMessage msg = ERR_CERTMGR_INVALID_CERT_FILE.get(
           certificateFile.getAbsolutePath());
       throw new IllegalArgumentException(msg.toString());
     }
@@ -332,7 +332,7 @@
   throws KeyStoreException, IllegalArgumentException {
     ensureValid(alias, CERT_ALIAS_MSG);
     if (!aliasInUse(alias)) {
-      Message msg = ERR_CERTMGR_ALIAS_CAN_NOT_DELETE.get(alias);
+      LocalizableMessage msg = ERR_CERTMGR_ALIAS_CAN_NOT_DELETE.get(alias);
       throw new IllegalArgumentException(msg.toString());
     }
     keyStore = null;
@@ -447,14 +447,14 @@
 
   private static void ensureFileValid(File arg, String msgStr) {
     if(arg == null) {
-      Message msg = ERR_CERTMGR_FILE_NAME_INVALID.get(msgStr);
+      LocalizableMessage msg = ERR_CERTMGR_FILE_NAME_INVALID.get(msgStr);
       throw new NullPointerException(msg.toString());
     }
   }
 
   private static void ensureValid(String arg, String msgStr) {
     if(arg == null || arg.length() == 0) {
-     Message msg = ERR_CERTMGR_VALUE_INVALID.get(msgStr);
+     LocalizableMessage msg = ERR_CERTMGR_VALUE_INVALID.get(msgStr);
       throw new NullPointerException(msg.toString());
     }
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/EMailMessage.java b/opendj3-server-dev/src/server/org/opends/server/util/EMailMessage.java
index 8af28db..044f042 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/EMailMessage.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/EMailMessage.java
@@ -23,6 +23,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -47,8 +48,8 @@
 import javax.mail.internet.MimeMessage;
 import javax.mail.internet.MimeMultipart;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.DebugLogLevel;
@@ -99,7 +100,7 @@
   private String subject;
 
   // The body for the mail message.
-  private MessageBuilder body;
+  private LocalizableMessageBuilder body;
 
 
 
@@ -118,7 +119,7 @@
     recipients = new ArrayList<String>();
     recipients.add(recipient);
 
-    body         = new MessageBuilder();
+    body         = new LocalizableMessageBuilder();
     attachments  = new LinkedList<MimeBodyPart>();
     bodyMIMEType = "text/plain";
   }
@@ -139,7 +140,7 @@
     this.recipients = recipients;
     this.subject    = subject;
 
-    body         = new MessageBuilder();
+    body         = new LocalizableMessageBuilder();
     attachments  = new LinkedList<MimeBodyPart>();
     bodyMIMEType = "text/plain";
   }
@@ -237,7 +238,7 @@
    *
    * @return  The body for this message.
    */
-  public MessageBuilder getBody()
+  public LocalizableMessageBuilder getBody()
   {
     return body;
   }
@@ -249,7 +250,7 @@
    *
    * @param  body  The body for this message.
    */
-  public void setBody(MessageBuilder body)
+  public void setBody(LocalizableMessageBuilder body)
   {
     this.body = body;
   }
@@ -261,9 +262,9 @@
    *
    * @param  body  The body for this message.
    */
-  public void setBody(Message body)
+  public void setBody(LocalizableMessage body)
   {
-    this.body = new MessageBuilder(body);
+    this.body = new LocalizableMessageBuilder(body);
   }
 
 
@@ -402,7 +403,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, me);
         }
 
-        Message msg = ERR_EMAILMSG_INVALID_SENDER_ADDRESS.get(
+        LocalizableMessage msg = ERR_EMAILMSG_INVALID_SENDER_ADDRESS.get(
             String.valueOf(sender), me.getMessage());
         throw new MessagingException(msg.toString(), me);
       }
@@ -427,7 +428,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, me);
           }
 
-          Message msg = ERR_EMAILMSG_INVALID_RECIPIENT_ADDRESS.get(
+          LocalizableMessage msg = ERR_EMAILMSG_INVALID_RECIPIENT_ADDRESS.get(
               String.valueOf(recipient), me.getMessage());
           throw new MessagingException(msg.toString(), me);
         }
@@ -495,7 +496,7 @@
     // Otherwise, throw a generic exception.
     if (sendException == null)
     {
-      Message message = ERR_EMAILMSG_CANNOT_SEND.get();
+      LocalizableMessage message = ERR_EMAILMSG_CANNOT_SEND.get();
       throw new MessagingException(message.toString());
     }
     else
@@ -513,7 +514,7 @@
    */
   public static void main(String[] args)
   {
-    Message description = INFO_EMAIL_TOOL_DESCRIPTION.get();
+    LocalizableMessage description = INFO_EMAIL_TOOL_DESCRIPTION.get();
     ArgumentParser argParser = new ArgumentParser(EMailMessage.class.getName(),
                                                   description, false);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/EmbeddedUtils.java b/opendj3-server-dev/src/server/org/opends/server/util/EmbeddedUtils.java
index 95f702f..c141c68 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/EmbeddedUtils.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/EmbeddedUtils.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -33,7 +34,7 @@
 import org.opends.server.types.InitializationException;
 
 import static org.opends.messages.UtilityMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -95,7 +96,7 @@
    * @param  className  The name of the class that initiated the shutdown.
    * @param  reason     A message explaining the reason for the shutdown.
    */
-  public static void stopServer(String className, Message reason)
+  public static void stopServer(String className, LocalizableMessage reason)
   {
     DirectoryServer.shutDown(className, reason);
   }
@@ -112,7 +113,7 @@
    * @param  config     The environment configuration to use for the new server
    *                    instance.
    */
-  public static void restartServer(String className, Message reason,
+  public static void restartServer(String className, LocalizableMessage reason,
                                    DirectoryEnvironmentConfig config)
   {
     DirectoryServer.restart(className, reason, config);
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/ExpirationCheckTrustManager.java b/opendj3-server-dev/src/server/org/opends/server/util/ExpirationCheckTrustManager.java
index 9750438..602a81c 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/ExpirationCheckTrustManager.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/ExpirationCheckTrustManager.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -38,7 +39,7 @@
 
 import static org.opends.server.loggers.ErrorLogger.*;
 import static org.opends.messages.UtilityMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -97,7 +98,7 @@
       }
       catch (CertificateExpiredException cee)
       {
-        Message message = ERR_EXPCHECK_TRUSTMGR_CLIENT_CERT_EXPIRED.get(
+        LocalizableMessage message = ERR_EXPCHECK_TRUSTMGR_CLIENT_CERT_EXPIRED.get(
             c.getSubjectDN().getName(), String.valueOf(c.getNotAfter()));
         logError(message);
 
@@ -105,7 +106,7 @@
       }
       catch (CertificateNotYetValidException cnyve)
       {
-        Message message = ERR_EXPCHECK_TRUSTMGR_CLIENT_CERT_NOT_YET_VALID.get(
+        LocalizableMessage message = ERR_EXPCHECK_TRUSTMGR_CLIENT_CERT_NOT_YET_VALID.get(
             c.getSubjectDN().getName(), String.valueOf(c.getNotBefore()));
         logError(message);
 
@@ -142,7 +143,7 @@
       }
       catch (CertificateExpiredException cee)
       {
-        Message message = ERR_EXPCHECK_TRUSTMGR_SERVER_CERT_EXPIRED.get(
+        LocalizableMessage message = ERR_EXPCHECK_TRUSTMGR_SERVER_CERT_EXPIRED.get(
             c.getSubjectDN().getName(), String.valueOf(c.getNotAfter()));
         logError(message);
 
@@ -150,7 +151,7 @@
       }
       catch (CertificateNotYetValidException cnyve)
       {
-        Message message = ERR_EXPCHECK_TRUSTMGR_SERVER_CERT_NOT_YET_VALID.get(
+        LocalizableMessage message = ERR_EXPCHECK_TRUSTMGR_SERVER_CERT_NOT_YET_VALID.get(
             c.getSubjectDN().getName(), String.valueOf(c.getNotBefore()));
         logError(message);
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/LDIFException.java b/opendj3-server-dev/src/server/org/opends/server/util/LDIFException.java
index daa811eb..2d7abdb 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/LDIFException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/LDIFException.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -69,7 +70,7 @@
    *
    * @param  message    The message to use for this LDIF exception.
    */
-  public LDIFException(Message message)
+  public LDIFException(LocalizableMessage message)
   {
     super(message);
 
@@ -86,7 +87,7 @@
    * @param  message    The message to use for this LDIF exception.
    * @param  cause      The underlying cause that triggered this LDIF exception.
    */
-  public LDIFException(Message message, Throwable cause)
+  public LDIFException(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
 
@@ -106,7 +107,7 @@
    * @param  canContinueReading  Indicates whether it is possible to continue
    *                             reading from the LDIF input source.
    */
-  public LDIFException(Message message, Number lineNumber,
+  public LDIFException(LocalizableMessage message, Number lineNumber,
                        boolean canContinueReading)
   {
     super(message);
@@ -129,7 +130,7 @@
    * @param  cause               The underlying cause that triggered this LDIF
    *                             exception.
    */
-  public LDIFException(Message message, Number lineNumber,
+  public LDIFException(LocalizableMessage message, Number lineNumber,
                        boolean canContinueReading, Throwable cause)
   {
     super(message, cause);
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 dbb0a79..c0c4fc3 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
@@ -37,8 +37,8 @@
 import java.util.*;
 import java.util.concurrent.atomic.AtomicLong;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.plugin.PluginResult;
 import org.opends.server.backends.jeb.EntryID;
 import org.opends.server.backends.jeb.RootContainer;
@@ -278,7 +278,7 @@
                     "exclude branches.", entryDN);
           }
           entriesRead.incrementAndGet();
-          Message message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
+          LocalizableMessage message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
           logToSkipWriter(lines, message);
           continue;
         }
@@ -293,7 +293,7 @@
                     "check." ,entryDN);
           }
           entriesRead.incrementAndGet();
-          Message message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
+          LocalizableMessage message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
           logToSkipWriter(lines, message);
           continue;
         }
@@ -322,7 +322,7 @@
           TRACER.debugInfo("Skipping entry %s because reading" +
                   "its attributes failed.", entryDN);
         }
-        Message message = ERR_LDIF_READ_ATTR_SKIP.get(String.valueOf(entryDN),
+        LocalizableMessage message = ERR_LDIF_READ_ATTR_SKIP.get(String.valueOf(entryDN),
                                                        e.getMessage());
         logToSkipWriter(lines, message);
         suffix.removePending(entryDN);
@@ -349,7 +349,7 @@
                 "that should be included based on the include and exclude " +
                 "filters.", entryDN);
           }
-          Message message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
+          LocalizableMessage message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
           logToSkipWriter(lines, message);
           suffix.removePending(entryDN);
           continue;
@@ -362,7 +362,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
         suffix.removePending(entryDN);
-        Message message = ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT.
+        LocalizableMessage message = ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT.
             get(String.valueOf(entry.getName()), lastEntryLineNumber,
                 String.valueOf(e));
         logToSkipWriter(lines, message);
@@ -378,8 +378,8 @@
              pluginConfigManager.invokeLDIFImportPlugins(importConfig, entry);
         if (! pluginResult.continueProcessing())
         {
-          Message m;
-          Message rejectMessage = pluginResult.getErrorMessage();
+          LocalizableMessage m;
+          LocalizableMessage rejectMessage = pluginResult.getErrorMessage();
           if (rejectMessage == null)
           {
             m = ERR_LDIF_REJECTED_BY_PLUGIN_NOMESSAGE.get(
@@ -408,10 +408,10 @@
         //Add any superior objectclass(s) missing in the objectclass map.
         addSuperiorObjectClasses(objectClasses);
 
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         if (! entry.conformsToSchema(null, false, true, false, invalidReason))
         {
-          Message message = ERR_LDIF_SCHEMA_VIOLATION.get(
+          LocalizableMessage message = ERR_LDIF_SCHEMA_VIOLATION.get(
                   String.valueOf(entryDN),
                   lastEntryLineNumber,
                   invalidReason.toString());
@@ -506,7 +506,7 @@
                     entryDN);
         }
         entriesRead.incrementAndGet();
-        Message message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
+        LocalizableMessage message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
         logToSkipWriter(lines, message);
         continue;
       }
@@ -548,7 +548,7 @@
                 "that should be included based on the include and exclude " +
                 "filters.", entryDN);
           }
-          Message message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
+          LocalizableMessage message = ERR_LDIF_SKIP.get(String.valueOf(entryDN));
           logToSkipWriter(lines, message);
           continue;
         }
@@ -560,7 +560,7 @@
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
 
-        Message message = ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT.
+        LocalizableMessage message = ERR_LDIF_COULD_NOT_EVALUATE_FILTERS_FOR_IMPORT.
             get(String.valueOf(entry.getName()), lastEntryLineNumber,
                 String.valueOf(e));
         throw new LDIFException(message, lastEntryLineNumber, true, e);
@@ -574,8 +574,8 @@
              pluginConfigManager.invokeLDIFImportPlugins(importConfig, entry);
         if (! pluginResult.continueProcessing())
         {
-          Message m;
-          Message rejectMessage = pluginResult.getErrorMessage();
+          LocalizableMessage m;
+          LocalizableMessage rejectMessage = pluginResult.getErrorMessage();
           if (rejectMessage == null)
           {
             m = ERR_LDIF_REJECTED_BY_PLUGIN_NOMESSAGE.get(
@@ -597,10 +597,10 @@
       // appropriate to do so.
       if (checkSchema)
       {
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         if (! entry.conformsToSchema(null, false, true, false, invalidReason))
         {
-          Message message = ERR_LDIF_SCHEMA_VIOLATION.get(
+          LocalizableMessage message = ERR_LDIF_SCHEMA_VIOLATION.get(
                   String.valueOf(entryDN),
                   lastEntryLineNumber,
                   invalidReason.toString());
@@ -678,7 +678,7 @@
           entry = parseModifyDNChangeRecordEntry(entryDN, lines);
         } else
         {
-          Message message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
+          LocalizableMessage message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
               changeType, "add, delete, modify, moddn, modrdn");
           throw new LDIFException(message, lastEntryLineNumber, false);
         }
@@ -690,7 +690,7 @@
           entry = parseAddChangeRecordEntry(entryDN, lines);
         } else
         {
-          Message message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
+          LocalizableMessage message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
               null, "add, delete, modify, moddn, modrdn");
           throw new LDIFException(message, lastEntryLineNumber, false);
         }
@@ -773,7 +773,7 @@
         }
         else
         {
-          Message message =
+          LocalizableMessage message =
                   ERR_LDIF_INVALID_LEADING_SPACE.get(lineNumber, line);
           logToRejectWriter(lines, message);
           throw new LDIFException(message, lineNumber, false);
@@ -833,7 +833,7 @@
     int colonPos = line.indexOf(":");
     if (colonPos <= 0)
     {
-      Message message =
+      LocalizableMessage message =
               ERR_LDIF_NO_ATTR_NAME.get(lastEntryLineNumber, line.toString());
 
       logToRejectWriter(lines, message);
@@ -848,7 +848,7 @@
     }
     else if (! attrName.equals("dn"))
     {
-      Message message =
+      LocalizableMessage message =
               ERR_LDIF_NO_DN.get(lastEntryLineNumber, line.toString());
 
       logToRejectWriter(lines, message);
@@ -910,7 +910,7 @@
             encodedStr, stackTrace);
       }
 
-      Message message = ERR_LDIF_COULD_NOT_BASE64_DECODE_DN.get(
+      LocalizableMessage message = ERR_LDIF_COULD_NOT_BASE64_DECODE_DN.get(
           lastEntryLineNumber, line, stackTrace);
       logToRejectWriter(lines, message);
       throw new LDIFException(message, lastEntryLineNumber, true, e);
@@ -931,7 +931,7 @@
         TRACER.debugInfo("DN decode failed for: ", dnString);
       }
 
-      Message message = ERR_LDIF_INVALID_DN.get(
+      LocalizableMessage message = ERR_LDIF_INVALID_DN.get(
               lastEntryLineNumber, line.toString(),
               de.getMessageObject());
 
@@ -944,7 +944,7 @@
       {
         TRACER.debugInfo("DN decode failed for: ", dnString);
       }
-      Message message = ERR_LDIF_INVALID_DN.get(
+      LocalizableMessage message = ERR_LDIF_INVALID_DN.get(
               lastEntryLineNumber, line.toString(),
               String.valueOf(e));
 
@@ -979,7 +979,7 @@
     int colonPos = line.indexOf(":");
     if (colonPos <= 0)
     {
-      Message message = ERR_LDIF_NO_ATTR_NAME.get(
+      LocalizableMessage message = ERR_LDIF_NO_ATTR_NAME.get(
               lastEntryLineNumber, line.toString());
       logToRejectWriter(lines, message);
       throw new LDIFException(message, lastEntryLineNumber, true);
@@ -1000,7 +1000,7 @@
     int length = line.length();
     if (colonPos == (length-1))
     {
-      Message message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
+      LocalizableMessage message = ERR_LDIF_INVALID_CHANGETYPE_ATTRIBUTE.get(
           null, "add, delete, modify, moddn, modrdn");
       throw new LDIFException(message, lastEntryLineNumber, false );
     }
@@ -1118,7 +1118,7 @@
       {
        if(attribute.hasOption("binary"))
         {
-          Message message = ERR_LDIF_INVALID_ATTR_OPTION.get(
+          LocalizableMessage message = ERR_LDIF_INVALID_ATTR_OPTION.get(
             String.valueOf(entryDN),lastEntryLineNumber, attrName);
           logToRejectWriter(lines, message);
           throw new LDIFException(message, lastEntryLineNumber,true);
@@ -1128,10 +1128,10 @@
           (DirectoryServer.getSyntaxEnforcementPolicy() !=
                AcceptRejectWarn.ACCEPT))
       {
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         if (! attrType.getSyntax().valueIsAcceptable(value, invalidReason))
         {
-          Message message = WARN_LDIF_VALUE_VIOLATES_SYNTAX.get(
+          LocalizableMessage message = WARN_LDIF_VALUE_VIOLATES_SYNTAX.get(
                   String.valueOf(entryDN),
                   lastEntryLineNumber, value.toString(),
                   attrName, invalidReason.toString());
@@ -1177,7 +1177,7 @@
         {
           if (!a.add(attributeValue) && checkSchema)
           {
-              Message message = WARN_LDIF_DUPLICATE_ATTR.get(
+              LocalizableMessage message = WARN_LDIF_DUPLICATE_ATTR.get(
                       String.valueOf(entryDN),
                       lastEntryLineNumber, attrName,
                       value.toString());
@@ -1186,7 +1186,7 @@
           }
           if (attrType.isSingleValue() && (a.size() > 1)  && checkSchema)
           {
-            Message message = ERR_LDIF_MULTIPLE_VALUES_FOR_SINGLE_VALUED_ATTR
+            LocalizableMessage message = ERR_LDIF_MULTIPLE_VALUES_FOR_SINGLE_VALUED_ATTR
                     .get(String.valueOf(entryDN),
                             lastEntryLineNumber, attrName);
             logToRejectWriter(lines, message);
@@ -1240,7 +1240,7 @@
 
       if (!attribute.equals(expectedAttr))
       {
-        Message message = ERR_LDIF_INVALID_CHANGERECORD_ATTRIBUTE.get(
+        LocalizableMessage message = ERR_LDIF_INVALID_CHANGERECORD_ATTRIBUTE.get(
             attrDescr, attributeName);
         throw new LDIFException(message, lastEntryLineNumber, false);
       }
@@ -1281,7 +1281,7 @@
    * @param  message  A human-readable message providing the reason that the
    *                  last entry read was not acceptable.
    */
-  public void rejectLastEntry(Message message)
+  public void rejectLastEntry(LocalizableMessage message)
   {
     entriesRejected.incrementAndGet();
 
@@ -1329,7 +1329,7 @@
    * @param e The entry to log.
    * @param message The message to log.
    */
-  public synchronized void rejectEntry(Entry e, Message message) {
+  public synchronized void rejectEntry(Entry e, LocalizableMessage message) {
     BufferedWriter rejectWriter = importConfig.getRejectWriter();
     entriesRejected.incrementAndGet();
     if (rejectWriter != null) {
@@ -1485,7 +1485,7 @@
 
     if(lines.isEmpty())
     {
-      Message message = ERR_LDIF_NO_MOD_DN_ATTRIBUTES.get();
+      LocalizableMessage message = ERR_LDIF_NO_MOD_DN_ATTRIBUTES.get();
       throw new LDIFException(message, lineNumber, true);
     }
 
@@ -1501,7 +1501,7 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, de);
       }
-      Message message = ERR_LDIF_INVALID_DN.get(
+      LocalizableMessage message = ERR_LDIF_INVALID_DN.get(
           lineNumber, line.toString(), de.getMessageObject());
       throw new LDIFException(message, lineNumber, true);
     } catch (Exception e)
@@ -1510,14 +1510,14 @@
       {
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
       }
-      Message message =
+      LocalizableMessage message =
           ERR_LDIF_INVALID_DN.get(lineNumber, line.toString(), e.getMessage());
       throw new LDIFException(message, lineNumber, true);
     }
 
     if(lines.isEmpty())
     {
-      Message message = ERR_LDIF_NO_DELETE_OLDRDN_ATTRIBUTE.get();
+      LocalizableMessage message = ERR_LDIF_NO_DELETE_OLDRDN_ATTRIBUTE.get();
       throw new LDIFException(message, lineNumber, true);
     }
     lineNumber++;
@@ -1538,7 +1538,7 @@
       deleteOldRDN = true;
     } else
     {
-      Message message = ERR_LDIF_INVALID_DELETE_OLDRDN_ATTRIBUTE.get(delStr);
+      LocalizableMessage message = ERR_LDIF_INVALID_DELETE_OLDRDN_ATTRIBUTE.get(delStr);
       throw new LDIFException(message, lineNumber, true);
     }
 
@@ -1559,7 +1559,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, de);
         }
-        Message message = ERR_LDIF_INVALID_DN.get(
+        LocalizableMessage message = ERR_LDIF_INVALID_DN.get(
             lineNumber, line.toString(), de.getMessageObject());
         throw new LDIFException(message, lineNumber, true);
       } catch (Exception e)
@@ -1568,7 +1568,7 @@
         {
           TRACER.debugCaught(DebugLogLevel.ERROR, e);
         }
-        Message message = ERR_LDIF_INVALID_DN.get(
+        LocalizableMessage message = ERR_LDIF_INVALID_DN.get(
             lineNumber, line.toString(), e.getMessage());
         throw new LDIFException(message, lineNumber, true);
       }
@@ -1654,7 +1654,7 @@
       else
       {
         // Invalid attribute name.
-        Message message = ERR_LDIF_INVALID_MODIFY_ATTRIBUTE.get(name,
+        LocalizableMessage message = ERR_LDIF_INVALID_MODIFY_ATTRIBUTE.get(name,
             "add, delete, replace, increment");
         throw new LDIFException(message, lineNumber, true);
       }
@@ -1699,7 +1699,7 @@
   {
     if (!lines.isEmpty())
     {
-      Message message = ERR_LDIF_INVALID_DELETE_ATTRIBUTES.get();
+      LocalizableMessage message = ERR_LDIF_INVALID_DELETE_ATTRIBUTES.get();
       throw new LDIFException(message, lineNumber, true);
     }
     return new DeleteChangeRecordEntry(entryDN);
@@ -1766,7 +1766,7 @@
     int colonPos = line.indexOf(":");
     if (colonPos <= 0)
     {
-      Message message = ERR_LDIF_NO_ATTR_NAME.get(
+      LocalizableMessage message = ERR_LDIF_NO_ATTR_NAME.get(
               lastEntryLineNumber, line.toString());
       logToRejectWriter(lines, message);
       throw new LDIFException(message, lastEntryLineNumber, true);
@@ -1831,7 +1831,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_LDIF_COULD_NOT_BASE64_DECODE_ATTR.get(
+          LocalizableMessage message = ERR_LDIF_COULD_NOT_BASE64_DECODE_ATTR.get(
                   String.valueOf(entryDN),
                   lastEntryLineNumber, line,
                   String.valueOf(e));
@@ -1858,7 +1858,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_LDIF_INVALID_URL.get(String.valueOf(entryDN),
+          LocalizableMessage message = ERR_LDIF_INVALID_URL.get(String.valueOf(entryDN),
                                       lastEntryLineNumber,
                                       String.valueOf(attrName),
                                       String.valueOf(e));
@@ -1885,7 +1885,7 @@
             TRACER.debugCaught(DebugLogLevel.ERROR, e);
           }
 
-          Message message = ERR_LDIF_URL_IO_ERROR.get(String.valueOf(entryDN),
+          LocalizableMessage message = ERR_LDIF_URL_IO_ERROR.get(String.valueOf(entryDN),
                                       lastEntryLineNumber,
                                       String.valueOf(attrName),
                                       String.valueOf(contentURL),
@@ -1917,7 +1917,7 @@
    * @param message
    *          The associated error message.
    */
-  private void logToRejectWriter(List<StringBuilder> lines, Message message)
+  private void logToRejectWriter(List<StringBuilder> lines, LocalizableMessage message)
   {
     entriesRejected.incrementAndGet();
     BufferedWriter rejectWriter = importConfig.getRejectWriter();
@@ -1935,7 +1935,7 @@
    * @param message
    *          The associated error message.
    */
-  private void logToSkipWriter(List<StringBuilder> lines, Message message)
+  private void logToSkipWriter(List<StringBuilder> lines, LocalizableMessage message)
   {
     entriesIgnored.incrementAndGet();
     BufferedWriter skipWriter = importConfig.getSkipWriter();
@@ -1956,7 +1956,7 @@
    *          The associated error message.
    */
   private void logToWriter(BufferedWriter writer, List<StringBuilder> lines,
-      Message message)
+      LocalizableMessage message)
   {
     if (writer != null)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/LDIFWriter.java b/opendj3-server-dev/src/server/org/opends/server/util/LDIFWriter.java
index 51057b6..6e2d900 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/LDIFWriter.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/LDIFWriter.java
@@ -34,7 +34,7 @@
 import java.util.List;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.tools.makeldif.TemplateEntry;
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
@@ -110,7 +110,7 @@
    * @throws  IOException  If a problem occurs while attempting to write the
    *                       comment to the LDIF file.
    */
-  public void writeComment(Message comment, int wrapColumn)
+  public void writeComment(LocalizableMessage comment, int wrapColumn)
          throws IOException
   {
     ifNull(comment);
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/Platform.java b/opendj3-server-dev/src/server/org/opends/server/util/Platform.java
index fc6b987..ef94dd5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/Platform.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/Platform.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.util;
@@ -44,7 +44,7 @@
 import java.lang.management.MemoryUsage;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.UtilityMessages.*;
 
 
@@ -132,17 +132,17 @@
       }
       catch (ClassNotFoundException e)
       {
-        Message msg = ERR_CERTMGR_CLASS_NOT_FOUND.get(e.getMessage());
+        LocalizableMessage msg = ERR_CERTMGR_CLASS_NOT_FOUND.get(e.getMessage());
         throw new ExceptionInInitializerError(msg.toString());
       }
       catch (SecurityException e)
       {
-        Message msg = ERR_CERTMGR_SECURITY.get(e.getMessage());
+        LocalizableMessage msg = ERR_CERTMGR_SECURITY.get(e.getMessage());
         throw new ExceptionInInitializerError(msg.toString());
       }
       catch (NoSuchMethodException e)
       {
-        Message msg = ERR_CERTMGR_NO_METHOD.get(e.getMessage());
+        LocalizableMessage msg = ERR_CERTMGR_NO_METHOD.get(e.getMessage());
         throw new ExceptionInInitializerError(msg.toString());
       }
     }
@@ -176,7 +176,7 @@
       {
         if (ks == null)
         {
-          Message msg = ERR_CERTMGR_KEYSTORE_NONEXISTANT.get();
+          LocalizableMessage msg = ERR_CERTMGR_KEYSTORE_NONEXISTANT.get();
           throw new KeyStoreException(msg.toString());
         }
         ks.deleteEntry(alias);
@@ -186,7 +186,7 @@
       }
       catch (Exception e)
       {
-        Message msg = ERR_CERTMGR_DELETE_ALIAS.get(alias, e.getMessage());
+        LocalizableMessage msg = ERR_CERTMGR_DELETE_ALIAS.get(alias, e.getMessage());
         throw new KeyStoreException(msg.toString());
       }
     }
@@ -229,7 +229,7 @@
         // Do not support certificate replies.
         if (ks.entryInstanceOf(alias, KeyStore.PrivateKeyEntry.class))
         {
-          Message msg = ERR_CERTMGR_CERT_REPLIES_INVALID.get(alias);
+          LocalizableMessage msg = ERR_CERTMGR_CERT_REPLIES_INVALID.get(alias);
           throw new KeyStoreException(msg.toString());
         }
         else if (!ks.containsAlias(alias)
@@ -238,7 +238,7 @@
           trustedCert(alias, cf, ks, inStream);
         else
         {
-          Message msg = ERR_CERTMGR_ALIAS_INVALID.get(alias);
+          LocalizableMessage msg = ERR_CERTMGR_ALIAS_INVALID.get(alias);
           throw new KeyStoreException(msg.toString());
         }
         FileOutputStream fileOutStream = new FileOutputStream(ksPath);
@@ -248,7 +248,7 @@
       }
       catch (Exception e)
       {
-        Message msg = ERR_CERTMGR_ADD_CERT.get(alias, e.getMessage());
+        LocalizableMessage msg = ERR_CERTMGR_ADD_CERT.get(alias, e.getMessage());
         throw new KeyStoreException(msg.toString());
       }
     }
@@ -292,7 +292,7 @@
         }
         else if (ks.containsAlias(alias))
         {
-          Message msg = ERR_CERTMGR_ALIAS_ALREADY_EXISTS.get(alias);
+          LocalizableMessage msg = ERR_CERTMGR_ALIAS_ALREADY_EXISTS.get(alias);
           throw new KeyStoreException(msg.toString());
         }
         Object keypair = certKeyGenCons.newInstance(KEY_ALGORITHM,
@@ -318,7 +318,7 @@
       }
       catch (Exception e)
       {
-        Message msg = ERR_CERTMGR_GEN_SELF_SIGNED_CERT.get(alias, e
+        LocalizableMessage msg = ERR_CERTMGR_GEN_SELF_SIGNED_CERT.get(alias, e
             .getMessage());
         throw new KeyStoreException(msg.toString());
       }
@@ -351,7 +351,7 @@
       {
         if (ks.containsAlias(alias))
         {
-          Message msg = ERR_CERTMGR_ALIAS_ALREADY_EXISTS.get(alias);
+          LocalizableMessage msg = ERR_CERTMGR_ALIAS_ALREADY_EXISTS.get(alias);
           throw new KeyStoreException(msg.toString());
         }
         X509Certificate cert = (X509Certificate) cf.generateCertificate(in);
@@ -360,7 +360,7 @@
       }
       catch (Exception e)
       {
-        Message msg = ERR_CERTMGR_TRUSTED_CERT.get(alias, e.getMessage());
+        LocalizableMessage msg = ERR_CERTMGR_TRUSTED_CERT.get(alias, e.getMessage());
         throw new KeyStoreException(msg.toString());
       }
     }
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 df327d4..2faf645 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
@@ -44,12 +44,13 @@
 import javax.naming.ldap.InitialLdapContext;
 
 import org.forgerock.util.Reject;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.MessageDescriptor;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
+import org.forgerock.i18n.LocalizableMessageDescriptor;
 import org.opends.messages.ToolMessages;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.core.DirectoryServer;
+import org.opends.server.core.ServerContext;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteSequence;
@@ -1531,7 +1532,7 @@
    *
    * @return  The human-readable message generated for the provided exception.
    */
-  public static Message getExceptionMessage(Throwable t)
+  public static LocalizableMessage getExceptionMessage(Throwable t)
   {
     if (t instanceof IdentifiedException)
     {
@@ -1540,18 +1541,18 @@
       StringBuilder message = new StringBuilder();
       message.append(ie.getMessage());
       message.append(" (id=");
-      Message ieMsg = ie.getMessageObject();
+      LocalizableMessage ieMsg = ie.getMessageObject();
       if (ieMsg != null) {
-        message.append(ieMsg.getDescriptor().getId());
+        message.append(ieMsg.resourceName() + "-" + ieMsg.ordinal());
       } else {
-        message.append(MessageDescriptor.NULL_ID);
+        message.append("-1");
       }
       message.append(")");
-      return Message.raw(message.toString());
+      return LocalizableMessage.raw(message.toString());
     }
     else if (t instanceof NullPointerException)
     {
-      MessageBuilder message = new MessageBuilder();
+      LocalizableMessageBuilder message = new LocalizableMessageBuilder();
       message.append("NullPointerException(");
 
       StackTraceElement[] stackElements = t.getStackTrace();
@@ -1616,7 +1617,7 @@
 
       message.append(")");
 
-      return Message.raw(message.toString());
+      return LocalizableMessage.raw(message.toString());
     }
   }
 
@@ -2123,7 +2124,7 @@
 
     if ((length % 2) == 1)
     {
-      Message message = ERR_HEX_DECODE_INVALID_LENGTH.get(hexString);
+      LocalizableMessage message = ERR_HEX_DECODE_INVALID_LENGTH.get(hexString);
       throw new ParseException(message.toString(), 0);
     }
 
@@ -2190,7 +2191,7 @@
           returnArray[i] = (byte) 0xF0;
           break;
         default:
-          Message message = ERR_HEX_DECODE_INVALID_CHARACTER.get(
+          LocalizableMessage message = ERR_HEX_DECODE_INVALID_CHARACTER.get(
               hexString, hexString.charAt(pos-1));
           throw new ParseException(message.toString(), 0);
       }
@@ -2252,7 +2253,7 @@
           returnArray[i] |= 0x0F;
           break;
         default:
-          Message message = ERR_HEX_DECODE_INVALID_CHARACTER.get(
+          LocalizableMessage message = ERR_HEX_DECODE_INVALID_CHARACTER.get(
               hexString, hexString.charAt(pos-1));
           throw new ParseException(message.toString(), 0);
       }
@@ -2437,7 +2438,7 @@
     // throw an exception.
     if (! mayUseExec())
     {
-      Message message = ERR_EXEC_DISABLED.get(String.valueOf(command));
+      LocalizableMessage message = ERR_EXEC_DISABLED.get(String.valueOf(command));
       throw new SecurityException(message.toString());
     }
 
@@ -2540,7 +2541,7 @@
    */
   public static boolean isValidSchemaElement(String element, int startPos,
                                              int endPos,
-                                             MessageBuilder invalidReason)
+                                             LocalizableMessageBuilder invalidReason)
   {
     if ((element == null) || (startPos >= endPos))
     {
@@ -3521,26 +3522,26 @@
   {
     if (! fileToMove.exists())
     {
-      Message message = ERR_MOVEFILE_NO_SUCH_FILE.get(fileToMove.getPath());
+      LocalizableMessage message = ERR_MOVEFILE_NO_SUCH_FILE.get(fileToMove.getPath());
       throw new IOException(message.toString());
     }
 
     if (! fileToMove.isFile())
     {
-      Message message = ERR_MOVEFILE_NOT_FILE.get(fileToMove.getPath());
+      LocalizableMessage message = ERR_MOVEFILE_NOT_FILE.get(fileToMove.getPath());
       throw new IOException(message.toString());
     }
 
     if (! targetDirectory.exists())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MOVEFILE_NO_SUCH_DIRECTORY.get(targetDirectory.getPath());
       throw new IOException(message.toString());
     }
 
     if (! targetDirectory.isDirectory())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_MOVEFILE_NOT_DIRECTORY.get(targetDirectory.getPath());
       throw new IOException(message.toString());
     }
@@ -3591,7 +3592,7 @@
         {
           if (!target.delete())
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_RENAMEFILE_CANNOT_DELETE_TARGET.get(target.getPath());
             throw new IOException(message.toString());
           }
@@ -3599,7 +3600,7 @@
       }
       if (!fileToRename.renameTo(target))
       {
-        Message message = ERR_RENAMEFILE_CANNOT_RENAME.get(
+        LocalizableMessage message = ERR_RENAMEFILE_CANNOT_RENAME.get(
             fileToRename.getPath(), target.getPath());
         throw new IOException(message.toString());
 
@@ -3650,6 +3651,34 @@
     }
   }
 
+  /**
+   * Retrieves a <CODE>File</CODE> object corresponding to the specified path.
+   * If the given path is an absolute path, then it will be used.  If the path
+   * is relative, then it will be interpreted as if it were relative to the
+   * Directory Server root.
+   *
+   * @param path
+   *           The path string to be retrieved as a <CODE>File</CODE>.
+   * @param serverContext
+   *           The server context.
+   *
+   * @return  A <CODE>File</CODE> object that corresponds to the specified path.
+   */
+  public static File getFileForPath(String path, ServerContext serverContext)
+  {
+    File f = new File (path);
+
+    if (f.isAbsolute())
+    {
+      return f;
+    }
+    else
+    {
+      return new File(serverContext.getInstanceRoot() + File.separator +
+          path);
+    }
+  }
+
 
 
   /**
@@ -3822,7 +3851,7 @@
    * @return  The user-friendly representation of the specified number of
    *          seconds.
    */
-  public static Message secondsToTimeString(long numSeconds)
+  public static LocalizableMessage secondsToTimeString(long numSeconds)
   {
     if (numSeconds < 60)
     {
@@ -3869,9 +3898,9 @@
    *
    * @return  The wrapped text.
    */
-  public static String wrapText(Message message, int width)
+  public static String wrapText(LocalizableMessage message, int width)
   {
-    return wrapText(Message.toString(message), width, 0);
+    return wrapText(message.toString(), width, 0);
   }
 
 
@@ -3912,9 +3941,9 @@
    *          The number of columns to indent each line.
    * @return The wrapped text.
    */
-  public static String wrapText(Message message, int width, int indent)
+  public static String wrapText(LocalizableMessage message, int width, int indent)
   {
-    return wrapText(Message.toString(message), width, indent);
+    return wrapText(message.toString(), width, indent);
   }
 
 
@@ -4345,7 +4374,7 @@
     // comprise the escaped value.
     if ((startPos + 1) >= hexString.length())
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.get(hexString,
               startPos + 1);
 
@@ -4408,7 +4437,7 @@
       byteValue = (byte) 0xF0;
       break;
     default:
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.get(hexString,
               startPos);
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
@@ -4470,7 +4499,7 @@
       byteValue |= (byte) 0x0F;
       break;
     default:
-      Message message =
+      LocalizableMessage message =
           ERR_SEARCH_FILTER_INVALID_ESCAPED_BYTE.get(hexString,
               startPos);
       throw new DirectoryException(ResultCode.PROTOCOL_ERROR, message);
@@ -4721,6 +4750,86 @@
   }
 
   /**
+   * Test if the provided message corresponds to the provided descriptor.
+   *
+   * @param msg
+   *          The i18n message.
+   * @param desc
+   *          The message descriptor.
+   * @return {@code true} if message corresponds to descriptor
+   */
+  public static boolean hasDescriptor(LocalizableMessage msg,
+      LocalizableMessageDescriptor.Arg0 desc)
+  {
+    return msg.ordinal() == desc.ordinal()
+        && msg.resourceName().equals(desc.resourceName());
+  }
+
+  /**
+   * Test if the provided message corresponds to the provided descriptor.
+   *
+   * @param msg
+   *          The i18n message.
+   * @param desc
+   *          The message descriptor.
+   * @return {@code true} if message corresponds to descriptor
+   */
+  public static boolean hasDescriptor(LocalizableMessage msg,
+      LocalizableMessageDescriptor.Arg1 desc)
+  {
+    return msg.ordinal() == desc.ordinal()
+        && msg.resourceName().equals(desc.resourceName());
+  }
+
+  /**
+   * Test if the provided message corresponds to the provided descriptor.
+   *
+   * @param msg
+   *          The i18n message.
+   * @param desc
+   *          The message descriptor.
+   * @return {@code true} if message corresponds to descriptor
+   */
+  public static boolean hasDescriptor(LocalizableMessage msg,
+      LocalizableMessageDescriptor.Arg2 desc)
+  {
+    return msg.ordinal() == desc.ordinal()
+        && msg.resourceName().equals(desc.resourceName());
+  }
+
+  /**
+   * Test if the provided message corresponds to the provided descriptor.
+   *
+   * @param msg
+   *          The i18n message.
+   * @param desc
+   *          The message descriptor.
+   * @return {@code true} if message corresponds to descriptor
+   */
+  public static boolean hasDescriptor(LocalizableMessage msg,
+      LocalizableMessageDescriptor.Arg3 desc)
+  {
+    return msg.ordinal() == desc.ordinal()
+        && msg.resourceName().equals(desc.resourceName());
+  }
+
+  /**
+   * Test if the provided message corresponds to the provided descriptor.
+   *
+   * @param msg
+   *          The i18n message.
+   * @param desc
+   *          The message descriptor.
+   * @return {@code true} if message corresponds to descriptor
+   */
+  public static boolean hasDescriptor(LocalizableMessage msg,
+      LocalizableMessageDescriptor.Arg7 desc)
+  {
+    return msg.ordinal() == desc.ordinal()
+        && msg.resourceName().equals(desc.resourceName());
+  }
+
+  /**
    * Returns an {@link Iterable} returning the passed in {@link Iterator}. THis
    * allows using methods returning Iterators with foreach statements.
    * <p>
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/VersionCompatibilityIssue.java b/opendj3-server-dev/src/server/org/opends/server/util/VersionCompatibilityIssue.java
index c115414..0dae007 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/VersionCompatibilityIssue.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/VersionCompatibilityIssue.java
@@ -22,11 +22,11 @@
  *
  *
  *      Copyright 2007-2009 Sun Microsystems, Inc.
- *      Portions Copyright 2011-2012 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.server.util;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.BuildInformation;
 
 import static org.opends.messages.VersionMessages.*;
@@ -351,8 +351,8 @@
 
     private int id;
     private Set<Effect> effects = new HashSet<Effect>();
-    private Message upgradeMsg;
-    private Message reversionMsg;
+    private LocalizableMessage upgradeMsg;
+    private LocalizableMessage reversionMsg;
 
     /**
      * Creates a parameterized instance.
@@ -410,7 +410,7 @@
      * @param effects of this cause which cause the upgrade/reversion tools
      *        to behave in particular ways
      */
-    private Cause(int id, Message upgradeMessage, Message reversionMessage,
+    private Cause(int id, LocalizableMessage upgradeMessage, LocalizableMessage reversionMessage,
           Effect... effects) {
       this.id = id;
       this.upgradeMsg = upgradeMessage;
@@ -452,7 +452,7 @@
      *         user useful information (when used with
      *         <code>UPGRADE_SHOW_INFO_MESSAGE</code>)
      */
-    public Message getLocalizedUpgradeMessage() {
+    public LocalizableMessage getLocalizedUpgradeMessage() {
       return upgradeMsg;
     }
 
@@ -468,7 +468,7 @@
      *         user useful information (when used with
      *         <code>REVERSION_SHOW_INFO_MESSAGE</code>)
      */
-    public Message getLocalizedReversionMessage() {
+    public LocalizableMessage getLocalizedReversionMessage() {
       return reversionMsg;
     }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/Argument.java b/opendj3-server-dev/src/server/org/opends/server/util/args/Argument.java
index 8c0c062..d2c1e52 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/Argument.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/Argument.java
@@ -22,15 +22,15 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.util.args;
 
 import java.util.Iterator;
 import java.util.LinkedList;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 import static org.opends.messages.UtilityMessages.*;
 import static org.opends.server.util.StaticUtils.*;
@@ -69,7 +69,7 @@
   private Character shortIdentifier;
 
   /** The unique ID of the description for this argument. */
-  private Message description;
+  private LocalizableMessage description;
 
   /** The set of provided values for this argument. */
   private LinkedList<String> values;
@@ -91,7 +91,7 @@
    * information. It describes the format that must be used to specify the
    * values for this argument.
    */
-  private Message valuePlaceholder;
+  private LocalizableMessage valuePlaceholder;
 
   /**
    * Indicates whether this argument was provided in the set of properties found
@@ -125,7 +125,7 @@
    * @param  propertyName      The name of the property in a property file that
    *                           may be used to override the default value but
    *                           will be overridden by a command-line argument.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -134,9 +134,9 @@
   protected Argument(String name, Character shortIdentifier,
                      String longIdentifier, boolean isRequired,
                      boolean isMultiValued, boolean needsValue,
-                     Message valuePlaceholder, String defaultValue,
+                     LocalizableMessage valuePlaceholder, String defaultValue,
                      String propertyName,
-                     Message description)
+                     LocalizableMessage description)
             throws ArgumentException
   {
     this.name             = name;
@@ -153,13 +153,13 @@
 
     if (shortIdentifier == null && longIdentifier == null)
     {
-      Message message = ERR_ARG_NO_IDENTIFIER.get(name);
+      LocalizableMessage message = ERR_ARG_NO_IDENTIFIER.get(name);
       throw new ArgumentException(message);
     }
 
     if (needsValue && valuePlaceholder == null)
     {
-      Message message = ERR_ARG_NO_VALUE_PLACEHOLDER.get(name);
+      LocalizableMessage message = ERR_ARG_NO_VALUE_PLACEHOLDER.get(name);
       throw new ArgumentException(message);
     }
 
@@ -363,7 +363,7 @@
    *          the generated usage information, or <CODE>null</CODE> if there is
    *          none.
    */
-  public Message getValuePlaceholder()
+  public LocalizableMessage getValuePlaceholder()
   {
     return valuePlaceholder;
   }
@@ -378,7 +378,7 @@
    * @param  valuePlaceholder  The value placeholder that will be displayed for
    *                           this argument in the generated usage information.
    */
-  public void setValuePlaceholder(Message valuePlaceholder)
+  public void setValuePlaceholder(LocalizableMessage valuePlaceholder)
   {
     this.valuePlaceholder = valuePlaceholder;
   }
@@ -474,9 +474,9 @@
    *
    * @return  The human-readable description for this argument.
    */
-  public Message getDescription()
+  public LocalizableMessage getDescription()
   {
-    return description != null ? description : Message.EMPTY;
+    return description != null ? description : LocalizableMessage.EMPTY;
   }
 
   /**
@@ -530,7 +530,7 @@
   {
     if (values.isEmpty())
     {
-      Message message = ERR_ARG_NO_INT_VALUE.get(name);
+      LocalizableMessage message = ERR_ARG_NO_INT_VALUE.get(name);
       throw new ArgumentException(message);
     }
 
@@ -544,13 +544,13 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString, name);
+      LocalizableMessage message = ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString, name);
       throw new ArgumentException(message, e);
     }
 
     if (iterator.hasNext())
     {
-      Message message = ERR_ARG_INT_MULTIPLE_VALUES.get(name);
+      LocalizableMessage message = ERR_ARG_INT_MULTIPLE_VALUES.get(name);
       throw new ArgumentException(message);
     }
     return intValue;
@@ -578,7 +578,7 @@
       }
       catch (Exception e)
       {
-        Message message = ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString, name);
+        LocalizableMessage message = ERR_ARG_CANNOT_DECODE_AS_INT.get(valueString, name);
         throw new ArgumentException(message, e);
       }
     }
@@ -601,7 +601,7 @@
   {
     if (values.isEmpty())
     {
-      Message message = ERR_ARG_NO_BOOLEAN_VALUE.get(name);
+      LocalizableMessage message = ERR_ARG_NO_BOOLEAN_VALUE.get(name);
       throw new ArgumentException(message);
     }
 
@@ -621,13 +621,13 @@
     }
     else
     {
-      Message message = ERR_ARG_CANNOT_DECODE_AS_BOOLEAN.get(valueString, name);
+      LocalizableMessage message = ERR_ARG_CANNOT_DECODE_AS_BOOLEAN.get(valueString, name);
       throw new ArgumentException(message);
     }
 
     if (iterator.hasNext())
     {
-      Message message = ERR_ARG_BOOLEAN_MULTIPLE_VALUES.get(name);
+      LocalizableMessage message = ERR_ARG_BOOLEAN_MULTIPLE_VALUES.get(name);
       throw new ArgumentException(message);
     }
     return booleanValue;
@@ -647,7 +647,7 @@
    *          <CODE>false</CODE> if it is not.
    */
   public abstract boolean valueIsAcceptable(String valueString,
-                                            MessageBuilder invalidReason);
+                                            LocalizableMessageBuilder invalidReason);
 
   /**
    * Adds a value to the set of values for this argument.  This should only be
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentException.java b/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentException.java
index 28574cb..f49269f 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentException.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.args;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -57,7 +58,7 @@
    *
    * @param  message    The message that explains the problem that occurred.
    */
-  public ArgumentException(Message message)
+  public ArgumentException(LocalizableMessage message)
   {
     super(message);
   }
@@ -70,7 +71,7 @@
    * @param  message    The message that explains the problem that occurred.
    * @param  cause      The exception that was caught to trigger this exception.
    */
-  public ArgumentException(Message message, Throwable cause)
+  public ArgumentException(LocalizableMessage message, Throwable cause)
   {
     super(message, cause);
   }
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentGroup.java b/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentGroup.java
index 7d3e9df..0b47273 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentGroup.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentGroup.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.util.args;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.List;
 import java.util.LinkedList;
@@ -43,7 +44,7 @@
 public class ArgumentGroup implements Comparable<ArgumentGroup> {
 
   // Description for this group of arguments
-  private Message description = null;
+  private LocalizableMessage description = null;
 
   // List of arguments belonging to this group
   private List<Argument> args = null;
@@ -60,7 +61,7 @@
    *        the usage statement.  Groups with higher priority values appear
    *        before groups with lower priority.
    */
-  public ArgumentGroup(Message description, int priority) {
+  public ArgumentGroup(LocalizableMessage description, int priority) {
     this.description = description;
     this.priority = priority;
     this.args = new LinkedList<Argument>();
@@ -71,7 +72,7 @@
    *
    * @return description for this argument group
    */
-  public Message getDescription() {
+  public LocalizableMessage getDescription() {
     return this.description;
   }
 
@@ -80,7 +81,7 @@
    *
    * @param description for this argument group
    */
-  public void setDescription(Message description) {
+  public void setDescription(LocalizableMessage description) {
     this.description = description;
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentParser.java b/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentParser.java
index cd76cb0..7b3d21d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentParser.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/ArgumentParser.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.args;
 
@@ -31,8 +31,8 @@
 import java.io.OutputStream;
 import java.util.*;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.util.SetupUtils;
 
@@ -131,7 +131,7 @@
    * A human-readable description for the tool, which will be included when
    * displaying usage information.
    */
-  private Message toolDescription;
+  private LocalizableMessage toolDescription;
 
   /**
    * The display name that will be used for the trailing arguments in the usage
@@ -152,7 +152,7 @@
    * a header.
    */
   protected ArgumentGroup defaultArgGroup = new ArgumentGroup(
-          Message.EMPTY, Integer.MAX_VALUE);
+          LocalizableMessage.EMPTY, Integer.MAX_VALUE);
 
 
   /**
@@ -197,7 +197,7 @@
    * @param  longArgumentsCaseSensitive  Indicates whether long arguments should
    *                                     be treated in a case-sensitive manner.
    */
-  public ArgumentParser(String mainClassName, Message toolDescription,
+  public ArgumentParser(String mainClassName, LocalizableMessage toolDescription,
                         boolean longArgumentsCaseSensitive)
   {
     this.mainClassName              = mainClassName;
@@ -258,7 +258,7 @@
    *                                     arguments in the generated usage
    *                                     information.
    */
-  public ArgumentParser(String mainClassName, Message toolDescription,
+  public ArgumentParser(String mainClassName, LocalizableMessage toolDescription,
                         boolean longArgumentsCaseSensitive,
                         boolean allowsTrailingArguments,
                         int minTrailingArguments, int maxTrailingArguments,
@@ -309,7 +309,7 @@
    * @return  A human-readable description for this tool, or {@code null} if
    *          none is available.
    */
-  public Message getToolDescription()
+  public LocalizableMessage getToolDescription()
   {
     return toolDescription;
   }
@@ -483,7 +483,7 @@
    *
    * @param description for the default group
    */
-  public void setDefaultArgumentGroupDescription(Message description)
+  public void setDefaultArgumentGroupDescription(LocalizableMessage description)
   {
     this.defaultArgGroup.setDescription(description);
   }
@@ -494,7 +494,7 @@
    *
    * @param description for the LDAP group
    */
-  public void setLdapArgumentGroupDescription(Message description)
+  public void setLdapArgumentGroupDescription(LocalizableMessage description)
   {
     this.ldapArgGroup.setDescription(description);
   }
@@ -505,7 +505,7 @@
    *
    * @param description for the input/output group
    */
-  public void setInputOutputArgumentGroupDescription(Message description)
+  public void setInputOutputArgumentGroupDescription(LocalizableMessage description)
   {
     this.ioArgGroup.setDescription(description);
   }
@@ -516,7 +516,7 @@
    *
    * @param description for the general group
    */
-  public void setGeneralArgumentGroupDescription(Message description)
+  public void setGeneralArgumentGroupDescription(LocalizableMessage description)
   {
     this.generalArgGroup.setDescription(description);
   }
@@ -614,7 +614,7 @@
     {
       String conflictingName = shortIDMap.get(shortID).getName();
 
-      Message message = ERR_ARGPARSER_DUPLICATE_SHORT_ID.get(
+      LocalizableMessage message = ERR_ARGPARSER_DUPLICATE_SHORT_ID.get(
           argument.getName(), String.valueOf(shortID), conflictingName);
       throw new ArgumentException(message);
     }
@@ -649,7 +649,7 @@
       {
         String conflictingName = longIDMap.get(longID).getName();
 
-        Message message = ERR_ARGPARSER_DUPLICATE_LONG_ID.get(
+        LocalizableMessage message = ERR_ARGPARSER_DUPLICATE_LONG_ID.get(
             argument.getName(), argument.getLongIdentifier(), conflictingName);
         throw new ArgumentException(message);
       }
@@ -794,7 +794,7 @@
         if (maxTrailingArguments > 0 &&
             trailingArguments.size() > maxTrailingArguments)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ARGPARSER_TOO_MANY_TRAILING_ARGS.get(maxTrailingArguments);
           throw new ArgumentException(message);
         }
@@ -827,7 +827,7 @@
         else if (equalPos == 0)
         {
           // The argument starts with "--=", which is not acceptable.
-          Message message = ERR_ARGPARSER_LONG_ARG_WITHOUT_NAME.get(arg);
+          LocalizableMessage message = ERR_ARGPARSER_LONG_ARG_WITHOUT_NAME.get(arg);
           throw new ArgumentException(message);
         }
         else
@@ -868,7 +868,7 @@
           else
           {
             // There is no such argument registered.
-            Message message =
+            LocalizableMessage message =
                 ERR_ARGPARSER_NO_ARGUMENT_WITH_LONG_ID.get(origArgName);
             throw new ArgumentException(message);
           }
@@ -895,7 +895,7 @@
           {
             if ((i+1) == numArguments)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID.get(
                       origArgName);
               throw new ArgumentException(message);
@@ -904,10 +904,10 @@
             argValue = rawArguments[++i];
           }
 
-          MessageBuilder invalidReason = new MessageBuilder();
+          LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
           if (! a.valueIsAcceptable(argValue, invalidReason))
           {
-            Message message = ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID.get(
+            LocalizableMessage message = ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID.get(
                 argValue, origArgName, invalidReason.toString());
             throw new ArgumentException(message);
           }
@@ -916,7 +916,7 @@
           // acceptable to have more than one.
           if (a.hasValue() && !a.isMultiValued())
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ARGPARSER_NOT_MULTIVALUED_FOR_LONG_ID.get(origArgName);
             throw new ArgumentException(message);
           }
@@ -927,7 +927,7 @@
         {
           if (argValue != null)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_ARGPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE.get(
                     origArgName);
             throw new ArgumentException(message);
@@ -943,7 +943,7 @@
         // -n value
         if (arg.equals("-"))
         {
-          Message message = ERR_ARGPARSER_INVALID_DASH_AS_ARGUMENT.get();
+          LocalizableMessage message = ERR_ARGPARSER_INVALID_DASH_AS_ARGUMENT.get();
           throw new ArgumentException(message);
         }
 
@@ -984,7 +984,7 @@
           else
           {
             // There is no such argument registered.
-            Message message = ERR_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID.get(
+            LocalizableMessage message = ERR_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID.get(
                 String.valueOf(argCharacter));
             throw new ArgumentException(message);
           }
@@ -1011,7 +1011,7 @@
           {
             if ((i+1) == numArguments)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_ARGPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID.
                     get(String.valueOf(argCharacter));
               throw new ArgumentException(message);
@@ -1020,10 +1020,10 @@
             argValue = rawArguments[++i];
           }
 
-          MessageBuilder invalidReason = new MessageBuilder();
+          LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
           if (! a.valueIsAcceptable(argValue, invalidReason))
           {
-            Message message = ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID.
+            LocalizableMessage message = ERR_ARGPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID.
                 get(argValue, String.valueOf(argCharacter),
                     invalidReason.toString());
             throw new ArgumentException(message);
@@ -1033,7 +1033,7 @@
           // acceptable to have more than one.
           if (a.hasValue() && !a.isMultiValued())
           {
-            Message message = ERR_ARGPARSER_NOT_MULTIVALUED_FOR_SHORT_ID.get(
+            LocalizableMessage message = ERR_ARGPARSER_NOT_MULTIVALUED_FOR_SHORT_ID.get(
                 String.valueOf(argCharacter));
             throw new ArgumentException(message);
           }
@@ -1057,7 +1057,7 @@
               if (b == null)
               {
                 // There is no such argument registered.
-                Message message = ERR_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID.get(
+                LocalizableMessage message = ERR_ARGPARSER_NO_ARGUMENT_WITH_SHORT_ID.get(
                     String.valueOf(argCharacter));
                 throw new ArgumentException(message);
               }
@@ -1065,7 +1065,7 @@
               {
                 // This means we're in a scenario like "-abc" where b is a
                 // valid argument that takes a value.  We don't support that.
-                Message message = ERR_ARGPARSER_CANT_MIX_ARGS_WITH_VALUES.get(
+                LocalizableMessage message = ERR_ARGPARSER_CANT_MIX_ARGS_WITH_VALUES.get(
                     String.valueOf(argCharacter), argValue, String.valueOf(c));
                 throw new ArgumentException(message);
               }
@@ -1097,7 +1097,7 @@
       {
         // It doesn't start with a dash and we don't allow trailing arguments,
         // so this is illegal.
-        Message message = ERR_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT.get(arg);
+        LocalizableMessage message = ERR_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT.get(arg);
         throw new ArgumentException(message);
       }
     }
@@ -1107,7 +1107,7 @@
         && minTrailingArguments > 0
         && trailingArguments.size() < minTrailingArguments)
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS.get(minTrailingArguments);
       throw new ArgumentException(message);
     }
@@ -1145,7 +1145,7 @@
       {
         String value =
             argumentProperties.getProperty(a.getPropertyName().toLowerCase());
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         if (value != null)
         {
           Boolean addValue = true;
@@ -1177,7 +1177,7 @@
         // a problem.
         if (!a.hasValue() && a.isRequired())
         {
-          Message message =
+          LocalizableMessage message =
               ERR_ARGPARSER_NO_VALUE_FOR_REQUIRED_ARG.get(a.getName());
           throw new ArgumentException(message);
         }
@@ -1287,7 +1287,7 @@
     }
     catch (Exception e)
     {
-      Message message = ERR_ARGPARSER_CANNOT_READ_PROPERTIES_FILE.get(String
+      LocalizableMessage message = ERR_ARGPARSER_CANNOT_READ_PROPERTIES_FILE.get(String
           .valueOf(propertiesFilePath), getExceptionMessage(e));
       throw new ArgumentException(message, e);
     }
@@ -1368,8 +1368,8 @@
       if (argGroup.containsArguments() && printHeaders)
       {
         // Print the groups description if any
-        Message groupDesc = argGroup.getDescription();
-        if (groupDesc != null && !Message.EMPTY.equals(groupDesc)) {
+        LocalizableMessage groupDesc = argGroup.getDescription();
+        if (groupDesc != null && !LocalizableMessage.EMPTY.equals(groupDesc)) {
           buffer.append(EOL);
           buffer.append(wrapText(groupDesc.toString(), MAX_LENGTH - 1));
           buffer.append(EOL);
@@ -1416,13 +1416,13 @@
    * @return  A string containing usage information based on the defined
    *          arguments.
    */
-  public Message getUsageMessage()
+  public LocalizableMessage getUsageMessage()
   {
     StringBuilder buffer = new StringBuilder();
     getUsage(buffer);
 
     // TODO: rework getUsage(OutputStream) to work with messages framework
-    return Message.raw(buffer.toString());
+    return LocalizableMessage.raw(buffer.toString());
   }
 
   /**
@@ -1568,7 +1568,7 @@
    * indent the description five characters and try our best to wrap at or
    * before column 79 so it will be friendly to 80-column displays.
    */
-  private void indentAndWrap(String indent, Message text, StringBuilder buffer)
+  private void indentAndWrap(String indent, LocalizableMessage text, StringBuilder buffer)
   {
     int actualSize = MAX_LENGTH - indent.length() - 1;
     if (text.length() <= actualSize)
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/BooleanArgument.java b/opendj3-server-dev/src/server/org/opends/server/util/args/BooleanArgument.java
index cacba99..55157f5 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/BooleanArgument.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/BooleanArgument.java
@@ -22,14 +22,15 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.args;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
 import static org.opends.messages.UtilityMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -51,7 +52,7 @@
    *                           argument, or <CODE>null</CODE> if there is none.
    * @param  longIdentifier    The long identifier for this argument, or
    *                           <CODE>null</CODE> if there is none.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -59,7 +60,7 @@
    */
   public BooleanArgument(String name, Character shortIdentifier,
                          String longIdentifier,
-                         Message description)
+                         LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, false, false, false, null,
@@ -80,7 +81,7 @@
    *          <CODE>false</CODE> if it is not.
    */
   public boolean valueIsAcceptable(String valueString,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // This argument type should never have a value, so any value provided will
     // be unacceptable.
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/FileBasedArgument.java b/opendj3-server-dev/src/server/org/opends/server/util/args/FileBasedArgument.java
index 9acb455..384ac81 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/FileBasedArgument.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/FileBasedArgument.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.args;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -34,7 +35,7 @@
 import java.util.LinkedHashMap;
 
 import static org.opends.messages.UtilityMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -78,7 +79,7 @@
    *                           be displayed in usage information, or
    *                           <CODE>null</CODE> if this argument does not
    *                           require a value.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -86,8 +87,8 @@
    */
   public FileBasedArgument(String name, Character shortIdentifier,
                            String longIdentifier, boolean isRequired,
-                           Message valuePlaceholder,
-                           Message description)
+                           LocalizableMessage valuePlaceholder,
+                           LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, false, true,
@@ -123,7 +124,7 @@
    * @param  propertyName      The name of the property in a property file that
    *                           may be used to override the default value but
    *                           will be overridden by a command-line argument.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -131,9 +132,9 @@
    */
   public FileBasedArgument(String name, Character shortIdentifier,
                            String longIdentifier, boolean isRequired,
-                           boolean isMultiValued, Message valuePlaceholder,
+                           boolean isMultiValued, LocalizableMessage valuePlaceholder,
                            String defaultValue, String propertyName,
-                           Message description)
+                           LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
@@ -171,7 +172,7 @@
    *          <CODE>false</CODE> if it is not.
    */
   public boolean valueIsAcceptable(String valueString,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // First, make sure that the specified file exists.
     File valueFile;
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/IntegerArgument.java b/opendj3-server-dev/src/server/org/opends/server/util/args/IntegerArgument.java
index 9b5c5a2..468606e 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/IntegerArgument.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/IntegerArgument.java
@@ -22,14 +22,15 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.args;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
 import static org.opends.messages.UtilityMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -69,7 +70,7 @@
    *                           be displayed in usage information, or
    *                           <CODE>null</CODE> if this argument does not
    *                           require a value.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -77,8 +78,8 @@
    */
   public IntegerArgument(String name, Character shortIdentifier,
                          String longIdentifier, boolean isRequired,
-                         boolean needsValue, Message valuePlaceholder,
-                         Message description)
+                         boolean needsValue, LocalizableMessage valuePlaceholder,
+                         LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
@@ -116,7 +117,7 @@
    *                           enforced for values of this argument.
    * @param  upperBound        The upper bound that should be enforced for
    *                           values of this argument.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -124,10 +125,10 @@
    */
   public IntegerArgument(String name, Character shortIdentifier,
                          String longIdentifier, boolean isRequired,
-                         boolean needsValue, Message valuePlaceholder,
+                         boolean needsValue, LocalizableMessage valuePlaceholder,
                          boolean hasLowerBound, int lowerBound,
                          boolean hasUpperBound, int upperBound,
-                         Message description)
+                         LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
@@ -140,7 +141,7 @@
 
     if (hasLowerBound && hasUpperBound && (lowerBound > upperBound))
     {
-      Message message = ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND.get(
+      LocalizableMessage message = ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND.get(
           name, lowerBound, upperBound);
       throw new ArgumentException(message);
     }
@@ -173,7 +174,7 @@
    * @param  propertyName      The name of the property in a property file that
    *                           may be used to override the default value but
    *                           will be overridden by a command-line argument.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -182,9 +183,9 @@
   public IntegerArgument(String name, Character shortIdentifier,
                          String longIdentifier, boolean isRequired,
                          boolean isMultiValued, boolean needsValue,
-                         Message valuePlaceholder, int defaultValue,
+                         LocalizableMessage valuePlaceholder, int defaultValue,
                          String propertyName,
-                         Message description)
+                         LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
@@ -232,7 +233,7 @@
    *                           enforced for values of this argument.
    * @param  upperBound        The upper bound that should be enforced for
    *                           values of this argument.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -241,10 +242,10 @@
   public IntegerArgument(String name, Character shortIdentifier,
                          String longIdentifier, boolean isRequired,
                          boolean isMultiValued, boolean needsValue,
-                         Message valuePlaceholder, int defaultValue,
+                         LocalizableMessage valuePlaceholder, int defaultValue,
                          String propertyName, boolean hasLowerBound,
                          int lowerBound, boolean hasUpperBound, int upperBound,
-                         Message description)
+                         LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
@@ -258,7 +259,7 @@
 
     if (hasLowerBound && hasUpperBound && (lowerBound > upperBound))
     {
-      Message message = ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND.get(
+      LocalizableMessage message = ERR_INTARG_LOWER_BOUND_ABOVE_UPPER_BOUND.get(
           name, lowerBound, upperBound);
       throw new ArgumentException(message);
     }
@@ -330,7 +331,7 @@
    *          <CODE>false</CODE> if it is not.
    */
   public boolean valueIsAcceptable(String valueString,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // First, the value must be decodable as an integer.
     int intValue;
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/LDAPConnectionArgumentParser.java b/opendj3-server-dev/src/server/org/opends/server/util/args/LDAPConnectionArgumentParser.java
index 7892eb9..25ffcba 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/LDAPConnectionArgumentParser.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/LDAPConnectionArgumentParser.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.server.util.args;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.ToolMessages.*;
 import org.opends.server.tools.LDAPConnection;
 import org.opends.server.tools.LDAPConnectionOptions;
@@ -75,7 +75,7 @@
    * the arguments useSSL and startTLS are not present.
     */
   public LDAPConnectionArgumentParser(String mainClassName,
-                                      Message toolDescription,
+                                      LocalizableMessage toolDescription,
                                       boolean longArgumentsCaseSensitive,
                                       ArgumentGroup argumentGroup,
                                       boolean alwaysSSL) {
@@ -121,7 +121,7 @@
    * the arguments useSSL and startTLS are not present.
     */
   public LDAPConnectionArgumentParser(String mainClassName,
-                                      Message toolDescription,
+                                      LocalizableMessage toolDescription,
                                       boolean longArgumentsCaseSensitive,
                                       boolean allowsTrailingArguments,
                                       int minTrailingArguments,
@@ -189,7 +189,7 @@
     if (args.bindPasswordArg.isPresent() &&
             args.bindPasswordFileArg.isPresent())
     {
-      Message message = ERR_LDAP_CONN_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+      LocalizableMessage message = ERR_LDAP_CONN_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
               args.bindPasswordArg.getLongIdentifier(),
               args.bindPasswordFileArg.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -202,7 +202,7 @@
     if (args.keyStorePasswordArg.isPresent() &&
             args.keyStorePasswordFileArg.isPresent())
     {
-      Message message = ERR_LDAP_CONN_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+      LocalizableMessage message = ERR_LDAP_CONN_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
               args.keyStorePasswordArg.getLongIdentifier(),
               args.keyStorePasswordFileArg.getLongIdentifier());
       throw new ArgumentException(message);
@@ -214,7 +214,7 @@
     if (args.trustStorePasswordArg.isPresent() &&
             args.trustStorePasswordFileArg.isPresent())
     {
-      Message message = ERR_LDAP_CONN_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+      LocalizableMessage message = ERR_LDAP_CONN_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
               args.trustStorePasswordArg.getLongIdentifier(),
               args.trustStorePasswordFileArg.getLongIdentifier());
       err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -234,7 +234,7 @@
     {
       if (args.useStartTLSArg.isPresent())
       {
-        Message message = ERR_LDAP_CONN_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
+        LocalizableMessage message = ERR_LDAP_CONN_MUTUALLY_EXCLUSIVE_ARGUMENTS.get(
                 args.useSSLArg.getLongIdentifier(),
                 args.useSSLArg.getLongIdentifier());
         err.println(wrapText(message, MAX_LINE_WIDTH));
@@ -279,7 +279,7 @@
       }
       catch (SSLConnectionException sce)
       {
-        Message message =
+        LocalizableMessage message =
                 ERR_LDAP_CONN_CANNOT_INITIALIZE_SSL.get(sce.getMessage());
         err.println(wrapText(message, MAX_LINE_WIDTH));
       }
@@ -298,7 +298,7 @@
         int equalPos = s.indexOf('=');
         if (equalPos <= 0)
         {
-          Message message = ERR_LDAP_CONN_CANNOT_PARSE_SASL_OPTION.get(s);
+          LocalizableMessage message = ERR_LDAP_CONN_CANNOT_PARSE_SASL_OPTION.get(s);
           err.println(wrapText(message, MAX_LINE_WIDTH));
           throw new ArgumentException(message);
         }
@@ -319,7 +319,7 @@
 
       if (mechanism == null)
       {
-        Message message = ERR_LDAP_CONN_NO_SASL_MECHANISM.get();
+        LocalizableMessage message = ERR_LDAP_CONN_NO_SASL_MECHANISM.get();
         err.println(wrapText(message, MAX_LINE_WIDTH));
         throw new ArgumentException(message);
       }
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/MultiChoiceArgument.java b/opendj3-server-dev/src/server/org/opends/server/util/args/MultiChoiceArgument.java
index 05c071a..8834f4b 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/MultiChoiceArgument.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/MultiChoiceArgument.java
@@ -22,16 +22,17 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.args;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
 import java.util.HashSet;
 
 import static org.opends.messages.UtilityMessages.*;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import static org.opends.server.util.StaticUtils.*;
 
 
@@ -75,7 +76,7 @@
    *                           formatted in lowercase.
    * @param  caseSensitive     Indicates whether the set of allowed values
    *                           should be treated in a case-sensitive manner.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -83,10 +84,10 @@
    */
   public MultiChoiceArgument(String name, Character shortIdentifier,
                              String longIdentifier, boolean isRequired,
-                             boolean needsValue, Message valuePlaceholder,
+                             boolean needsValue, LocalizableMessage valuePlaceholder,
                              HashSet<String> allowedValues,
                              boolean caseSensitive,
-                             Message description)
+                             LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
@@ -129,7 +130,7 @@
    *                           formatted in lowercase.
    * @param  caseSensitive     Indicates whether the set of allowed values
    *                           should be treated in a case-sensitive manner.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -138,10 +139,10 @@
   public MultiChoiceArgument(String name, Character shortIdentifier,
                              String longIdentifier, boolean isRequired,
                              boolean isMultiValued, boolean needsValue,
-                             Message valuePlaceholder, String defaultValue,
+                             LocalizableMessage valuePlaceholder, String defaultValue,
                              String propertyName, HashSet<String> allowedValues,
                              boolean caseSensitive,
-                             Message description)
+                             LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
@@ -193,7 +194,7 @@
    *          <CODE>false</CODE> if it is not.
    */
   public boolean valueIsAcceptable(String valueString,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     if (caseSensitive)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/StringArgument.java b/opendj3-server-dev/src/server/org/opends/server/util/args/StringArgument.java
index b1565bd..962f708 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/StringArgument.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/StringArgument.java
@@ -22,11 +22,12 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.args;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -51,7 +52,7 @@
    *                           be displayed in usage information, or
    *                           <CODE>null</CODE> if this argument does not
    *                           require a value.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -59,8 +60,8 @@
    */
   public StringArgument(String name, Character shortIdentifier,
                         String longIdentifier, boolean isRequired,
-                        boolean needsValue, Message valuePlaceholder,
-                        Message description)
+                        boolean needsValue, LocalizableMessage valuePlaceholder,
+                        LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, false, needsValue,
@@ -94,7 +95,7 @@
    * @param  propertyName      The name of the property in a property file that
    *                           may be used to override the default value but
    *                           will be overridden by a command-line argument.
-   * @param  description       Message for the description of this
+   * @param  description       LocalizableMessage for the description of this
    *                           argument.
    *
    * @throws  ArgumentException  If there is a problem with any of the
@@ -103,8 +104,8 @@
   public StringArgument(String name, Character shortIdentifier,
                         String longIdentifier, boolean isRequired,
                         boolean isMultiValued, boolean needsValue,
-                        Message valuePlaceholder, String defaultValue,
-                        String propertyName, Message description)
+                        LocalizableMessage valuePlaceholder, String defaultValue,
+                        String propertyName, LocalizableMessage description)
          throws ArgumentException
   {
     super(name, shortIdentifier, longIdentifier, isRequired, isMultiValued,
@@ -126,7 +127,7 @@
    *          <CODE>false</CODE> if it is not.
    */
   public boolean valueIsAcceptable(String valueString,
-                                   MessageBuilder invalidReason)
+                                   LocalizableMessageBuilder invalidReason)
   {
     // All values will be acceptable for this argument.
     return true;
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/SubCommand.java b/opendj3-server-dev/src/server/org/opends/server/util/args/SubCommand.java
index 2867936..b7697ee 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/SubCommand.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/SubCommand.java
@@ -22,9 +22,10 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.args;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -61,7 +62,7 @@
   private LinkedList<Argument> arguments;
 
   // The description for this subcommand.
-  private Message description;
+  private LocalizableMessage description;
 
   // The name of this subcommand.
   private String name;
@@ -102,7 +103,7 @@
    *           subcommand with the same name.
    */
   public SubCommand(SubCommandArgumentParser parser, String name,
-      Message description) throws ArgumentException
+      LocalizableMessage description) throws ArgumentException
   {
     this(parser, name, false, 0, 0, null, description);
   }
@@ -143,7 +144,7 @@
   public SubCommand(SubCommandArgumentParser parser, String name,
       boolean allowsTrailingArguments, int minTrailingArguments,
       int maxTrailingArguments, String trailingArgsDisplayName,
-      Message description) throws ArgumentException
+      LocalizableMessage description) throws ArgumentException
   {
     this.parser = parser;
     this.name = name;
@@ -162,7 +163,7 @@
 
     if (parser.hasSubCommand(nameToCheck))
     {
-      Message message = ERR_ARG_SUBCOMMAND_DUPLICATE_SUBCOMMAND.get(name);
+      LocalizableMessage message = ERR_ARG_SUBCOMMAND_DUPLICATE_SUBCOMMAND.get(name);
       throw new ArgumentException(message);
     }
 
@@ -190,7 +191,7 @@
    *
    * @return  The description for this subcommand.
    */
-  public Message getDescription()
+  public LocalizableMessage getDescription()
   {
     return description;
   }
@@ -280,7 +281,7 @@
     {
       if (argumentName.equals(a.getName()))
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ARG_SUBCOMMAND_DUPLICATE_ARGUMENT_NAME.get(name, argumentName);
         throw new ArgumentException(message);
       }
@@ -288,7 +289,7 @@
 
     if (parser.hasGlobalArgument(argumentName))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_ARG_SUBCOMMAND_ARGUMENT_GLOBAL_CONFLICT.get(argumentName, name);
       throw new ArgumentException(message);
     }
@@ -299,7 +300,7 @@
     {
       if (shortIDMap.containsKey(shortID))
       {
-        Message message = ERR_ARG_SUBCOMMAND_DUPLICATE_SHORT_ID.
+        LocalizableMessage message = ERR_ARG_SUBCOMMAND_DUPLICATE_SHORT_ID.
             get(argumentName, name, String.valueOf(shortID),
                 shortIDMap.get(shortID).getName());
         throw new ArgumentException(message);
@@ -308,7 +309,7 @@
       Argument arg = parser.getGlobalArgumentForShortID(shortID);
       if (arg != null)
       {
-        Message message = ERR_ARG_SUBCOMMAND_ARGUMENT_SHORT_ID_GLOBAL_CONFLICT.
+        LocalizableMessage message = ERR_ARG_SUBCOMMAND_ARGUMENT_SHORT_ID_GLOBAL_CONFLICT.
             get(argumentName, name, String.valueOf(shortID), arg.getName());
         throw new ArgumentException(message);
       }
@@ -325,7 +326,7 @@
 
       if (longIDMap.containsKey(longID))
       {
-        Message message = ERR_ARG_SUBCOMMAND_DUPLICATE_LONG_ID.get(
+        LocalizableMessage message = ERR_ARG_SUBCOMMAND_DUPLICATE_LONG_ID.get(
             argumentName, name, argument.getLongIdentifier(),
             longIDMap.get(longID).getName());
         throw new ArgumentException(message);
@@ -334,7 +335,7 @@
       Argument arg = parser.getGlobalArgumentForLongID(longID);
       if (arg != null)
       {
-        Message message = ERR_ARG_SUBCOMMAND_ARGUMENT_LONG_ID_GLOBAL_CONFLICT.
+        LocalizableMessage message = ERR_ARG_SUBCOMMAND_ARGUMENT_LONG_ID_GLOBAL_CONFLICT.
             get(argumentName, name, argument.getLongIdentifier(),
                 arg.getName());
         throw new ArgumentException(message);
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/args/SubCommandArgumentParser.java b/opendj3-server-dev/src/server/org/opends/server/util/args/SubCommandArgumentParser.java
index 20485ca..b805254 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/args/SubCommandArgumentParser.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/args/SubCommandArgumentParser.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.args;
 
@@ -30,8 +30,8 @@
 import java.io.OutputStream;
 import java.util.*;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.util.SetupUtils;
 
 import static org.opends.messages.UtilityMessages.*;
@@ -116,7 +116,7 @@
    * A human-readable description for the tool, which will be included when
    * displaying usage information.
    */
-  private final Message toolDescription;
+  private final LocalizableMessage toolDescription;
 
   /** The raw set of command-line arguments that were provided. */
   private String[] rawArguments;
@@ -148,7 +148,7 @@
    *                                     argument names should be treated in a
    *                                     case-sensitive manner.
    */
-  public SubCommandArgumentParser(String mainClassName, Message toolDescription,
+  public SubCommandArgumentParser(String mainClassName, LocalizableMessage toolDescription,
                                   boolean longArgumentsCaseSensitive)
   {
     super(mainClassName, toolDescription, longArgumentsCaseSensitive);
@@ -196,7 +196,7 @@
    *          none is available.
    */
   @Override
-  public Message getToolDescription()
+  public LocalizableMessage getToolDescription()
   {
     return toolDescription;
   }
@@ -463,7 +463,7 @@
     String argumentName = argument.getName();
     if (globalArgumentMap.containsKey(argumentName))
     {
-      Message message =
+      LocalizableMessage message =
           ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_NAME.get(argumentName);
       throw new ArgumentException(message);
     }
@@ -471,7 +471,7 @@
     {
       if (s.getArgumentForName(argumentName) != null)
       {
-        Message message = ERR_SUBCMDPARSER_GLOBAL_ARG_NAME_SUBCMD_CONFLICT.get(
+        LocalizableMessage message = ERR_SUBCMDPARSER_GLOBAL_ARG_NAME_SUBCMD_CONFLICT.get(
             argumentName, s.getName());
         throw new ArgumentException(message);
       }
@@ -485,7 +485,7 @@
       {
         String name = globalShortIDMap.get(shortID).getName();
 
-        Message message = ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_SHORT_ID.get(
+        LocalizableMessage message = ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_SHORT_ID.get(
             String.valueOf(shortID), argumentName, name);
         throw new ArgumentException(message);
       }
@@ -497,7 +497,7 @@
           String cmdName = s.getName();
           String name    = s.getArgument(shortID).getName();
 
-          Message message = ERR_SUBCMDPARSER_GLOBAL_ARG_SHORT_ID_CONFLICT.get(
+          LocalizableMessage message = ERR_SUBCMDPARSER_GLOBAL_ARG_SHORT_ID_CONFLICT.get(
               String.valueOf(shortID), argumentName, name, cmdName);
           throw new ArgumentException(message);
         }
@@ -517,7 +517,7 @@
       {
         String name = globalLongIDMap.get(longID).getName();
 
-        Message message = ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_LONG_ID.get(
+        LocalizableMessage message = ERR_SUBCMDPARSER_DUPLICATE_GLOBAL_ARG_LONG_ID.get(
             argument.getLongIdentifier(), argumentName, name);
         throw new ArgumentException(message);
       }
@@ -529,7 +529,7 @@
           String cmdName = s.getName();
           String name    = s.getArgument(longID).getName();
 
-          Message message = ERR_SUBCMDPARSER_GLOBAL_ARG_LONG_ID_CONFLICT.get(
+          LocalizableMessage message = ERR_SUBCMDPARSER_GLOBAL_ARG_LONG_ID_CONFLICT.get(
               argument.getLongIdentifier(), argumentName, name, cmdName);
           throw new ArgumentException(message);
         }
@@ -712,7 +712,7 @@
         if (subCommand.getMaxTrailingArguments() > 0
             && trailingArguments.size() > subCommand.getMaxTrailingArguments())
         {
-          Message message = ERR_ARGPARSER_TOO_MANY_TRAILING_ARGS.get(
+          LocalizableMessage message = ERR_ARGPARSER_TOO_MANY_TRAILING_ARGS.get(
               subCommand.getMaxTrailingArguments());
           throw new ArgumentException(message);
         }
@@ -742,7 +742,7 @@
         else if (equalPos == 0)
         {
           // The argument starts with "--=", which is not acceptable.
-          Message message = ERR_SUBCMDPARSER_LONG_ARG_WITHOUT_NAME.get(arg);
+          LocalizableMessage message = ERR_SUBCMDPARSER_LONG_ARG_WITHOUT_NAME.get(arg);
           throw new ArgumentException(message);
         }
         else
@@ -786,7 +786,7 @@
             else
             {
               // There is no such global argument.
-              Message message =
+              LocalizableMessage message =
                   ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_LONG_ID.get(
                       origArgName);
               throw new ArgumentException(message);
@@ -817,7 +817,7 @@
               else
               {
                 // There is no such global or subcommand argument.
-                Message message =
+                LocalizableMessage message =
                     ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_LONG_ID.get(origArgName);
                 throw new ArgumentException(message);
               }
@@ -843,7 +843,7 @@
           {
             if ((i+1) == numArguments)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_LONG_ID.
                     get(argName);
               throw new ArgumentException(message);
@@ -852,10 +852,10 @@
             argValue = rawArguments[++i];
           }
 
-          MessageBuilder invalidReason = new MessageBuilder();
+          LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
           if (! a.valueIsAcceptable(argValue, invalidReason))
           {
-            Message message = ERR_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID.
+            LocalizableMessage message = ERR_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_LONG_ID.
                 get(argValue, argName, invalidReason.toString());
             throw new ArgumentException(message);
           }
@@ -864,7 +864,7 @@
           // acceptable to have more than one.
           if (a.hasValue() && !a.isMultiValued())
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_SUBCMDPARSER_NOT_MULTIVALUED_FOR_LONG_ID.get(origArgName);
             throw new ArgumentException(message);
           }
@@ -875,7 +875,7 @@
         {
           if (argValue != null)
           {
-            Message message =
+            LocalizableMessage message =
                 ERR_SUBCMDPARSER_ARG_FOR_LONG_ID_DOESNT_TAKE_VALUE.get(
                     origArgName);
             throw new ArgumentException(message);
@@ -891,7 +891,7 @@
         // -n value
         if (arg.equals("-"))
         {
-          Message message = ERR_SUBCMDPARSER_INVALID_DASH_AS_ARGUMENT.get();
+          LocalizableMessage message = ERR_SUBCMDPARSER_INVALID_DASH_AS_ARGUMENT.get();
           throw new ArgumentException(message);
         }
 
@@ -940,7 +940,7 @@
               {
                 // -V is defined in another suncommand, so we can
                 // accepted it as the version information argument
-                Message message =
+                LocalizableMessage message =
                     ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID.
                       get(String.valueOf(argCharacter));
                 throw new ArgumentException(message);
@@ -949,7 +949,7 @@
             else
             {
               // There is no such argument registered.
-              Message message =
+              LocalizableMessage message =
                   ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID.
                     get(String.valueOf(argCharacter));
               throw new ArgumentException(message);
@@ -980,7 +980,7 @@
               else
               {
                 // There is no such argument registered.
-                Message message = ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID.get(
+                LocalizableMessage message = ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID.get(
                     String.valueOf(argCharacter));
                 throw new ArgumentException(message);
               }
@@ -1006,7 +1006,7 @@
           {
             if ((i+1) == numArguments)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_SUBCMDPARSER_NO_VALUE_FOR_ARGUMENT_WITH_SHORT_ID.
                     get(String.valueOf(argCharacter));
               throw new ArgumentException(message);
@@ -1015,10 +1015,10 @@
             argValue = rawArguments[++i];
           }
 
-          MessageBuilder invalidReason = new MessageBuilder();
+          LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
           if (! a.valueIsAcceptable(argValue, invalidReason))
           {
-            Message message = ERR_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID.
+            LocalizableMessage message = ERR_SUBCMDPARSER_VALUE_UNACCEPTABLE_FOR_SHORT_ID.
                 get(argValue, String.valueOf(argCharacter),
                     invalidReason.toString());
             throw new ArgumentException(message);
@@ -1028,7 +1028,7 @@
           // acceptable to have more than one.
           if (a.hasValue() && !a.isMultiValued())
           {
-            Message message = ERR_SUBCMDPARSER_NOT_MULTIVALUED_FOR_SHORT_ID.get(
+            LocalizableMessage message = ERR_SUBCMDPARSER_NOT_MULTIVALUED_FOR_SHORT_ID.get(
                 String.valueOf(argCharacter));
             throw new ArgumentException(message);
           }
@@ -1053,7 +1053,7 @@
               {
                 if (subCommand == null)
                 {
-                  Message message =
+                  LocalizableMessage message =
                       ERR_SUBCMDPARSER_NO_GLOBAL_ARGUMENT_FOR_SHORT_ID.
                         get(String.valueOf(argCharacter));
                   throw new ArgumentException(message);
@@ -1063,7 +1063,7 @@
                   b = subCommand.getArgument(c);
                   if (b == null)
                   {
-                    Message message = ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID.
+                    LocalizableMessage message = ERR_SUBCMDPARSER_NO_ARGUMENT_FOR_SHORT_ID.
                         get(String.valueOf(argCharacter));
                     throw new ArgumentException(message);
                   }
@@ -1074,7 +1074,7 @@
               {
                 // This means we're in a scenario like "-abc" where b is a
                 // valid argument that takes a value.  We don't support that.
-                Message message = ERR_SUBCMDPARSER_CANT_MIX_ARGS_WITH_VALUES.
+                LocalizableMessage message = ERR_SUBCMDPARSER_CANT_MIX_ARGS_WITH_VALUES.
                     get(String.valueOf(argCharacter), argValue,
                         String.valueOf(c));
                 throw new ArgumentException(message);
@@ -1107,7 +1107,7 @@
         else
         {
           // Trailing arguments are not allowed for this sub-command.
-          Message message = ERR_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT.get(arg);
+          LocalizableMessage message = ERR_ARGPARSER_DISALLOWED_TRAILING_ARGUMENT.get(arg);
           throw new ArgumentException(message);
         }
       }
@@ -1123,7 +1123,7 @@
         SubCommand sc = subCommands.get(nameToCheck);
         if (sc == null)
         {
-          Message message = ERR_SUBCMDPARSER_INVALID_ARGUMENT.get(arg);
+          LocalizableMessage message = ERR_SUBCMDPARSER_INVALID_ARGUMENT.get(arg);
           throw new ArgumentException(message);
         }
         else
@@ -1142,7 +1142,7 @@
       if (subCommand.allowsTrailingArguments() && minTrailingArguments > 0
           && trailingArguments.size() < minTrailingArguments)
       {
-        Message message =
+        LocalizableMessage message =
             ERR_ARGPARSER_TOO_FEW_TRAILING_ARGUMENTS.get(minTrailingArguments);
         throw new ArgumentException(message);
       }
@@ -1189,7 +1189,7 @@
    * @param  subCommand  The subcommand for which to display the usage
    *                     information.
    */
-  public void getSubCommandUsage(MessageBuilder buffer, SubCommand subCommand)
+  public void getSubCommandUsage(LocalizableMessageBuilder buffer, SubCommand subCommand)
   {
     usageOrVersionDisplayed = true;
     String scriptName = System.getProperty(PROPERTY_SCRIPT_NAME);
@@ -1320,10 +1320,10 @@
    * indent the description five characters and try our best to wrap at or
    * before column 79 so it will be friendly to 80-column displays.
    * <p>
-   * FIXME Try to merge with #indentAndWrap(Message, Message, MessageBuilder).
+   * FIXME Try to merge with #indentAndWrap(LocalizableMessage, LocalizableMessage, LocalizableMessageBuilder).
    */
-  private void indentAndWrap2(String indent, Message text,
-      MessageBuilder buffer)
+  private void indentAndWrap2(String indent, LocalizableMessage text,
+      LocalizableMessageBuilder buffer)
   {
     int actualSize = MAX_LENGTH - indent.length() - 1;
     if (text.length() <= actualSize)
@@ -1387,7 +1387,7 @@
   @Override
   public String getUsage()
   {
-    MessageBuilder buffer = new MessageBuilder();
+    LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
 
     if (subCommand == null) {
       if (System.getProperty("org.forgerock.opendj.gendoc") != null) {
@@ -1417,7 +1417,7 @@
    *
    * @return A string describing how the user can get more help.
    */
-  public Message getHelpUsageReference()
+  public LocalizableMessage getHelpUsageReference()
   {
     usageOrVersionDisplayed = true;
     String scriptName = System.getProperty(PROPERTY_SCRIPT_NAME);
@@ -1426,7 +1426,7 @@
       scriptName = "java " + mainClassName;
     }
 
-    MessageBuilder buffer = new MessageBuilder();
+    LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
     buffer.append(INFO_GLOBAL_HELP_REFERENCE.get(scriptName));
     buffer.append(EOL);
     return buffer.toMessage();
@@ -1482,7 +1482,7 @@
 
   /** Get usage for a specific usage argument. */
   private void getUsage(Argument a, OutputStream outputStream) {
-    MessageBuilder buffer = new MessageBuilder();
+    LocalizableMessageBuilder buffer = new LocalizableMessageBuilder();
 
     if (a.equals(usageArgument) && subCommand != null) {
       getSubCommandUsage(buffer, subCommand);
@@ -1522,7 +1522,7 @@
    * Appends complete usage information for the specified set of sub-commands.
    */
   private void getFullUsage(Collection<SubCommand> c,
-      boolean showGlobalOptions, MessageBuilder buffer) {
+      boolean showGlobalOptions, LocalizableMessageBuilder buffer) {
     usageOrVersionDisplayed = true;
     if (toolDescription != null && toolDescription.length() > 0)
     {
@@ -1588,7 +1588,7 @@
         }
         buffer.append(sc.getName());
         buffer.append(EOL);
-        indentAndWrap(Message.raw(INDENT), sc.getDescription(), buffer);
+        indentAndWrap(LocalizableMessage.raw(INDENT), sc.getDescription(), buffer);
         buffer.append(EOL);
         isFirst = false;
       }
@@ -1616,8 +1616,8 @@
         if (argGroup.containsArguments() && printGroupHeaders)
         {
           // Print the groups description if any
-          Message groupDesc = argGroup.getDescription();
-          if (groupDesc != null && !Message.EMPTY.equals(groupDesc)) {
+          LocalizableMessage groupDesc = argGroup.getDescription();
+          if (groupDesc != null && !LocalizableMessage.EMPTY.equals(groupDesc)) {
             buffer.append(EOL);
             buffer.append(wrapText(groupDesc.toString(), MAX_LENGTH - 1));
             buffer.append(EOL);
@@ -1657,11 +1657,11 @@
    *          The buffer to which the usage information should be
    *          appended.
    */
-  private void printArgumentUsage(Argument a, MessageBuilder buffer) {
+  private void printArgumentUsage(Argument a, LocalizableMessageBuilder buffer) {
     String value;
     if (a.needsValue())
     {
-      Message pHolder = a.getValuePlaceholder();
+      LocalizableMessage pHolder = a.getValuePlaceholder();
       if (pHolder == null)
       {
         value = " {value}";
@@ -1711,12 +1711,12 @@
 
     buffer.append(EOL);
 
-    indentAndWrap(Message.raw(INDENT), a.getDescription(), buffer);
+    indentAndWrap(LocalizableMessage.raw(INDENT), a.getDescription(), buffer);
     if (a.needsValue()
         && a.getDefaultValue() != null
         && a.getDefaultValue().length() > 0)
      {
-       indentAndWrap(Message.raw(INDENT),
+       indentAndWrap(LocalizableMessage.raw(INDENT),
            INFO_ARGPARSER_USAGE_DEFAULT_VALUE.get(a.getDefaultValue()),
            buffer);
      }
@@ -1729,8 +1729,8 @@
    * indent the description five characters and try our best to wrap at or
    * before column 79 so it will be friendly to 80-column displays.
    */
-  private void indentAndWrap(Message indent, Message text,
-                             MessageBuilder buffer)
+  private void indentAndWrap(LocalizableMessage indent, LocalizableMessage text,
+                             LocalizableMessageBuilder buffer)
   {
     int actualSize = MAX_LENGTH - indent.length();
     if (text.length() <= actualSize)
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/cli/CLIException.java b/opendj3-server-dev/src/server/org/opends/server/util/cli/CLIException.java
index bd42658..759d969 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/cli/CLIException.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/cli/CLIException.java
@@ -22,12 +22,13 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.cli;
 
 
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.UtilityMessages;
 import org.opends.server.types.IdentifiedException;
 
@@ -70,7 +71,7 @@
    * @param message
    *          The message explaining the problem that occurred.
    */
-  public CLIException(Message message) {
+  public CLIException(LocalizableMessage message) {
     super(message);
   }
 
@@ -84,7 +85,7 @@
    * @param cause
    *          The cause of this exception.
    */
-  public CLIException(Message message, Throwable cause) {
+  public CLIException(LocalizableMessage message, Throwable cause) {
     super(message, cause);
   }
 
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/cli/ConsoleApplication.java b/opendj3-server-dev/src/server/org/opends/server/util/cli/ConsoleApplication.java
index 07b75f0..84c18fa 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/cli/ConsoleApplication.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/cli/ConsoleApplication.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.util.cli;
 
@@ -59,13 +59,14 @@
 import org.opends.admin.ads.util.ApplicationTrustManager;
 import org.opends.admin.ads.util.ConnectionUtils;
 import org.opends.admin.ads.util.OpendsCertificateException;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.quicksetup.util.Utils;
 import org.opends.server.protocols.ldap.LDAPResultCode;
 import org.opends.server.tools.ClientException;
 import org.opends.server.types.NullOutputStream;
 import org.opends.server.util.PasswordReader;
 import org.opends.server.util.SetupUtils;
+import org.opends.server.util.StaticUtils;
 
 
 /**
@@ -223,7 +224,7 @@
    *           If the user's response could not be read from the console for
    *           some reason.
    */
-  public final boolean confirmAction(Message prompt, final boolean defaultValue)
+  public final boolean confirmAction(LocalizableMessage prompt, final boolean defaultValue)
       throws CLIException
   {
     if (!isInteractive())
@@ -231,9 +232,9 @@
       return defaultValue;
     }
 
-    final Message yes = INFO_GENERAL_YES.get();
-    final Message no = INFO_GENERAL_NO.get();
-    final Message errMsg = ERR_CONSOLE_APP_CONFIRM.get(yes, no);
+    final LocalizableMessage yes = INFO_GENERAL_YES.get();
+    final LocalizableMessage no = INFO_GENERAL_NO.get();
+    final LocalizableMessage errMsg = ERR_CONSOLE_APP_CONFIRM.get(yes, no);
     prompt =
         INFO_MENU_PROMPT_CONFIRM.get(prompt, yes, no, defaultValue ? yes : no);
 
@@ -357,7 +358,7 @@
    */
   public final void pressReturnToContinue()
   {
-    Message msg = INFO_MENU_PROMPT_RETURN_TO_CONTINUE.get();
+    LocalizableMessage msg = INFO_MENU_PROMPT_RETURN_TO_CONTINUE.get();
     try
     {
       readLineOfInput(msg);
@@ -382,7 +383,7 @@
    * @param msg
    *          The message.
    */
-  public final void println(Message msg)
+  public final void println(LocalizableMessage msg)
   {
     err.println(wrapText(msg, MAX_LINE_WIDTH));
   }
@@ -393,7 +394,7 @@
    * @param msg
    *          The message.
    */
-  public final void print(Message msg)
+  public final void print(LocalizableMessage msg)
   {
     err.print(wrapText(msg, MAX_LINE_WIDTH));
   }
@@ -406,7 +407,7 @@
    * @param indent
    *          The indentation.
    */
-  public final void println(final Message msg, final int indent)
+  public final void println(final LocalizableMessage msg, final int indent)
   {
     println(Style.NORMAL, msg, indent);
   }
@@ -421,7 +422,7 @@
    * @param indent
    *          The indentation.
    */
-  public final void println(final Style msgStyle, final Message msg,
+  public final void println(final Style msgStyle, final LocalizableMessage msg,
       final int indent)
   {
     if (!isQuiet())
@@ -468,12 +469,12 @@
 
   /**
    * Displays a message to the output stream if we are not in quiet mode.
-   * Message is wrap to max line width.
+   * LocalizableMessage is wrap to max line width.
    *
    * @param msg
    *          The message.
    */
-  public final void printlnProgress(Message msg)
+  public final void printlnProgress(LocalizableMessage msg)
   {
     if (!isQuiet())
     {
@@ -487,7 +488,7 @@
    * @param msg
    *          The message.
    */
-  public final void printProgress(final Message msg)
+  public final void printProgress(final LocalizableMessage msg)
   {
     if (!isQuiet())
     {
@@ -575,7 +576,7 @@
    * @param indent
    *          The number of columns to indent.
    */
-  public final void printErrln(Message msg, int indent)
+  public final void printErrln(LocalizableMessage msg, int indent)
   {
     err.println(wrapText(msg, MAX_LINE_WIDTH, indent));
   }
@@ -586,7 +587,7 @@
    * @param msg
    *          The verbose message.
    */
-  public final void printVerboseMessage(Message msg)
+  public final void printVerboseMessage(LocalizableMessage msg)
   {
     if (isVerbose() || isInteractive())
     {
@@ -604,7 +605,7 @@
    * @throws CLIException
    *           If the line of input could not be retrieved for some reason.
    */
-  public final String readLineOfInput(Message prompt) throws CLIException
+  public final String readLineOfInput(LocalizableMessage prompt) throws CLIException
   {
     if (prompt != null)
     {
@@ -643,12 +644,12 @@
    * @throws CLIException
    *           If an Exception occurs during the process.
    */
-  public final String readInput(final Message prompt,
+  public final String readInput(final LocalizableMessage prompt,
       final String defaultValue, final Style msgStyle)
       throws CLIException
   {
     String answer = null;
-    final Message messageToDisplay =
+    final LocalizableMessage messageToDisplay =
         INFO_PROMPT_SINGLE_DEFAULT.get(prompt.toString(), defaultValue);
     if (msgStyle == Style.TITLE)
     {
@@ -702,7 +703,7 @@
    *           If the line of input could not be retrieved for some reason.
    * @return The string value read from the user.
    */
-  public String readInput(Message prompt, String defaultValue)
+  public String readInput(LocalizableMessage prompt, String defaultValue)
       throws CLIException
   {
     while (true)
@@ -748,7 +749,7 @@
    *          the Logger to be used to log the error message.
    * @return The string value read from the user.
    */
-  public String readInput(Message prompt, String defaultValue, Logger logger)
+  public String readInput(LocalizableMessage prompt, String defaultValue, Logger logger)
   {
     String s = defaultValue;
     try
@@ -771,7 +772,7 @@
    * @throws CLIException
    *           If the password could not be retrieved for some reason.
    */
-  public final String readPassword(Message prompt) throws CLIException
+  public final String readPassword(LocalizableMessage prompt) throws CLIException
   {
     err.print(wrapText(prompt + " ", MAX_LINE_WIDTH));
     char[] pwChars;
@@ -797,7 +798,7 @@
    *          the Logger to be used to log the error message.
    * @return Returns the password.
    */
-  protected final String readPassword(Message prompt, Logger logger)
+  protected final String readPassword(LocalizableMessage prompt, Logger logger)
   {
     String pwd = null;
     try
@@ -822,7 +823,7 @@
    * @throws CLIException
    *           If the port could not be retrieved for some reason.
    */
-  public final int readPort(Message prompt, final int defaultValue)
+  public final int readPort(LocalizableMessage prompt, final int defaultValue)
       throws CLIException
   {
     ValidationCallback<Integer> callback = new ValidationCallback<Integer>()
@@ -880,7 +881,7 @@
    *          the NamingException occurred.
    * @return a message object for the given NamingException.
    */
-  protected Message getMessageForException(NamingException ne, String hostPort)
+  protected LocalizableMessage getMessageForException(NamingException ne, String hostPort)
   {
     return Utils.getMessageForException(ne, hostPort);
   }
@@ -896,7 +897,7 @@
    *          the logger where the errors will be written.
    * @return the port value provided by the user.
    */
-  protected int askPort(Message prompt, int defaultValue, Logger logger)
+  protected int askPort(LocalizableMessage prompt, int defaultValue, Logger logger)
   {
     int port = -1;
     while (port == -1)
@@ -930,7 +931,7 @@
    * @throws CLIException
    *           If an unexpected error occurred which prevented validation.
    */
-  public final <T> T readValidatedInput(Message prompt,
+  public final <T> T readValidatedInput(LocalizableMessage prompt,
       ValidationCallback<T> validator) throws CLIException
   {
     while (true)
@@ -963,7 +964,7 @@
    *           If an unexpected error occurred which prevented validation or if
    *           the maximum number of tries was reached.
    */
-  public final <T> T readValidatedInput(Message prompt,
+  public final <T> T readValidatedInput(LocalizableMessage prompt,
       ValidationCallback<T> validator, int maxTries) throws CLIException
   {
     int nTries = 0;
@@ -1000,7 +1001,7 @@
    *           if the user did not provide valid answer after a certain number
    *           of tries (ConsoleApplication.CONFIRMATION_MAX_TRIES)
    */
-  protected final boolean askConfirmation(Message prompt, boolean defaultValue,
+  protected final boolean askConfirmation(LocalizableMessage prompt, boolean defaultValue,
       Logger logger) throws CLIException
   {
     boolean v = defaultValue;
@@ -1018,9 +1019,9 @@
       }
       catch (CLIException ce)
       {
-        if (ce.getMessageObject().getDescriptor().equals(
+        if (StaticUtils.hasDescriptor(ce.getMessageObject(),
             ERR_CONFIRMATION_TRIES_LIMIT_REACHED)
-            || ce.getMessageObject().getDescriptor().equals(
+            || StaticUtils.hasDescriptor(ce.getMessageObject(),
                 ERR_TRIES_LIMIT_REACHED))
         {
           throw ce;
@@ -1193,7 +1194,7 @@
               if (getCertificateRootException(e) != null
                   || (e.getCause() instanceof SSLHandshakeException))
               {
-                Message message =
+                LocalizableMessage message =
                     ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_NOT_TRUSTED.get(
                         hostName, String.valueOf(portNumber));
                 throw new ClientException(
@@ -1202,7 +1203,7 @@
             }
             if (e.getCause() instanceof SSLException)
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT_WRONG_PORT.get(
                       hostName, String.valueOf(portNumber));
               throw new ClientException(
@@ -1211,7 +1212,7 @@
           }
           String hostPort =
               ServerDescriptor.getServerRepresentation(hostName, portNumber);
-          Message message = Utils.getMessageForException(e, hostPort);
+          LocalizableMessage message = Utils.getMessageForException(e, hostPort);
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR,
               message);
         }
@@ -1262,14 +1263,14 @@
             }
             else
             {
-              Message message =
+              LocalizableMessage message =
                   ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(hostName, String
                       .valueOf(portNumber));
               throw new ClientException(
                   LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR, message);
             }
           }
-          Message message =
+          LocalizableMessage message =
               ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(hostName, String
                   .valueOf(portNumber));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR,
@@ -1292,7 +1293,7 @@
         }
         catch (NamingException e)
         {
-          Message message =
+          LocalizableMessage message =
               ERR_DSCFG_ERROR_LDAP_FAILED_TO_CONNECT.get(hostName, String
                   .valueOf(portNumber));
           throw new ClientException(LDAPResultCode.CLIENT_SIDE_CONNECT_ERROR,
@@ -1398,7 +1399,7 @@
    *          the logger where the errors will be written.
    * @return the value provided by the user.
    */
-  protected int askInteger(Message prompt, int defaultValue, Logger logger)
+  protected int askInteger(LocalizableMessage prompt, int defaultValue, Logger logger)
   {
     int newInt = -1;
     while (newInt == -1)
@@ -1427,7 +1428,7 @@
    * @throws CLIException
    *           If the value could not be retrieved for some reason.
    */
-  public final int readInteger(Message prompt, final int defaultValue)
+  public final int readInteger(LocalizableMessage prompt, final int defaultValue)
       throws CLIException
   {
     ValidationCallback<Integer> callback = new ValidationCallback<Integer>()
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/cli/LDAPConnectionConsoleInteraction.java b/opendj3-server-dev/src/server/org/opends/server/util/cli/LDAPConnectionConsoleInteraction.java
index 2e9fab9..e9516b1 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/cli/LDAPConnectionConsoleInteraction.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/cli/LDAPConnectionConsoleInteraction.java
@@ -22,12 +22,12 @@
  *
  *
  *      Copyright 2008-2010 Sun Microsystems, Inc.
- *      Portions Copyright 2011 ForgeRock AS
+ *      Portions Copyright 2011-2014 ForgeRock AS
  */
 
 package org.opends.server.util.cli;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.messages.UtilityMessages.*;
 import static org.opends.messages.QuickSetupMessages.*;
 import static org.opends.messages.ToolMessages.*;
@@ -119,7 +119,7 @@
   // The timeout to be used to connect
   private int connectTimeout;
 
-  private Message heading = INFO_LDAP_CONN_HEADING_CONNECTION_PARAMETERS.get();
+  private LocalizableMessage heading = INFO_LDAP_CONN_HEADING_CONNECTION_PARAMETERS.get();
 
   // A copy of the secureArgList for convenience.
   private SecureConnectionCliArgs copySecureArgsList = null;
@@ -139,7 +139,7 @@
 
     private Integer choice;
 
-    private Message msg;
+    private LocalizableMessage msg;
 
     /**
      * Private constructor.
@@ -149,7 +149,7 @@
      * @param msg
      *          the message message.
      */
-    private Protocols(int i, Message msg)
+    private Protocols(int i, LocalizableMessage msg)
     {
       choice = i;
       this.msg = msg;
@@ -170,7 +170,7 @@
      *
      * @return the menu message.
      */
-    public Message getMenuMessage()
+    public LocalizableMessage getMenuMessage()
     {
       return msg;
     }
@@ -189,7 +189,7 @@
 
     private Integer choice;
 
-    private Message msg;
+    private LocalizableMessage msg;
 
     /**
      * Private constructor.
@@ -199,7 +199,7 @@
      * @param msg
      *          the message message.
      */
-    private TrustMethod(int i, Message msg)
+    private TrustMethod(int i, LocalizableMessage msg)
     {
       choice = new Integer(i);
       this.msg = msg;
@@ -220,7 +220,7 @@
      *
      * @return the menu message.
      */
-    public Message getMenuMessage()
+    public LocalizableMessage getMenuMessage()
     {
       return msg;
     }
@@ -239,7 +239,7 @@
 
     private Integer choice;
 
-    private Message msg;
+    private LocalizableMessage msg;
 
     /**
      * Private constructor.
@@ -249,7 +249,7 @@
      * @param msg
      *          the message message.
      */
-    private TrustOption(int i, Message msg)
+    private TrustOption(int i, LocalizableMessage msg)
     {
       choice = new Integer(i);
       this.msg = msg;
@@ -270,7 +270,7 @@
      *
      * @return the menu message.
      */
-    public Message getMenuMessage()
+    public LocalizableMessage getMenuMessage()
     {
       return msg;
     }
@@ -560,7 +560,7 @@
       try
       {
         app.println();
-        Message askPortNumber = null;
+        LocalizableMessage askPortNumber = null;
         if (secureArgsList.alwaysSSL()) {
           askPortNumber = INFO_ADMIN_CONN_PROMPT_PORT_NUMBER.get(portNumber);
         } else {
@@ -766,7 +766,7 @@
         try
         {
           app.println();
-          Message prompt;
+          LocalizableMessage prompt;
           if (providedAdminUID != null)
           {
             prompt = INFO_LDAPAUTH_PASSWORD_PROMPT.get(providedAdminUID);
@@ -1004,7 +1004,7 @@
         try
         {
           app.println();
-          Message prompt = INFO_LDAP_CONN_PROMPT_SECURITY_TRUSTSTORE_PASSWORD
+          LocalizableMessage prompt = INFO_LDAP_CONN_PROMPT_SECURITY_TRUSTSTORE_PASSWORD
               .get(truststorePath);
           truststorePassword = app.readPassword(prompt);
         }
@@ -1186,7 +1186,7 @@
       try
       {
         app.println();
-        Message prompt = INFO_LDAP_CONN_PROMPT_SECURITY_KEYSTORE_PASSWORD
+        LocalizableMessage prompt = INFO_LDAP_CONN_PROMPT_SECURITY_KEYSTORE_PASSWORD
             .get(keystorePath);
         keystorePassword = app.readPassword(prompt);
       }
@@ -1661,7 +1661,7 @@
             try
             {
               app.println();
-              Message prompt = INFO_LDAP_CONN_PROMPT_SECURITY_KEYSTORE_PASSWORD
+              LocalizableMessage prompt = INFO_LDAP_CONN_PROMPT_SECURITY_KEYSTORE_PASSWORD
                   .get(truststorePath);
               truststorePassword = app.readPassword(prompt);
             }
@@ -1793,7 +1793,7 @@
    }
    else
    {
-     Message msg = Utils.getThrowableMsg(INFO_ERROR_CONNECTING_TO_LOCAL.get(),
+     LocalizableMessage msg = Utils.getThrowableMsg(INFO_ERROR_CONNECTING_TO_LOCAL.get(),
          t);
      app.println(msg);
    }
@@ -1826,7 +1826,7 @@
                usedTrustManager.getLastRefusedChain(),
                usedTrustManager.getLastRefusedAuthType(), excType);
 
-     Message msg;
+     LocalizableMessage msg;
      if (udce.getType() == UserDataCertificateException.Type.NOT_TRUSTED)
      {
        msg = INFO_CERTIFICATE_NOT_TRUSTED_TEXT_CLI.get(
@@ -1876,7 +1876,7 @@
   * Sets the heading that is displayed in interactive mode.
   * @param heading the heading that is displayed in interactive mode.
   */
- public void setHeadingMessage(Message heading)
+ public void setHeadingMessage(LocalizableMessage heading)
  {
    this.heading = heading;
  }
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/cli/MenuBuilder.java b/opendj3-server-dev/src/server/org/opends/server/util/cli/MenuBuilder.java
index be1d189..d068291 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/cli/MenuBuilder.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/cli/MenuBuilder.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.cli;
 
@@ -38,7 +39,7 @@
 import java.util.Map;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.util.table.TableBuilder;
 import org.opends.server.util.table.TablePrinter;
 import org.opends.server.util.table.TextTablePrinter;
@@ -130,7 +131,7 @@
     private final MenuCallback<T> defaultCallback;
 
     // The description of the optional default action.
-    private final Message defaultDescription;
+    private final LocalizableMessage defaultDescription;
 
     // The numeric options table builder.
     private final TableBuilder nbuilder;
@@ -139,20 +140,20 @@
     private final TablePrinter printer;
 
     // The menu prompt.
-    private final Message prompt;
+    private final LocalizableMessage prompt;
 
     // The menu title.
-    private final Message title;
+    private final LocalizableMessage title;
 
     // The maximum number of times we display the menu if the user provides
     // bad input (-1 for unlimited).
     private int nMaxTries;
 
     // Private constructor.
-    private MenuImpl(ConsoleApplication app, Message title, Message prompt,
+    private MenuImpl(ConsoleApplication app, LocalizableMessage title, LocalizableMessage prompt,
         TableBuilder ntable, TableBuilder ctable, TablePrinter printer,
         Map<String, MenuCallback<T>> callbacks, boolean allowMultiSelect,
-        MenuCallback<T> defaultCallback, Message defaultDescription,
+        MenuCallback<T> defaultCallback, LocalizableMessage defaultDescription,
         int nMaxTries) {
       this.app = app;
       this.title = title;
@@ -232,7 +233,7 @@
       };
 
       // Determine the correct choice prompt.
-      Message promptMsg;
+      LocalizableMessage promptMsg;
       if (allowMultiSelect) {
         if (defaultDescription != null) {
           promptMsg = INFO_MENU_PROMPT_MULTI_DEFAULT.get(defaultDescription);
@@ -352,13 +353,13 @@
     new ArrayList<MenuCallback<T>>();
 
   // The char option keys (must be single-character messages).
-  private final List<Message> charKeys = new ArrayList<Message>();
+  private final List<LocalizableMessage> charKeys = new ArrayList<LocalizableMessage>();
 
   // The synopsis of char options.
-  private final List<Message> charSynopsis = new ArrayList<Message>();
+  private final List<LocalizableMessage> charSynopsis = new ArrayList<LocalizableMessage>();
 
   // Optional column headings.
-  private final List<Message> columnHeadings = new ArrayList<Message>();
+  private final List<LocalizableMessage> columnHeadings = new ArrayList<LocalizableMessage>();
 
   // Optional column widths.
   private final List<Integer> columnWidths = new ArrayList<Integer>();
@@ -367,21 +368,21 @@
   private MenuCallback<T> defaultCallback = null;
 
   // The description of the optional default action.
-  private Message defaultDescription = null;
+  private LocalizableMessage defaultDescription = null;
 
   // The numeric option call-backs.
   private final List<MenuCallback<T>> numericCallbacks =
     new ArrayList<MenuCallback<T>>();
 
   // The numeric option fields.
-  private final List<List<Message>> numericFields =
-    new ArrayList<List<Message>>();
+  private final List<List<LocalizableMessage>> numericFields =
+    new ArrayList<List<LocalizableMessage>>();
 
   // The menu title.
-  private Message title = null;
+  private LocalizableMessage title = null;
 
   // The menu prompt.
-  private Message prompt = null;
+  private LocalizableMessage prompt = null;
 
   // The maximum number of times that we allow the user to provide an invalid
   // answer (-1 if unlimited).
@@ -449,7 +450,7 @@
    * @param callback
    *          The call-back associated with this option.
    */
-  public void addCharOption(Message c, Message description,
+  public void addCharOption(LocalizableMessage c, LocalizableMessage description,
       MenuCallback<T> callback) {
     charKeys.add(c);
     charSynopsis.add(description);
@@ -471,7 +472,7 @@
    *          The menu result which should be returned by this menu
    *          choice.
    */
-  public void addCharOption(Message c, Message description,
+  public void addCharOption(LocalizableMessage c, LocalizableMessage description,
       MenuResult<T> result) {
     addCharOption(c, description, new ResultCallback<T>(result));
   }
@@ -516,9 +517,9 @@
    *          Any additional fields associated with this menu option.
    * @return Returns the number associated with menu choice.
    */
-  public int addNumberedOption(Message description, MenuCallback<T> callback,
-      Message... extraFields) {
-    List<Message> fields = new ArrayList<Message>();
+  public int addNumberedOption(LocalizableMessage description, MenuCallback<T> callback,
+      LocalizableMessage... extraFields) {
+    List<LocalizableMessage> fields = new ArrayList<LocalizableMessage>();
     fields.add(description);
     if (extraFields != null) {
       fields.addAll(Arrays.asList(extraFields));
@@ -545,8 +546,8 @@
    *          Any additional fields associated with this menu option.
    * @return Returns the number associated with menu choice.
    */
-  public int addNumberedOption(Message description, MenuResult<T> result,
-      Message... extraFields) {
+  public int addNumberedOption(LocalizableMessage description, MenuResult<T> result,
+      LocalizableMessage... extraFields) {
     return addNumberedOption(description, new ResultCallback<T>(result),
         extraFields);
   }
@@ -587,7 +588,7 @@
    * @param headings
    *          The optional column headings.
    */
-  public void setColumnHeadings(Message... headings) {
+  public void setColumnHeadings(LocalizableMessage... headings) {
     this.columnHeadings.clear();
     if (headings != null) {
       this.columnHeadings.addAll(Arrays.asList(headings));
@@ -623,7 +624,7 @@
    * @param callback
    *          The call-back associated with the default action.
    */
-  public void setDefault(Message description, MenuCallback<T> callback) {
+  public void setDefault(LocalizableMessage description, MenuCallback<T> callback) {
     defaultCallback = callback;
     defaultDescription = description;
   }
@@ -640,7 +641,7 @@
    * @param result
    *          The menu result which should be returned by default.
    */
-  public void setDefault(Message description, MenuResult<T> result) {
+  public void setDefault(LocalizableMessage description, MenuResult<T> result) {
     setDefault(description, new ResultCallback<T>(result));
   }
 
@@ -671,7 +672,7 @@
    *          The menu prompt, or <code>null</code> if there is not
    *          prompt.
    */
-  public void setPrompt(Message prompt) {
+  public void setPrompt(LocalizableMessage prompt) {
     this.prompt = prompt;
   }
 
@@ -685,7 +686,7 @@
    *          The menu title, or <code>null</code> if there is not
    *          title.
    */
-  public void setTitle(Message title) {
+  public void setTitle(LocalizableMessage title) {
     this.title = title;
   }
 
@@ -711,7 +712,7 @@
     // Create optional column headers.
     if (!columnHeadings.isEmpty()) {
       nbuilder.appendHeading();
-      for (Message heading : columnHeadings) {
+      for (LocalizableMessage heading : columnHeadings) {
         if (heading != null) {
           nbuilder.appendHeading(heading);
         } else {
@@ -721,7 +722,7 @@
 
       if (useMultipleColumns) {
         nbuilder.appendHeading();
-        for (Message heading : columnHeadings) {
+        for (LocalizableMessage heading : columnHeadings) {
           if (heading != null) {
             nbuilder.appendHeading(heading);
           } else {
@@ -749,7 +750,7 @@
       nbuilder.startRow();
       nbuilder.appendCell(INFO_MENU_NUMERIC_OPTION.get(i + 1));
 
-      for (Message field : numericFields.get(i)) {
+      for (LocalizableMessage field : numericFields.get(i)) {
         if (field != null) {
           nbuilder.appendCell(field);
         } else {
@@ -763,7 +764,7 @@
       if (useMultipleColumns && (j < sz)) {
         nbuilder.appendCell(INFO_MENU_NUMERIC_OPTION.get(j + 1));
 
-        for (Message field : numericFields.get(j)) {
+        for (LocalizableMessage field : numericFields.get(j)) {
           if (field != null) {
             nbuilder.appendCell(field);
           } else {
@@ -779,7 +780,7 @@
     TableBuilder cbuilder = new TableBuilder();
     for (int i = 0; i < charCallbacks.size(); i++) {
       char c = charKeys.get(i).charAt(0);
-      Message option = INFO_MENU_CHAR_OPTION.get(c);
+      LocalizableMessage option = INFO_MENU_CHAR_OPTION.get(c);
 
       cbuilder.startRow();
       cbuilder.appendCell(option);
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/cli/PointAdder.java b/opendj3-server-dev/src/server/org/opends/server/util/cli/PointAdder.java
index 21ff0d3..dfd834d 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/cli/PointAdder.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/cli/PointAdder.java
@@ -22,10 +22,11 @@
  *
  *
  *      Copyright 2010 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.cli;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.quicksetup.util.PlainTextProgressMessageFormatter;
 import org.opends.quicksetup.util.ProgressMessageFormatter;
 
@@ -85,7 +86,7 @@
    */
   public void start()
   {
-    MessageBuilder mb = new MessageBuilder();
+    LocalizableMessageBuilder mb = new LocalizableMessageBuilder();
     mb.append(formatter.getSpace());
     for (int i=0; i< 5; i++)
     {
diff --git a/opendj3-server-dev/src/server/org/opends/server/util/table/TableBuilder.java b/opendj3-server-dev/src/server/org/opends/server/util/table/TableBuilder.java
index 69a699e..2ae6eaa 100644
--- a/opendj3-server-dev/src/server/org/opends/server/util/table/TableBuilder.java
+++ b/opendj3-server-dev/src/server/org/opends/server/util/table/TableBuilder.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.table;
 
@@ -32,7 +33,7 @@
 import java.util.Comparator;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 
@@ -51,7 +52,7 @@
   private List<Integer> columnWidths = new ArrayList<Integer>();
 
   // The list of column headings.
-  private List<Message> header = new ArrayList<Message>();
+  private List<LocalizableMessage> header = new ArrayList<LocalizableMessage>();
 
   // The current number of rows in the table.
   private int height = 0;
@@ -243,7 +244,7 @@
    * Appends a new blank column heading to the header row.
    */
   public void appendHeading() {
-    appendHeading(Message.EMPTY);
+    appendHeading(LocalizableMessage.EMPTY);
   }
 
 
@@ -254,7 +255,7 @@
    * @param value
    *          The column heading value.
    */
-  public void appendHeading(Message value) {
+  public void appendHeading(LocalizableMessage value) {
     header.add(value);
 
     // Update statistics.
@@ -344,7 +345,7 @@
 
     // Column headings.
     serializer.startHeader();
-    for (Message s : header) {
+    for (LocalizableMessage s : header) {
       serializer.addHeading(s.toString());
     }
     serializer.endHeader();
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 720983a..092ae6a 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
@@ -36,7 +36,7 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.ClassPropertyDefinition;
 import org.opends.server.admin.server.ConfigurationAddListener;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -144,7 +144,7 @@
    */
   public boolean isConfigurationAddAcceptable(
       WorkflowElementCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     boolean isAcceptable = true;
 
@@ -178,7 +178,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
     configuration.addChangeListener(this);
@@ -215,7 +215,7 @@
    */
   public boolean isConfigurationDeleteAcceptable(
       WorkflowElementCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     // FIXME -- We should try to perform some check to determine whether the
     // workflow element is in use.
@@ -232,7 +232,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
 
@@ -263,7 +263,7 @@
    */
   public boolean isConfigurationChangeAcceptable(
       WorkflowElementCfg configuration,
-      List<Message> unacceptableReasons)
+      List<LocalizableMessage> unacceptableReasons)
   {
     boolean isAcceptable = true;
 
@@ -297,7 +297,7 @@
   {
     // Returned result.
     ConfigChangeResult changeResult = new ConfigChangeResult(
-        ResultCode.SUCCESS, false, new ArrayList<Message>()
+        ResultCode.SUCCESS, false, new ArrayList<LocalizableMessage>()
         );
 
 
@@ -461,7 +461,7 @@
             }
           }
 
-          Message message =
+          LocalizableMessage message =
             ERR_CONFIG_WORKFLOW_ELEMENT_CONFIG_NOT_ACCEPTABLE.get(
               String.valueOf(configuration.dn()), buffer.toString());
           throw new InitializationException(message);
@@ -477,7 +477,7 @@
         t = e.getCause();
       }
 
-      Message message =
+      LocalizableMessage message =
         ERR_CONFIG_WORKFLOW_ELEMENT_CANNOT_INITIALIZE.get(
             className, String.valueOf(configuration.dn()),
             t.getMessage());
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 fe7002f..8ae2269 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
@@ -29,9 +29,7 @@
 import java.text.SimpleDateFormat;
 import java.util.*;
 
-import org.opends.messages.Category;
-import org.opends.messages.Message;
-import org.opends.messages.Severity;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.plugin.PluginResult;
 import org.opends.server.config.ConfigConstants;
@@ -759,10 +757,7 @@
         // Unable to decode the message - log an error.
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
 
-        logError(Message.raw(
-            Category.SYNC,
-            Severity.MILD_ERROR,
-            "An exception was encountered while try to encode a "
+        logError(LocalizableMessage.raw("An exception was encountered while try to encode a "
                 + "replication add message for entry \""
                 + addMsg.getDN()
                 + "\" into an External Change Log entry: "
@@ -820,10 +815,7 @@
         // Unable to decode the message - log an error.
         TRACER.debugCaught(DebugLogLevel.ERROR, e);
 
-        logError(Message.raw(
-            Category.SYNC,
-            Severity.MILD_ERROR,
-            "An exception was encountered while try to encode a "
+        logError(LocalizableMessage.raw("An exception was encountered while try to encode a "
                 + "replication modify message for entry \""
                 + modifyMsg.getDN()
                 + "\" into an External Change Log entry: "
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 f7f1dde..0d612ba 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
@@ -39,8 +39,8 @@
 import java.util.Map;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.*;
 import org.opends.server.api.plugin.PluginResult;
 import org.opends.server.controls.*;
@@ -424,7 +424,7 @@
       if (backend == null)
       {
         setResultCode(ResultCode.NO_SUCH_OBJECT);
-        appendErrorMessage(Message.raw("No backend for entry "
+        appendErrorMessage(LocalizableMessage.raw("No backend for entry "
             + entryDN.toString())); // TODO: i18n
         return;
       }
@@ -617,7 +617,7 @@
   }
 
   private DirectoryException newDirectoryException(DN entryDN,
-      ResultCode resultCode, Message message) throws DirectoryException
+      ResultCode resultCode, LocalizableMessage message) throws DirectoryException
   {
     return LocalBackendWorkflowElement.newDirectoryException(this, null,
         entryDN, resultCode, message, ResultCode.INSUFFICIENT_ACCESS_RIGHTS,
@@ -625,7 +625,7 @@
   }
 
   private void setResultCodeAndMessageNoInfoDisclosure(DN entryDN,
-      ResultCode resultCode, Message message) throws DirectoryException
+      ResultCode resultCode, LocalizableMessage message) throws DirectoryException
   {
     LocalBackendWorkflowElement.setResultCodeAndMessageNoInfoDisclosure(this,
         null, entryDN, resultCode, message,
@@ -831,7 +831,7 @@
     {
       // This must mean there are attribute options, which we won't allow for
       // passwords.
-      Message message = ERR_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED.get(
+      LocalizableMessage message = ERR_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED.get(
           passwordAttribute.getNameOrOID());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -839,7 +839,7 @@
     Attribute passwordAttr = attrList.get(0);
     if (passwordAttr.hasOptions())
     {
-      Message message = ERR_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED.get(
+      LocalizableMessage message = ERR_PWPOLICY_ATTRIBUTE_OPTIONS_NOT_ALLOWED.get(
           passwordAttribute.getNameOrOID());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -858,7 +858,7 @@
       // same?
       addPWPolicyControl(PasswordPolicyErrorType.PASSWORD_MOD_NOT_ALLOWED);
 
-      Message message = ERR_PWPOLICY_MULTIPLE_PW_VALUES_NOT_ALLOWED
+      LocalizableMessage message = ERR_PWPOLICY_MULTIPLE_PW_VALUES_NOT_ALLOWED
           .get(passwordAttribute.getNameOrOID());
       throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION, message);
     }
@@ -887,7 +887,7 @@
             addPWPolicyControl(
                  PasswordPolicyErrorType.INSUFFICIENT_PASSWORD_QUALITY);
 
-            Message message = ERR_PWPOLICY_PREENCODED_NOT_ALLOWED.get(
+            LocalizableMessage message = ERR_PWPOLICY_PREENCODED_NOT_ALLOWED.get(
                 passwordAttribute.getNameOrOID());
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                          message);
@@ -909,7 +909,7 @@
             addPWPolicyControl(
                  PasswordPolicyErrorType.INSUFFICIENT_PASSWORD_QUALITY);
 
-            Message message = ERR_PWPOLICY_PREENCODED_NOT_ALLOWED.get(
+            LocalizableMessage message = ERR_PWPOLICY_PREENCODED_NOT_ALLOWED.get(
                 passwordAttribute.getNameOrOID());
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
                                          message);
@@ -924,7 +924,7 @@
       {
         // There are never any current passwords for an add operation.
         HashSet<ByteString> currentPasswords = new HashSet<ByteString>(0);
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         // Work on a copy of the entry without the password to avoid
         // false positives from some validators.
         copy.removeAttribute(passwordAttribute);
@@ -937,7 +937,7 @@
             addPWPolicyControl(
                  PasswordPolicyErrorType.INSUFFICIENT_PASSWORD_QUALITY);
 
-            Message message = ERR_PWPOLICY_VALIDATION_FAILED.
+            LocalizableMessage message = ERR_PWPOLICY_VALIDATION_FAILED.
                 get(passwordAttribute.getNameOrOID(),
                     String.valueOf(invalidReason));
             throw new DirectoryException(ResultCode.CONSTRAINT_VIOLATION,
@@ -1026,14 +1026,14 @@
    */
   private void checkSchema(Entry parentEntry) throws DirectoryException
   {
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     if (! entry.conformsToSchema(parentEntry, true, true, true, invalidReason))
     {
       throw new DirectoryException(ResultCode.OBJECTCLASS_VIOLATION,
                                    invalidReason.toMessage());
     }
 
-    invalidReason = new MessageBuilder();
+    invalidReason = new LocalizableMessageBuilder();
     checkAttributes(invalidReason, userAttributes);
     checkAttributes(invalidReason, operationalAttributes);
 
@@ -1075,7 +1075,7 @@
   }
 
 
-  private void checkAttributes(MessageBuilder invalidReason,
+  private void checkAttributes(LocalizableMessageBuilder invalidReason,
       Map<AttributeType, List<Attribute>> attributes) throws DirectoryException
   {
     for (List<Attribute> attrList : attributes.values())
@@ -1089,7 +1089,7 @@
           {
             if (!syntax.valueIsAcceptable(v.getValue(), invalidReason))
             {
-              Message message;
+              LocalizableMessage message;
               if (!syntax.isHumanReadable() || syntax.isBinary())
               {
                 // Value is not human-readable
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 54b1fb7..51aae4b 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
@@ -29,9 +29,9 @@
 import java.util.List;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageDescriptor.Arg1;
-import org.opends.messages.MessageDescriptor.Arg2;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageDescriptor.Arg1;
+import org.forgerock.i18n.LocalizableMessageDescriptor.Arg2;
 import org.opends.server.admin.std.meta.PasswordPolicyCfgDefn;
 import org.opends.server.api.AuthenticationPolicyState;
 import org.opends.server.api.Backend;
@@ -559,7 +559,7 @@
             pwPolicyState.setWarnedTime();
 
             int numSeconds = pwPolicyState.getSecondsUntilExpiration();
-            Message m = WARN_BIND_PASSWORD_EXPIRING
+            LocalizableMessage m = WARN_BIND_PASSWORD_EXPIRING
                 .get(secondsToTimeString(numSeconds));
 
             pwPolicyState.generateAccountStatusNotification(
@@ -772,7 +772,7 @@
           pwPolicyState.setWarnedTime();
 
           int numSeconds = pwPolicyState.getSecondsUntilExpiration();
-          Message m = WARN_BIND_PASSWORD_EXPIRING.get(
+          LocalizableMessage m = WARN_BIND_PASSWORD_EXPIRING.get(
                                  secondsToTimeString(numSeconds));
 
           pwPolicyState.generateAccountStatusNotification(
@@ -834,7 +834,7 @@
     {
       AccountStatusNotificationType notificationType;
       boolean tempLocked;
-      Message m;
+      LocalizableMessage m;
 
       int lockoutDuration = pwPolicyState.getSecondsUntilUnlock();
       if (lockoutDuration > -1)
@@ -955,7 +955,7 @@
     }
     else if (pwPolicyState.isAccountExpired())
     {
-      Message m = ERR_BIND_OPERATION_ACCOUNT_EXPIRED.get();
+      LocalizableMessage m = ERR_BIND_OPERATION_ACCOUNT_EXPIRED.get();
       pwPolicyState.generateAccountStatusNotification(
            AccountStatusNotificationType.ACCOUNT_EXPIRED, userEntry, m,
            AccountStatusNotification.createProperties(pwPolicyState,
@@ -980,7 +980,7 @@
         pwPolicyErrorType = PasswordPolicyErrorType.ACCOUNT_LOCKED;
       }
 
-      Message m = ERR_BIND_OPERATION_ACCOUNT_IDLE_LOCKED.get();
+      LocalizableMessage m = ERR_BIND_OPERATION_ACCOUNT_IDLE_LOCKED.get();
       pwPolicyState.generateAccountStatusNotification(
            AccountStatusNotificationType.ACCOUNT_IDLE_LOCKED, userEntry, m,
            AccountStatusNotification.createProperties(pwPolicyState, false, -1,
@@ -1002,7 +1002,7 @@
           pwPolicyErrorType = PasswordPolicyErrorType.ACCOUNT_LOCKED;
         }
 
-        Message m = ERR_BIND_OPERATION_ACCOUNT_RESET_LOCKED.get();
+        LocalizableMessage m = ERR_BIND_OPERATION_ACCOUNT_RESET_LOCKED.get();
         pwPolicyState.generateAccountStatusNotification(
              AccountStatusNotificationType.ACCOUNT_RESET_LOCKED, userEntry, m,
              AccountStatusNotification.createProperties(pwPolicyState, false,
@@ -1041,7 +1041,7 @@
           }
           else
           {
-            Message m = ERR_BIND_OPERATION_PASSWORD_EXPIRED.get();
+            LocalizableMessage m = ERR_BIND_OPERATION_PASSWORD_EXPIRED.get();
 
             pwPolicyState.generateAccountStatusNotification(
                  AccountStatusNotificationType.PASSWORD_EXPIRED, userEntry, m,
@@ -1054,7 +1054,7 @@
         }
         else
         {
-          Message m = ERR_BIND_OPERATION_PASSWORD_EXPIRED.get();
+          LocalizableMessage m = ERR_BIND_OPERATION_PASSWORD_EXPIRED.get();
 
           pwPolicyState.generateAccountStatusNotification(
                AccountStatusNotificationType.PASSWORD_EXPIRED, userEntry, m,
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 a811d27..131f9ee 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
@@ -30,7 +30,7 @@
 import java.util.Set;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.Backend;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.plugin.PluginResult;
@@ -344,7 +344,7 @@
   }
 
   private DirectoryException newDirectoryException(Entry entry,
-      ResultCode resultCode, Message message) throws DirectoryException
+      ResultCode resultCode, LocalizableMessage message) throws DirectoryException
   {
     return LocalBackendWorkflowElement.newDirectoryException(this, entry, null,
         resultCode, message, ResultCode.NO_SUCH_OBJECT,
@@ -352,7 +352,7 @@
   }
 
   private void setResultCodeAndMessageNoInfoDisclosure(Entry entry, DN entryDN,
-      ResultCode realResultCode, Message realMessage) throws DirectoryException
+      ResultCode realResultCode, LocalizableMessage realMessage) throws DirectoryException
   {
     LocalBackendWorkflowElement.setResultCodeAndMessageNoInfoDisclosure(this,
         entry, entryDN, realResultCode, realMessage, ResultCode.NO_SUCH_OBJECT,
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 259762f..3644f00 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
@@ -35,7 +35,7 @@
 import java.util.List;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.Backend;
 import org.opends.server.api.ChangeNotificationListener;
 import org.opends.server.api.ClientConnection;
@@ -212,7 +212,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              Message message =
+              LocalizableMessage message =
                   ERR_DELETE_ERROR_NOTIFYING_CHANGE_LISTENER
                       .get(getExceptionMessage(e));
               logError(message);
@@ -393,7 +393,7 @@
   }
 
   private DirectoryException newDirectoryException(Entry entry,
-      ResultCode resultCode, Message message) throws DirectoryException
+      ResultCode resultCode, LocalizableMessage message) throws DirectoryException
   {
     return LocalBackendWorkflowElement.newDirectoryException(this, entry,
         entryDN,
@@ -402,7 +402,7 @@
   }
 
   private void setResultCodeAndMessageNoInfoDisclosure(Entry entry,
-      ResultCode resultCode, Message message) throws DirectoryException
+      ResultCode resultCode, LocalizableMessage message) throws DirectoryException
   {
     LocalBackendWorkflowElement.setResultCodeAndMessageNoInfoDisclosure(this,
         entry, entryDN, resultCode, message, ResultCode.NO_SUCH_OBJECT,
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 03847ac..2ee635d 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
@@ -30,8 +30,8 @@
 import java.util.List;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.Backend;
 import org.opends.server.api.ChangeNotificationListener;
 import org.opends.server.api.ClientConnection;
@@ -244,7 +244,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              Message message =
+              LocalizableMessage message =
                   ERR_MODDN_ERROR_NOTIFYING_CHANGE_LISTENER
                       .get(getExceptionMessage(e));
               logError(message);
@@ -538,7 +538,7 @@
   }
 
   private DirectoryException newDirectoryException(Entry entry,
-      ResultCode resultCode, Message message) throws DirectoryException
+      ResultCode resultCode, LocalizableMessage message) throws DirectoryException
   {
     return LocalBackendWorkflowElement.newDirectoryException(this, entry, null,
         resultCode, message, ResultCode.NO_SUCH_OBJECT,
@@ -546,7 +546,7 @@
   }
 
   private void setResultCodeAndMessageNoInfoDisclosure(Entry entry, DN entryDN,
-      ResultCode realResultCode, Message realMessage) throws DirectoryException
+      ResultCode realResultCode, LocalizableMessage realMessage) throws DirectoryException
   {
     LocalBackendWorkflowElement.setResultCodeAndMessageNoInfoDisclosure(this,
         entry, entryDN, realResultCode, realMessage, ResultCode.NO_SUCH_OBJECT,
@@ -835,7 +835,7 @@
     // as per the server schema.
     if ((DirectoryServer.checkSchema()) && (! isSynchronizationOperation()))
     {
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       if (! newEntry.conformsToSchema(null, false, true, true,
                                       invalidReason))
       {
@@ -912,7 +912,7 @@
     // schema.
     if (DirectoryServer.checkSchema() && checkSchema)
     {
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       if (! newEntry.conformsToSchema(null, false, true, true,
                                       invalidReason))
       {
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 cba1bac..d0a7196 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
@@ -38,8 +38,8 @@
 import java.util.List;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.api.*;
 import org.opends.server.api.plugin.PluginResult;
 import org.opends.server.controls.*;
@@ -371,7 +371,7 @@
                 TRACER.debugCaught(DebugLogLevel.ERROR, e);
               }
 
-              Message message = ERR_MODIFY_ERROR_NOTIFYING_CHANGE_LISTENER
+              LocalizableMessage message = ERR_MODIFY_ERROR_NOTIFYING_CHANGE_LISTENER
                   .get(getExceptionMessage(e));
               logError(message);
             }
@@ -541,7 +541,7 @@
       // make sure that the new entry is valid per the server schema.
       if ((DirectoryServer.checkSchema()) && (!isSynchronizationOperation()))
       {
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         if (!modifiedEntry.conformsToSchema(null, false, false, false,
             invalidReason))
         {
@@ -637,7 +637,7 @@
   }
 
   private DirectoryException newDirectoryException(Entry entry,
-      ResultCode resultCode, Message message) throws DirectoryException
+      ResultCode resultCode, LocalizableMessage message) throws DirectoryException
   {
     return LocalBackendWorkflowElement.newDirectoryException(this, entry,
         entryDN, resultCode, message, ResultCode.NO_SUCH_OBJECT,
@@ -645,7 +645,7 @@
   }
 
   private void setResultCodeAndMessageNoInfoDisclosure(Entry entry,
-      ResultCode realResultCode, Message realMessage) throws DirectoryException
+      ResultCode realResultCode, LocalizableMessage realMessage) throws DirectoryException
   {
     LocalBackendWorkflowElement.setResultCodeAndMessageNoInfoDisclosure(this,
         entry, entryDN, realResultCode, realMessage, ResultCode.NO_SUCH_OBJECT,
@@ -1415,7 +1415,7 @@
 
       if (syntaxPolicy == AcceptRejectWarn.REJECT)
       {
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         for (AttributeValue v : attr)
         {
           if (!syntax.valueIsAcceptable(v.getValue(), invalidReason))
@@ -1440,7 +1440,7 @@
       }
       else if (syntaxPolicy == AcceptRejectWarn.WARN)
       {
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         for (AttributeValue v : attr)
         {
           if (!syntax.valueIsAcceptable(v.getValue(), invalidReason))
@@ -1460,7 +1460,7 @@
                   .valueOf(entryDN), attr.getName(), v.getValue().toString(),
                   invalidReason));
             }
-            invalidReason = new MessageBuilder();
+            invalidReason = new LocalizableMessageBuilder();
           }
         }
       }
@@ -1629,7 +1629,7 @@
 
       if (syntaxPolicy == AcceptRejectWarn.REJECT)
       {
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         for (AttributeValue v : attr)
         {
           if (!syntax.valueIsAcceptable(v.getValue(), invalidReason))
@@ -1654,7 +1654,7 @@
       }
       else if (syntaxPolicy == AcceptRejectWarn.WARN)
       {
-        MessageBuilder invalidReason = new MessageBuilder();
+        LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
         for (AttributeValue v : attr)
         {
           if (!syntax.valueIsAcceptable(v.getValue(), invalidReason))
@@ -1672,7 +1672,7 @@
                   .valueOf(entryDN), attr.getName(), v.getValue().toString(),
                   invalidReason));
             }
-            invalidReason = new MessageBuilder();
+            invalidReason = new LocalizableMessageBuilder();
           }
         }
       }
@@ -1908,7 +1908,7 @@
 
         for (AttributeValue v : newPasswords)
         {
-          MessageBuilder invalidReason = new MessageBuilder();
+          LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
           if (! pwPolicyState.passwordIsAcceptable(this, modifiedEntry,
                                    v.getValue(), clearPasswords, invalidReason))
           {
@@ -2018,7 +2018,7 @@
           clientConnection.setMustChangePassword(false);
         }
 
-        Message message = INFO_MODIFY_PASSWORD_CHANGED.get();
+        LocalizableMessage message = INFO_MODIFY_PASSWORD_CHANGED.get();
         pwPolicyState.generateAccountStatusNotification(
             AccountStatusNotificationType.PASSWORD_CHANGED,
             modifiedEntry, message,
@@ -2027,7 +2027,7 @@
       }
       else
       {
-        Message message = INFO_MODIFY_PASSWORD_RESET.get();
+        LocalizableMessage message = INFO_MODIFY_PASSWORD_RESET.get();
         pwPolicyState.generateAccountStatusNotification(
             AccountStatusNotificationType.PASSWORD_RESET, modifiedEntry,
             message,
@@ -2040,7 +2040,7 @@
     {
       if (isEnabled)
       {
-        Message message = INFO_MODIFY_ACCOUNT_ENABLED.get();
+        LocalizableMessage message = INFO_MODIFY_ACCOUNT_ENABLED.get();
         pwPolicyState.generateAccountStatusNotification(
             AccountStatusNotificationType.ACCOUNT_ENABLED,
             modifiedEntry, message,
@@ -2049,7 +2049,7 @@
       }
       else
       {
-        Message message = INFO_MODIFY_ACCOUNT_DISABLED.get();
+        LocalizableMessage message = INFO_MODIFY_ACCOUNT_DISABLED.get();
         pwPolicyState.generateAccountStatusNotification(
             AccountStatusNotificationType.ACCOUNT_DISABLED,
             modifiedEntry, message,
@@ -2060,7 +2060,7 @@
 
     if (wasLocked)
     {
-      Message message = INFO_MODIFY_ACCOUNT_UNLOCKED.get();
+      LocalizableMessage message = INFO_MODIFY_ACCOUNT_UNLOCKED.get();
       pwPolicyState.generateAccountStatusNotification(
           AccountStatusNotificationType.ACCOUNT_UNLOCKED, modifiedEntry,
           message,
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 52ca272..2b32fd8 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
@@ -32,8 +32,8 @@
 import java.util.TreeMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageDescriptor;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageDescriptor;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.server.ServerManagementContext;
 import org.opends.server.admin.std.server.BackendCfg;
@@ -180,7 +180,7 @@
   @Override
   public boolean isConfigurationChangeAcceptable(
       LocalBackendWorkflowElementCfg configuration,
-      List<Message>                  unacceptableReasons
+      List<LocalizableMessage>                  unacceptableReasons
       )
   {
     return processWorkflowElementConfig(configuration, false);
@@ -198,7 +198,7 @@
     processWorkflowElementConfig(configuration, true);
 
     return new ConfigChangeResult(ResultCode.SUCCESS, false,
-        new ArrayList<Message>());
+        new ArrayList<LocalizableMessage>());
   }
 
 
@@ -407,8 +407,8 @@
    *           If an error occurred while performing the access control check.
    */
   static DirectoryException newDirectoryException(Operation operation,
-      Entry entry, DN entryDN, ResultCode resultCode, Message message,
-      ResultCode altResultCode, Message altMessage) throws DirectoryException
+      Entry entry, DN entryDN, ResultCode resultCode, LocalizableMessage message,
+      ResultCode altResultCode, LocalizableMessage altMessage) throws DirectoryException
   {
     if (AccessControlConfigManager.getInstance().getAccessControlHandler()
         .canDiscloseInformation(entry, entryDN, operation))
@@ -458,8 +458,8 @@
    *           If an error occurred while performing the access control check.
    */
   static void setResultCodeAndMessageNoInfoDisclosure(Operation operation,
-      Entry entry, DN entryDN, ResultCode resultCode, Message message,
-      ResultCode altResultCode, Message altMessage) throws DirectoryException
+      Entry entry, DN entryDN, ResultCode resultCode, LocalizableMessage message,
+      ResultCode altResultCode, LocalizableMessage altMessage) throws DirectoryException
   {
     if (AccessControlConfigManager.getInstance().getAccessControlHandler()
         .canDiscloseInformation(entry, entryDN, operation))
@@ -835,8 +835,8 @@
    *           If the update operation has been rejected.
    */
   static void checkIfBackendIsWritable(Backend backend, Operation op,
-      DN entryDN, MessageDescriptor.Arg1<CharSequence> serverMsg,
-      MessageDescriptor.Arg1<CharSequence> backendMsg)
+      DN entryDN, LocalizableMessageDescriptor.Arg1<CharSequence> serverMsg,
+      LocalizableMessageDescriptor.Arg1<CharSequence> backendMsg)
       throws DirectoryException
   {
     if (!backend.isPrivateBackend())
diff --git a/opendj3-server-dev/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.java b/opendj3-server-dev/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.java
index 007387c..00aef72 100644
--- a/opendj3-server-dev/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.java
+++ b/opendj3-server-dev/src/snmp/src/org/opends/server/snmp/SNMPClassLoaderProvider.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.snmp;
 
@@ -45,7 +45,7 @@
 import java.util.SortedSet;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.SNMPConnectionHandlerCfg;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.ConfigChangeResult;
@@ -262,7 +262,7 @@
                     this.currentConfig.getTrapsDestination());
 
             if (this.sentTraps == false) {
-                Message message =
+                LocalizableMessage message =
                         ERR_SNMP_CONNHANDLER_NO_VALID_TRAP_DESTINATIONS.get();
                 logError(message);
             } else {
@@ -400,7 +400,7 @@
                 InetAddress addr = InetAddress.getByName(dest);
                 found = true;
             } catch (UnknownHostException ex) {
-                Message message = ERR_SNMP_CONNHANDLER_TRAPS_DESTINATION.get(
+                LocalizableMessage message = ERR_SNMP_CONNHANDLER_TRAPS_DESTINATION.get(
                         dest);
                 logError(message);
             }
diff --git a/opendj3-server-dev/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java b/opendj3-server-dev/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java
index ad9e771..d1ffafa 100644
--- a/opendj3-server-dev/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java
+++ b/opendj3-server-dev/src/snmp/src/org/opends/server/snmp/SNMPConnectionHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.snmp;
 
@@ -33,7 +34,7 @@
 import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.api.AlertGenerator;
 import org.opends.server.api.ClientConnection;
@@ -97,7 +98,7 @@
             throws ConfigException, InitializationException {
 
         if (configuration == null) {
-            Message message = ERR_SNMP_CONNHANDLER_NO_CONFIGURATION.get();
+            LocalizableMessage message = ERR_SNMP_CONNHANDLER_NO_CONFIGURATION.get();
             logError(message);
             return;
         }
@@ -107,7 +108,7 @@
 
         String jarLocation = this.currentConfig.getOpendmkJarfile();
         if ((jarLocation==null) || (jarLocation.length()==0)){
-            Message message = ERR_SNMP_CONNHANDLER_NO_OPENDMK_JARFILES.get();
+            LocalizableMessage message = ERR_SNMP_CONNHANDLER_NO_OPENDMK_JARFILES.get();
             logError(message);
             return;
         }
@@ -125,7 +126,7 @@
         }
 
         if (!fullpathFile.exists()) {
-            Message message =
+            LocalizableMessage message =
               ERR_SNMP_CONNHANDLER_OPENDMK_JARFILES_DOES_NOT_EXIST.get(
                   fullpathFile.getAbsolutePath());
             logError(message);
@@ -138,7 +139,7 @@
                 this.currentConfig.getListenPort()));
 
         if (!this.isOperational(fullpathFile)) {
-            Message message =
+            LocalizableMessage message =
               ERR_SNMP_CONNHANDLER_OPENDMK_JARFILES_NOT_OPERATIONAL.get(
                   fullpathFile.getAbsolutePath());
             logError(message);
@@ -153,7 +154,7 @@
           this.provider.initializeConnectionHandler(this.currentConfig);
         }
         catch (Exception ex) {
-            Message message = ERR_SNMP_CONNHANDLER_BAD_CONFIGURATION.get();
+            LocalizableMessage message = ERR_SNMP_CONNHANDLER_BAD_CONFIGURATION.get();
             logError(message);
             return;
         }
@@ -213,7 +214,7 @@
      */
     public boolean isConfigurationChangeAcceptable(
             SNMPConnectionHandlerCfg configuration,
-            List<Message> unacceptableReasons) {
+            List<LocalizableMessage> unacceptableReasons) {
         // The configuration should always be acceptable.
         return true;
     }
@@ -310,7 +311,7 @@
      * {@inheritDoc}
     */
     @Override
-    public void finalizeConnectionHandler(Message finalizeReason) {
+    public void finalizeConnectionHandler(LocalizableMessage finalizeReason) {
         if (this.provider!=null) {
             this.provider.finalizeConnectionHandler();
         }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/CategoryTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/CategoryTest.java
deleted file mode 100644
index a3bbb56..0000000
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/CategoryTest.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2014 ForgeRock AS
- */
-
-package org.opends.messages;
-
-import static org.testng.Assert.*;
-import org.testng.annotations.*;
-
-/**
- * Category Tester.
- *
- */
-public class CategoryTest extends MessagesTestCase
-{
-
-    @DataProvider(name = "messageDescriptors")
-    public Object[][] getMessageDescriptors() {
-      return new Object[][] {
-              {CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION}
-      };
-    }
-
-    @Test(dataProvider = "messageDescriptors")
-    public void testParseMessageId(MessageDescriptor md)
-    {
-      assertEquals(md.getCategory(), Category.parseMessageId(md.getId()));
-    }
-
-    @Test(dataProvider = "messageDescriptors")
-    public void testParseMask(MessageDescriptor md)
-    {
-      assertEquals(md.getCategory(), Category.parseMask(md.getMask()));
-    }
-
-    @Test
-    public void testGetMask()
-    {
-      assertNotNull(Category.ACCESS_CONTROL.getMask());
-    }
-
-}
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessageBuilderTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessageBuilderTest.java
deleted file mode 100644
index 2cb7737..0000000
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessageBuilderTest.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2007-2008 Sun Microsystems, Inc.
- */
-
-package org.opends.messages;
-
-import static org.testng.Assert.*;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-import java.util.Locale;
-
-/**
- * Message Tester.
- */
-public class MessageBuilderTest extends MessagesTestCase {
-
-  @BeforeClass
-  public void setUp() throws IOException {
-    createDummyLocalizedCoreMessagesFile();
-  }
-
-
-  @DataProvider(name = "toMessageData")
-  public Object[][] toMessageData() {
-    return new Object[][]{
-
-            // All strings
-            { new CharSequence[] {
-                    "Once", " upon", " a", " time." },
-                    "Once upon a time." },
-
-            // All messages
-            { new CharSequence[] {
-                    Message.raw("Once"),
-                    Message.raw(" upon"),
-                    Message.raw(" a"),
-                    Message.raw(" time.") },
-                    "Once upon a time." },
-
-            // Mix of strings and messages
-            { new CharSequence[] {
-                    Message.raw("Once"),
-                    " upon",
-                    Message.raw(" a"),
-                    " time." },
-                    "Once upon a time." },
-
-            // Lots of messages
-            { new CharSequence[] {
-                    Message.raw("North"),
-                    Message.raw(" America"),
-                    Message.raw(" is"),
-                    Message.raw(" divided"),
-                    Message.raw(" into"),
-                    Message.raw(" two"),
-                    Message.raw(" vast"),
-                    Message.raw(" regions,"),
-                    Message.raw(" one"),
-                    Message.raw(" inclining"),
-                    Message.raw(" towards"),
-                    Message.raw(" the"),
-                    Message.raw(" Pole,"),
-                    Message.raw(" the"),
-                    Message.raw(" other"),
-                    Message.raw(" towards"),
-                    Message.raw(" the"),
-                    Message.raw(" Equator--Valley"),
-                    Message.raw(" of"),
-                    Message.raw(" the"),
-                    Message.raw(" Mississippi--Traces"),
-                    Message.raw(" found"),
-                    Message.raw(" there"),
-                    Message.raw(" of"),
-                    Message.raw(" the"),
-                    Message.raw(" revolutions"),
-                    Message.raw(" of"),
-                    Message.raw(" the"),
-                    Message.raw(" globe"),
-                    Message.raw(" --Shore"),
-                    Message.raw(" of"),
-                    Message.raw(" the"),
-                    Message.raw(" Atlantic"),
-                    Message.raw(" Ocean,"),
-                    Message.raw(" on"),
-                    Message.raw(" which"),
-                    Message.raw(" the"),
-                    Message.raw(" English"),
-                    Message.raw(" colonies"),
-                    Message.raw(" were"),
-                    Message.raw(" founded--Different"),
-                    Message.raw(" aspects"),
-                    Message.raw(" of"),
-                    Message.raw(" North"),
-                    Message.raw(" and"),
-                    Message.raw(" of"),
-                    Message.raw(" South"),
-                    Message.raw(" America"),
-                    Message.raw(" at"),
-                    Message.raw(" the"),
-                    Message.raw(" time"),
-                    Message.raw(" of"),
-                    Message.raw(" their"),
-                    Message.raw(" discovery--Forests"),
-                    Message.raw(" of"),
-                    Message.raw(" North"),
-                    Message.raw(" America"),
-                    Message.raw(" --Prairies--Wandering"),
-                    Message.raw(" tribes"),
-                    Message.raw(" of"),
-                    Message.raw(" natives--Their"),
-                    Message.raw(" outward"),
-                    Message.raw(" appearance,"),
-                    Message.raw(" customs,"),
-                    Message.raw(" and"),
-                    Message.raw(" languages--Traces"),
-                    Message.raw(" of"),
-                    Message.raw(" an"),
-                    Message.raw(" unknown"),
-                    Message.raw(" people.") },
-              "North America is divided into two vast regions, one inclining towards the Pole," +
-              " the other towards the Equator--Valley of the Mississippi--Traces found there of" +
-              " the revolutions of the globe --Shore of the Atlantic Ocean, on which the English" +
-              " colonies were founded--Different aspects of North and of South America at the" +
-              " time of their discovery--Forests of North America --Prairies--Wandering tribes" +
-              " of natives--Their outward appearance, customs, and languages--Traces of an" +
-              " unknown people."
-            }
-
-    };
-  }
-
-  @Test (dataProvider = "toMessageData")
-  public void testToMessage(CharSequence[] content, String result)
-  {
-    MessageBuilder mb = new MessageBuilder();
-    for (CharSequence c : content) {
-      mb.append(c);
-    }
-    Message m = mb.toMessage();
-    assertTrue(result.equals(m.toString()));
-  }
-
-
-  @DataProvider(name = "toMessageData1")
-  public Object[][] toMessageData1() {
-    return new Object[][]{
-
-            // default locale
-            { new CharSequence[] {
-                    CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.get(),
-                    CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1) },
-                    Locale.getDefault(),
-                    CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.get().toString() +
-                    CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1).toString() },
-
-            { new CharSequence[] {
-                    CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.get(),
-                    CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1) },
-                    TEST_LOCALE,
-                    CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.get().toString(TEST_LOCALE) +
-                    CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1).toString(TEST_LOCALE) }
-
-    };
-  }
-
-
-  @Test (dataProvider = "toMessageData1")
-  public void testToMessage1(CharSequence[] content, Locale locale, String result)
-  {
-    MessageBuilder mb = new MessageBuilder();
-    for (CharSequence c : content) {
-      mb.append(c);
-    }
-    Message m = mb.toMessage();
-    assertTrue(result.equals(m.toString(locale)));
-  }
-
-
-
-  @DataProvider(name = "toMessageData2")
-  public Object[][] toMessageData2() {
-    return new Object[][] {
-        {
-            CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.get(),
-            CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1),
-            CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.getCategory(),
-            CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.getSeverity()
-        },
-        {
-            Message.raw(Category.JEB, Severity.FATAL_ERROR, "test message"),
-            CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1),
-            Category.JEB,
-            Severity.FATAL_ERROR
-        },
-        {
-            Message.raw("test message"),
-            CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1),
-            Category.USER_DEFINED,
-            Severity.INFORMATION
-        }
-    };
-  }
-
-
-
-  @Test(dataProvider = "toMessageData2")
-  public void testToMessage2(Message m1, Message m2, Category c, Severity s) {
-    MessageBuilder mb = new MessageBuilder();
-
-    mb.append(m1);
-    mb.append(m2);
-    Message m = mb.toMessage();
-
-    assertEquals(m.getDescriptor().getCategory(), c);
-    assertEquals(m.getDescriptor().getSeverity(), s);
-  }
-}
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java
deleted file mode 100644
index c9cd062..0000000
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessageDescriptorRegistryTest.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions Copyright 2014 ForgeRock AS
- */
-
-package org.opends.messages;
-
-import static org.testng.Assert.*;
-import org.testng.annotations.*;
-
-import java.util.Set;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Locale;
-import java.util.EnumSet;
-import java.util.Map;
-import java.util.HashMap;
-import java.lang.reflect.Field;
-
-/**
- * MessageDescriptorRegistry Tester.
- *
- */
-public class MessageDescriptorRegistryTest extends MessagesTestCase
-{
-
-  @DataProvider(name = "message descriptors")
-  public Object[][] getMessageDescriptors() {
-    return new Object[][] {
-            { CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION }
-    };
-  }
-
-  @Test(dataProvider = "message descriptors")
-  public void testGetMessageDescriptor(MessageDescriptor md) {
-    MessageDescriptor md2 = MessageDescriptorRegistry.getMessageDescriptor(md.getId());
-    assertEquals(md, md2);
-  }
-
-  @DataProvider(name = "message classes")
-  public Object[][] getMessageClasses() {
-    Set<Class<?>> mdClasses = MessageDescriptorRegistry.getRegisteredClasses();
-    List<Class<?>> classesToTest = new ArrayList<Class<?>>(mdClasses);
-
-    // These newer message files don't comply
-    classesToTest.remove(AdminToolMessages.class);
-    classesToTest.remove(QuickSetupMessages.class);
-
-    Object[][] ret = new Object[classesToTest.size()][1];
-    for (int i = 0; i < ret.length; i++) {
-      ret[i] = new Object[] { classesToTest.get(i) };
-    }
-    return ret;
-  }
-
-  /**
-   * Tests that messages don't end with a period (.) excluding those that end
-   * with an ellipsis (...)
-   *
-   * @param  messagesClass containing definitions of MessageDescriptor objects
-   * @throws IllegalAccessException if there is a problem accessing the
-   *         class through reflection
-   */
-  @Test(dataProvider = "message classes")
-  public void testFormatStringsDontEndWithPeriod(Class<?> messagesClass)
-          throws IllegalAccessException
-  {
-    Field[] fa = messagesClass.getFields();
-    if (fa != null) {
-      for (Field f : fa) {
-        Class<?> c = f.getType();
-        if (MessageDescriptor.class.isAssignableFrom(c)) {
-          MessageDescriptor md = (MessageDescriptor)f.get(null);
-          String fmtString = md.getFormatString(Locale.getDefault());
-          boolean bad = fmtString.endsWith(".") && !fmtString.endsWith("...");
-          assertFalse(bad,
-                  "Format string for message descriptor " + f.getName() +
-                  " obtained through key " + md.getKey() +
-                  " defined in class " + messagesClass.getName() +
-                  " \'" + md.getFormatString(Locale.getDefault()) +
-                  "\' ends with a '.'");
-        }
-      }
-    }
-  }
-
-  /**
-   * Tests that messages for each category are restricted to a single
-   * messages file and that each file only contains messages from a
-   * single category.
-   */
-  @Test
-  public void testCategoriesDontSpanFiles() {
-    Map<Category,Class<?>> categoriesToClass = new HashMap<Category,Class<?>>();
-    Set<?> categories = EnumSet.allOf(Category.class);
-    Set<Class<?>> msgClasses = MessageDescriptorRegistry.getRegisteredClasses();
-    for (Class<?> msgClass : msgClasses) {
-      List<MessageDescriptor> mds =
-              MessageDescriptorRegistry.getMessageDescriptorsForClass(msgClass);
-      Category currentCategory = null;
-      for (MessageDescriptor md : mds) {
-        if (currentCategory == null) {
-          currentCategory = md.getCategory();
-          if (categories.contains(currentCategory)) {
-            categories.remove(currentCategory);
-            categoriesToClass.put(currentCategory, msgClass);
-          } else {
-            assertTrue(false,
-                    "Message file " + msgClass + " defines descriptors " +
-                    "for category " + currentCategory + " but message file " +
-                    categoriesToClass.get(currentCategory) + " defines descriptors " +
-                    "of " + currentCategory + ".  Descriptors for a particular " +
-                    "category can only be defined in a single messages file.");
-          }
-        } else {
-          boolean categoriesMatch = currentCategory.equals(md.getCategory());
-          assertTrue(categoriesMatch,
-                  "Message file " + msgClass + " contains descriptors from at least " +
-                          "two different categories: descriptor of key " +
-                          md.getFormatString() + " is of category " + md.getCategory() +
-                          " but expected category was " + currentCategory);
-
-        }
-      }
-    }
-  }
-}
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessageTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessageTest.java
deleted file mode 100644
index 7ec0bb7..0000000
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessageTest.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2011 ForgeRock AS
- */
-
-package org.opends.messages;
-
-import static org.testng.Assert.*;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.IOException;
-
-/**
- * Message Tester.
- */
-public class MessageTest extends MessagesTestCase {
-
-  @BeforeClass
-  public void setUp() throws IOException {
-    createDummyLocalizedCoreMessagesFile();
-  }
-
-  @DataProvider(name = "rawData")
-  public Object[][] rawData() {
-    return new Object[][]{
-            {"Hello %s", "Hello World", new Object[]{"World"}},
-            {"Hel%nlo %s", "Hel" + EOL + "lo World", new Object[]{"World"}},
-            {"Hel%%lo %s", "Hel%lo World", new Object[]{"World"}},
-            {"Hel%%lo", "Hel%%lo", new Object[]{}},
-            {"Hel%nlo", "Hel%nlo", new Object[]{}},
-            {"Hel%Dlo", "Hel%Dlo", new Object[]{}},
-            {"Hel%Dlo", "Hel%Dlo", new Object[]{ "abc"}},
-
-            // %d and String arg mismatch
-            {"Hel%dlo", "Hel%dlo", new Object[]{ "abc"}},
-    };
-  }
-
-  @DataProvider(name = "rawData1")
-  public Object[][] rawData1() {
-    return new Object[][]{
-            {"Hello %s", Category.CORE, Severity.INFORMATION,
-                    "Hello World", new Object[]{"World"}}
-    };
-  }
-
-  @Test(dataProvider = "rawData")
-  public void testRaw(String fmt, String result, Object... args) {
-    Message message = Message.raw(fmt, args);
-
-    String mStr = message.toString();
-    assertTrue(mStr.equals(result));
-
-    String mStrL = message.toString(TEST_LOCALE);
-    assertTrue(mStrL.equals(result));
-  }
-
-  @Test(dataProvider = "rawData1")
-  public void testRaw1(String fmt, Category c, Severity s,
-                       String result, Object... args) {
-    Message message = Message.raw(c, s, fmt, args);
-    assertTrue(message.toString().equals(result));
-    assertTrue(message.toString(TEST_LOCALE).equals(result));
-  }
-
-  @DataProvider(name = "messages")
-  public Object[][] getMessages() {
-    return new Object[][]
-    {
-      { Message.raw("Hi Ho") },
-      { Message.raw("Hi Ho %n") },
-      { Message.raw("Hi Ho %%") },
-      { Message.raw("Hi Ho %s", new Object[]{null}) },
-      { Message.raw("Hi Ho", "Hum") },
-      { Message.raw("Hi Ho %s", "Hum") },
-      { Message.raw("Hi Ho %d", "Hum") },
-      { Message.raw("Hi Ho %c", "Hum") },
-      { Message.raw("Hi Ho %d", "Hum") },
-      { CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.get() },
-      { CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1) },
-      { CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(null) },
-      { CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.get() }
-    };
-  }
-
-  @DataProvider(name = "localizableMessages")
-  public Object[][] getLocalizableMessages() {
-    return new Object[][]
-    {
-      { CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.get() },
-      { CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(1) },
-      { CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION.get(null) },
-      { CoreMessages.ERR_ADD_CANNOT_ADD_ROOT_DSE.get() }
-    };
-  }
-
-  @Test(dataProvider = "messages")
-  public void testToString(Message msg) {
-    assertNotNull(msg.toString());
-  }
-
-  @Test(dataProvider = "localizableMessages")
-  public void testToString1(Message msg) throws IOException {
-    assertEquals(msg.toString(TEST_LOCALE), TEST_MSG);
-  }
-
-  @Test(dataProvider = "rawData1")
-  public void testGetDescriptor(String fmt, Category c, Severity s,
-                                String result, Object... args) {
-    Message message = Message.raw(c, s, fmt, args);
-    MessageDescriptor desc = message.getDescriptor();
-    assert(desc.getCategory().equals(c));
-    assert(desc.getSeverity().equals(s));
-
-    Message message2 = Message.raw(fmt, args);
-    MessageDescriptor desc2 = message2.getDescriptor();
-    assert(desc2.getCategory().equals(Category.USER_DEFINED));
-    assert(desc2.getSeverity().equals(Severity.INFORMATION));
-  }
-
-}
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessagesTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessagesTestCase.java
deleted file mode 100644
index 4448e9f..0000000
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/MessagesTestCase.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2006-2010 Sun Microsystems, Inc.
- */
-package org.opends.messages;
-
-
-
-import org.testng.annotations.Test;
-
-import org.opends.server.DirectoryServerTestCase;
-import org.opends.server.TestCaseUtils;
-
-import java.io.IOException;
-import java.io.File;
-import java.io.FileOutputStream;
-import java.util.Properties;
-import java.util.ResourceBundle;
-import java.util.Enumeration;
-import java.util.Locale;
-
-
-/**
- * An abstract base class for all messages test cases.
- */
-@Test(groups = { "precommit", "messages" }, sequential=true)
-public abstract class MessagesTestCase
-       extends DirectoryServerTestCase
-{
-  /** Locale for accessing a pseudo localized test messages file. */
-  protected static final Locale TEST_LOCALE = new Locale("myLanguage");
-
-  /** Message to appear in pseudo localized test messages file. */
-  protected static final String TEST_MSG = "XXX";
-  protected static final String EOL = System.getProperty("line.separator");
-
-  // No implementation required.
-  protected void createDummyLocalizedCoreMessagesFile() throws IOException {
-    Properties corePseudoI18nMsgs = new Properties();
-    ResourceBundle coreDefaultMsgs = ResourceBundle.getBundle("messages/core");
-    Enumeration<String> keyEnum = coreDefaultMsgs.getKeys();
-    while (keyEnum.hasMoreElements()) {
-      corePseudoI18nMsgs.put(keyEnum.nextElement(), TEST_MSG);
-    }
-    File buildRoot = new File(System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT));
-    String buildDirStr = System.getProperty(TestCaseUtils.PROPERTY_BUILD_DIR);
-    File buildDir;
-    if (buildDirStr != null) {
-      buildDir = new File(buildDirStr);
-    } else  {
-      buildDir = new File(buildRoot, "build");
-    }
-    File corePseudoI18nMsgsFile = new File(buildDir,
-            "unit-tests" + File.separator + "classes" +
-                    File.separator + "messages" +
-                    File.separator + "core_" + TEST_LOCALE.getLanguage() +
-                    ".properties");
-    if (!corePseudoI18nMsgsFile.getParentFile().exists()) {
-      corePseudoI18nMsgsFile.getParentFile().mkdirs();
-    }
-    corePseudoI18nMsgs.store(new FileOutputStream(corePseudoI18nMsgsFile), "");
-  }
-}
-
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/PropertiesFilesTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/PropertiesFilesTest.java
deleted file mode 100644
index 8992408..0000000
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/PropertiesFilesTest.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2008-2009 Sun Microsystems, Inc.
- */
-
-package org.opends.messages;
-
-import org.opends.server.TestCaseUtils;
-import org.opends.server.util.StaticUtils;
-
-import static org.testng.Assert.*;
-import org.testng.annotations.DataProvider;
-import org.testng.annotations.Test;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.BufferedReader;
-import java.io.FileReader;
-import java.io.IOException;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.HashSet;
-
-/**
- * Category Tester.
- *
- */
-public class PropertiesFilesTest extends MessagesTestCase {
-
-  /**
-   * Creates date for testForDuplicateKeys.
-   * @return The test data.
-   */
-  @DataProvider(name = "messagePropertiesFiles")
-  public Object[][] getMessagePropertiesFiles() {
-    File propFilesDir = getPropertiesFilesDirectory();
-    assertTrue(propFilesDir.exists(), "Directory " +
-            propFilesDir.getAbsolutePath() + " does not exist");
-    File[] fileList = propFilesDir.listFiles(new FilenameFilter() {
-      public boolean accept(File dir, String name) {
-        return name.endsWith(".properties");
-      }
-    });
-    Object[][] propFiles = new Object[fileList.length][1];
-    for (int i = 0; i < propFiles.length; i++) {
-      propFiles[i] = new Object[] { fileList[i] };
-    }
-    return propFiles;
-  }
-
-  /**
-   * Tests that a properties file does not have duplicate keys.  This
-   * is not enforced by GenerateMessageFile because it uses
-   * java.util.Properties to load and process the files which ignores
-   * duplicate keys.
-   *
-   * @param propertiesFile file
-   * @throws IOException if problems reading the file
-   */
-  @Test(dataProvider = "messagePropertiesFiles")
-  public void testForDuplicateKeys(File propertiesFile)
-      throws IOException
-  {
-    Set<String> keys = new HashSet<String>();
-    BufferedReader reader =
-        new BufferedReader(new FileReader(propertiesFile));
-    List<String> errors = new LinkedList<String>();
-
-    String prevLine = null;
-    String line;
-    while (null != (line = reader.readLine()))
-    {
-      if (!(prevLine == null || prevLine.endsWith("\\")) // not a value continuation
-          && !(line.startsWith("#")) // not a comment
-          && (line.indexOf('=') > 0))
-      {
-        // defines a key
-        String key = line.substring(0, line.indexOf('='));
-        if (keys.contains(key))
-        {
-          errors.add(key);
-        }
-        else
-        {
-          keys.add(key);
-        }
-      }
-      prevLine = line;
-    }
-
-    assertTrue(errors.isEmpty(),
-        "The following keys are defined multiple times in "
-            + propertiesFile.getName() + ":" + EOL
-            + StaticUtils.listToString(errors, EOL));
-  }
-
-  private File getPropertiesFilesDirectory() {
-    String buildRoot = System.getProperty(TestCaseUtils.PROPERTY_BUILD_ROOT);
-    return new File(buildRoot,
-            "src" + File.separator +
-            "messages" + File.separator +
-            "messages");
-  }
-
-}
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/SeverityTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/SeverityTest.java
deleted file mode 100644
index b40fdbb..0000000
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/messages/SeverityTest.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * CDDL HEADER START
- *
- * The contents of this file are subject to the terms of the
- * Common Development and Distribution License, Version 1.0 only
- * (the "License").  You may not use this file except in compliance
- * with the License.
- *
- * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
- * or http://forgerock.org/license/CDDLv1.0.html.
- * See the License for the specific language governing permissions
- * and limitations under the License.
- *
- * When distributing Covered Code, include this CDDL HEADER in each
- * file and include the License file at legal-notices/CDDLv1_0.txt.
- * If applicable, add the following below this CDDL HEADER, with the
- * fields enclosed by brackets "[]" replaced with your own identifying
- * information:
- *      Portions Copyright [yyyy] [name of copyright owner]
- *
- * CDDL HEADER END
- *
- *
- *      Copyright 2006-2008 Sun Microsystems, Inc.
- */
-
-package org.opends.messages;
-
-import static org.testng.Assert.*;
-import org.testng.annotations.*;
-
-import java.util.Set;
-
-/**
- * Severity Tester.
- */
-public class SeverityTest extends MessagesTestCase {
-
-  @DataProvider(name = "messageDescriptors")
-  public Object[][] getMessageDescriptors() {
-    return new Object[][]{
-            {CoreMessages.ERR_ABANDON_OP_NO_SUCH_OPERATION}
-    };
-  }
-
-  @DataProvider(name = "severities")
-  public Object[][] getSeverities() {
-    return new Object[][]{
-            {Severity.DEBUG},
-            {Severity.FATAL_ERROR},
-            {Severity.INFORMATION},
-            {Severity.MILD_ERROR},
-            {Severity.MILD_WARNING},
-            {Severity.NOTICE},
-            {Severity.SEVERE_ERROR},
-            {Severity.SEVERE_WARNING}
-    };
-  }
-
-  @DataProvider(name = "severities and pk names")
-  public Object[][] getSeveritiesAndPropertyKeyNames() {
-    return new Object[][]{
-            {Severity.DEBUG, "DEBUG"},
-            {Severity.FATAL_ERROR, "FATAL_ERR"},
-            {Severity.INFORMATION, "INFO"},
-            {Severity.MILD_ERROR, "MILD_ERR"},
-            {Severity.MILD_WARNING, "MILD_WARN"},
-            {Severity.NOTICE, "NOTICE"},
-            {Severity.SEVERE_ERROR, "SEVERE_ERR"},
-            {Severity.SEVERE_WARNING, "SEVERE_WARN"}
-    };
-  }
-
-  @DataProvider(name = "severities and md names")
-  public Object[][] getSeveritiesAndMessageDescriptorNames() {
-    return new Object[][]{
-            {Severity.DEBUG, "DEBUG"},
-            {Severity.FATAL_ERROR, "ERR"},
-            {Severity.INFORMATION, "INFO"},
-            {Severity.MILD_ERROR, "ERR"},
-            {Severity.MILD_WARNING, "WARN"},
-            {Severity.NOTICE, "NOTE"},
-            {Severity.SEVERE_ERROR, "ERR"},
-            {Severity.SEVERE_WARNING, "WARN"}
-    };
-  }
-
-  @DataProvider(name = "severities and masks")
-  public Object[][] getSeveritiesAndMasks() {
-    return new Object[][]{
-            {Severity.DEBUG, 0x00060000},
-            {Severity.FATAL_ERROR, 0x00050000},
-            {Severity.INFORMATION, 0x00000000},
-            {Severity.MILD_ERROR, 0x00030000},
-            {Severity.MILD_WARNING, 0x00010000},
-            {Severity.NOTICE, 0x00070000},
-            {Severity.SEVERE_ERROR, 0x00040000},
-            {Severity.SEVERE_WARNING, 0x00020000}
-    };
-  }
-
-  @DataProvider(name = "severities and strings")
-  public Object[][] getSeveritiesAndStrings() {
-    return new Object[][]{
-            {Severity.DEBUG, "DEBUG"},
-            {Severity.FATAL_ERROR, "FATAL_ERR"},
-            {Severity.FATAL_ERROR, "FATAL_ERROR"},
-            {Severity.INFORMATION, "INFO"},
-            {Severity.INFORMATION, "INFORMATION"},
-            {Severity.MILD_ERROR, "MILD_ERR"},
-            {Severity.MILD_ERROR, "MILD_ERROR"},
-            {Severity.MILD_WARNING, "MILD_WARN"},
-            {Severity.MILD_WARNING, "MILD_WARNING"},
-            {Severity.NOTICE, "NOTICE"},
-            {Severity.SEVERE_ERROR, "SEVERE_ERR"},
-            {Severity.SEVERE_ERROR, "SEVERE_ERROR"},
-            {Severity.SEVERE_WARNING, "SEVERE_WARN"},
-            {Severity.SEVERE_WARNING, "SEVERE_WARNING"}
-    };
-  }
-
-  @Test(dataProvider = "severities and pk names")
-  public void testGetPropertyKeyFormSet(Severity severity, String name) {
-    Set<String> s = Severity.getPropertyKeyFormSet();
-    assertTrue(s.contains(name));
-  }
-
-  @Test(dataProvider = "severities and masks")
-  public void testParseMask(Severity s, int mask) {
-    assertEquals(Severity.parseMask(mask), s);
-  }
-
-  @Test(dataProvider = "severities and strings")
-  public void testParseString(Severity sev, String s) {
-    assertEquals(Severity.parseString(s), sev);
-  }
-
-  @Test(dataProvider = "messageDescriptors")
-  public void testParseMessageId(MessageDescriptor md) {
-    assertEquals(Severity.parseMessageId(md.getId()), md.getSeverity());
-  }
-
-  @Test(dataProvider = "severities and masks")
-  public void testGetMask(Severity s, int mask) {
-    assertEquals(s.getMask(), mask);
-  }
-
-  @Test(dataProvider = "severities and md names")
-  public void testMessageDesciptorName(Severity s, String name) {
-    assertEquals(s.messageDesciptorName(), name);
-  }
-
-  @Test(dataProvider = "severities and pk names")
-  public void testPropertyKeyFormName(Severity sev, String s) {
-    assertEquals(sev.propertyKeyFormName(), s);
-  }
-
-}
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java
index e3bfc3e..9992f5a 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/DirectoryServerTestCase.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;
 
@@ -31,7 +31,7 @@
 import org.testng.annotations.BeforeSuite;
 import org.testng.annotations.Test;
 import org.testng.annotations.AfterClass;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -59,7 +59,7 @@
 
   @AfterSuite
   public final void shutdownServer() {
-    TestCaseUtils.shutdownServer(Message.raw("The current test suite has finished."));
+    TestCaseUtils.shutdownServer(LocalizableMessage.raw("The current test suite has finished."));
     TestCaseUtils.unsupressOutput();
   }
 
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 587b70c..9c9b1c1 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
@@ -35,7 +35,7 @@
 import java.util.logging.LogManager;
 import java.util.logging.Logger;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.client.ManagementContext;
 import org.opends.server.admin.client.ldap.JNDIDirContextAdaptor;
 import org.opends.server.admin.client.ldap.LDAPConnection;
@@ -758,7 +758,7 @@
    * @param reason
    *          The reason for the shutdown.
    */
-  static void shutdownServer(Message reason)
+  static void shutdownServer(LocalizableMessage reason)
   {
     if (SERVER_STARTED)
     {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/CliTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/CliTest.java
index 65d80b5..d7d4089 100755
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/CliTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/cli/CliTest.java
@@ -36,7 +36,7 @@
 import org.opends.server.DirectoryServerTestCase;
 
 import static org.opends.messages.AdminMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -61,7 +61,7 @@
   {
     String invalidMsg;
     String msg;
-    Message message;
+    LocalizableMessage message;
     for (DsFrameworkCliReturnCode returnCode : DsFrameworkCliReturnCode
         .values())
     {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/MockConstraint.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/MockConstraint.java
index b1d8cc6..4aa86f6 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/MockConstraint.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/client/ldap/MockConstraint.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.client.ldap;
 
@@ -30,7 +31,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Constraint;
 import org.opends.server.admin.ManagedObjectPath;
 import org.opends.server.admin.client.AuthorizationException;
@@ -58,10 +59,10 @@
      */
     @Override
     public boolean isAddAcceptable(ManagementContext context,
-        ManagedObject<?> managedObject, Collection<Message> unacceptableReasons)
+        ManagedObject<?> managedObject, Collection<LocalizableMessage> unacceptableReasons)
         throws AuthorizationException, CommunicationException {
       if (!allowAdds) {
-        unacceptableReasons.add(Message.raw("Adds not allowed"));
+        unacceptableReasons.add(LocalizableMessage.raw("Adds not allowed"));
       }
 
       return allowAdds;
@@ -74,10 +75,10 @@
      */
     @Override
     public boolean isDeleteAcceptable(ManagementContext context,
-        ManagedObjectPath<?, ?> path, Collection<Message> unacceptableReasons)
+        ManagedObjectPath<?, ?> path, Collection<LocalizableMessage> unacceptableReasons)
         throws AuthorizationException, CommunicationException {
       if (!allowDeletes) {
-        unacceptableReasons.add(Message.raw("Deletes not allowed"));
+        unacceptableReasons.add(LocalizableMessage.raw("Deletes not allowed"));
       }
 
       return allowDeletes;
@@ -90,10 +91,10 @@
      */
     @Override
     public boolean isModifyAcceptable(ManagementContext context,
-        ManagedObject<?> managedObject, Collection<Message> unacceptableReasons)
+        ManagedObject<?> managedObject, Collection<LocalizableMessage> unacceptableReasons)
         throws AuthorizationException, CommunicationException {
       if (!allowModifies) {
-        unacceptableReasons.add(Message.raw("Modifies not allowed"));
+        unacceptableReasons.add(LocalizableMessage.raw("Modifies not allowed"));
       }
 
       return allowModifies;
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/AggregationServerTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/AggregationServerTest.java
index cc375db..28e089f 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/AggregationServerTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/AggregationServerTest.java
@@ -22,7 +22,7 @@
  *
  *
  *      Copyright 2007-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -33,7 +33,7 @@
 
 import javax.naming.ldap.LdapName;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.*;
 import org.opends.server.admin.client.OperationRejectedException;
@@ -83,7 +83,7 @@
      */
     @Override
     public boolean isConfigurationChangeAcceptable(TestChildCfg configuration,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       return true;
     }
   }
@@ -113,7 +113,7 @@
      */
     @Override
     public boolean isConfigurationDeleteAcceptable(TestChildCfg configuration,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       return true;
     }
   }
@@ -411,7 +411,7 @@
       Throwable cause = e.getCause();
       if (cause instanceof ConstraintViolationException) {
         ConstraintViolationException cve = (ConstraintViolationException) cause;
-        Collection<Message> causes = cve.getMessages();
+        Collection<LocalizableMessage> causes = cve.getMessages();
         Assert.assertEquals(causes.size(), 2);
       } else {
         // Got an unexpected cause.
@@ -461,7 +461,7 @@
       Throwable cause = e.getCause();
       if (cause instanceof ConstraintViolationException) {
         ConstraintViolationException cve = (ConstraintViolationException) cause;
-        Collection<Message> causes = cve.getMessages();
+        Collection<LocalizableMessage> causes = cve.getMessages();
         Assert.assertEquals(causes.size(), 1);
       } else {
         // Got an unexpected cause.
@@ -522,7 +522,7 @@
       Throwable cause = e.getCause();
       if (cause instanceof ConstraintViolationException) {
         ConstraintViolationException cve = (ConstraintViolationException) cause;
-        Collection<Message> causes = cve.getMessages();
+        Collection<LocalizableMessage> causes = cve.getMessages();
         Assert.assertEquals(causes.size(), 1);
       } else {
         // Got an unexpected cause.
@@ -585,7 +585,7 @@
       Throwable cause = e.getCause();
       if (cause instanceof ConstraintViolationException) {
         ConstraintViolationException cve = (ConstraintViolationException) cause;
-        Collection<Message> causes = cve.getMessages();
+        Collection<LocalizableMessage> causes = cve.getMessages();
         Assert.assertEquals(causes.size(), 1);
       } else {
         // Got an unexpected cause.
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ConstraintTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ConstraintTest.java
index 9222d4f..8170745 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ConstraintTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/ConstraintTest.java
@@ -33,7 +33,7 @@
 import javax.naming.OperationNotSupportedException;
 import javax.naming.ldap.LdapName;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.AdminTestCase;
 import org.opends.server.admin.TestCfg;
@@ -84,7 +84,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationAddAcceptable(TestChildCfg configuration,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       return true;
     }
 
@@ -112,7 +112,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationDeleteAcceptable(TestChildCfg configuration,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       return true;
     }
 
@@ -140,7 +140,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationChangeAcceptable(TestChildCfg configuration,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       return true;
     }
 
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 f148ad8..ca4bd24 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
@@ -33,7 +33,7 @@
 
 import javax.naming.ldap.LdapName;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.AdminTestCase;
 import org.opends.server.admin.TestCfg;
@@ -108,7 +108,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationAddAcceptable(TestChildCfg configuration,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       child = configuration;
       return true;
     }
@@ -168,7 +168,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationChangeAcceptable(TestChildCfg configuration,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       child = configuration;
       return true;
     }
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 827a954..8289b62 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
@@ -32,7 +32,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.AdminTestCase;
 import org.opends.server.admin.TestCfg;
@@ -76,7 +76,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationAddAcceptable(TestParentCfg configuration,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       // No implementation required.
       return false;
     }
@@ -103,7 +103,7 @@
      * {@inheritDoc}
      */
     public boolean isConfigurationDeleteAcceptable(TestParentCfg configuration,
-        List<Message> unacceptableReasons) {
+        List<LocalizableMessage> unacceptableReasons) {
       // No implementation required.
       return false;
     }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/MockConstraint.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/MockConstraint.java
index c4db668..895681d 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/MockConstraint.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/admin/server/MockConstraint.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.admin.server;
 
@@ -30,7 +31,7 @@
 import java.util.Collection;
 import java.util.Collections;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.Constraint;
 import org.opends.server.admin.client.ClientConstraintHandler;
 import org.opends.server.config.ConfigEntry;
@@ -57,10 +58,10 @@
      */
     @Override
     public boolean isDeleteAllowed(ServerManagedObject<?> managedObject,
-        Collection<Message> unacceptableReasons) throws ConfigException {
+        Collection<LocalizableMessage> unacceptableReasons) throws ConfigException {
       if (!isDeleteAllowed) {
         unacceptableReasons
-            .add(Message.raw("Configuration cannot be deleted."));
+            .add(LocalizableMessage.raw("Configuration cannot be deleted."));
       }
 
       return isDeleteAllowed;
@@ -73,9 +74,9 @@
      */
     @Override
     public boolean isUsable(ServerManagedObject<?> managedObject,
-        Collection<Message> unacceptableReasons) throws ConfigException {
+        Collection<LocalizableMessage> unacceptableReasons) throws ConfigException {
       if (!isUsable) {
-        unacceptableReasons.add(Message.raw("Configuration is not usable."));
+        unacceptableReasons.add(LocalizableMessage.raw("Configuration is not usable."));
       }
 
       return isUsable;
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 47ffcfc..1b0e81c 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
@@ -34,7 +34,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AlertGenerator;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.extensions.DummyAlertHandler;
@@ -70,7 +70,7 @@
   /**
    * The alert message to use for these tests.
    */
-  public static final Message ALERT_MESSAGE = Message.raw("This is the alert message");
+  public static final LocalizableMessage ALERT_MESSAGE = LocalizableMessage.raw("This is the alert message");
 
 
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/ConfigChangeListenerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/ConfigChangeListenerTestCase.java
index 9cbac5c..fb57b16 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/ConfigChangeListenerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/api/ConfigChangeListenerTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.api;
 
@@ -33,7 +34,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.config.ConfigEntry;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.DN;
@@ -138,7 +139,7 @@
     ConfigEntry e = DirectoryServer.getConfigEntry(dn);
     assertNotNull(e);
 
-    MessageBuilder unacceptableReason = new MessageBuilder();
+    LocalizableMessageBuilder unacceptableReason = new LocalizableMessageBuilder();
     assertTrue(l.configChangeIsAcceptable(e, unacceptableReason),
                unacceptableReason.toString());
   }
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 22227e8..920d804 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
@@ -47,7 +47,7 @@
 import org.opends.server.types.CanceledOperationException;
 import org.opends.server.types.operation.*;
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.testng.Assert.*;
 
@@ -200,7 +200,7 @@
     sigList = new LinkedList<String>();
     sigList.add("doShutdown");
     sigList.add("void");
-    sigList.add("org.opends.messages.Message");
+    sigList.add("org.forgerock.i18n.LocalizableMessage");
     expectedPublicMethods.add(sigList);
 
     sigList = new LinkedList<String>();
@@ -214,7 +214,7 @@
     sigList.add("org.opends.server.api.plugin.PluginResult$PostDisconnect");
     sigList.add("org.opends.server.api.ClientConnection");
     sigList.add("org.opends.server.types.DisconnectReason");
-    sigList.add("org.opends.messages.Message");
+    sigList.add("org.forgerock.i18n.LocalizableMessage");
     expectedPublicMethods.add(sigList);
 
     sigList = new LinkedList<String>();
@@ -955,7 +955,7 @@
   @Test(expectedExceptions = { UnsupportedOperationException.class })
   public void testDoShutdown()
   {
-    new NullPlugin().doShutdown(Message.raw("testDoShutdown"));
+    new NullPlugin().doShutdown(LocalizableMessage.raw("testDoShutdown"));
   }
 
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTests.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTests.java
index 70b8a3e..abde251 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTests.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/AciTests.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 2013 Manuel Gaupp
  *
  */
@@ -37,7 +37,7 @@
 import java.util.*;
 import java.util.regex.Pattern;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.protocols.ldap.LDAPResultCode;
 import org.opends.server.tools.*;
@@ -1763,7 +1763,7 @@
       ByteArrayOutputStream updatedEntriesStream = new ByteArrayOutputStream();
       LDIFWriter ldifWriter = new LDIFWriter(new LDIFExportConfig(updatedEntriesStream));
 
-      List<Message> errors = new ArrayList<Message>();
+      List<LocalizableMessage> errors = new ArrayList<LocalizableMessage>();
       LDIFModify.modifyLDIF(baseReader, changesReader, ldifWriter, errors);
       Assert.assertTrue(errors.isEmpty(), "Unexpected errors applying LDIF changes: " + errors);
       ldifWriter.flush();
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/JebTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/JebTestCase.java
index ea6bfa3..3082ad8 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/JebTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/backends/jeb/JebTestCase.java
@@ -43,7 +43,7 @@
 import org.opends.server.types.ResultCode;
 import org.opends.server.DirectoryServerTestCase;
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.types.Entry;
 import org.opends.server.util.LDIFReader;
 import org.testng.annotations.Test;
@@ -74,7 +74,7 @@
         File.separator + "resource"+File.separator+"MakeLDIF";
         TemplateFile templateFile =
             new TemplateFile(makeLDIFPath, new Random());
-        ArrayList<Message> warnings = new ArrayList<Message>();
+        ArrayList<LocalizableMessage> warnings = new ArrayList<LocalizableMessage>();
         templateFile.parse(template, warnings);
         MakeLDIFInputStream ldifEntryStream =
             new MakeLDIFInputStream(templateFile);
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 0875f1a..902e236 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
@@ -28,7 +28,7 @@
 
 import java.util.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.ModifyOperation;
 import org.opends.server.protocols.asn1.ASN1;
@@ -586,6 +586,6 @@
     assertEquals(LDAPSearch.mainSearch(args, false,
                   true, null, System.err),11);
     //cancel the persisting persistent search.
-    search.cancel(new CancelRequest(true,Message.EMPTY));
+    search.cancel(new CancelRequest(true,LocalizableMessage.EMPTY));
   }
 }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AbandonOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AbandonOperationTestCase.java
index fe8adcf..72fb1e7 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AbandonOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/AbandonOperationTestCase.java
@@ -35,7 +35,7 @@
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.plugins.DelayPreOpPlugin;
 import org.opends.server.plugins.DisconnectClientPlugin;
@@ -115,7 +115,7 @@
                   InternalClientConnection.nextMessageID(), new ArrayList<Control>(), 1);
 
     CancelRequest cancelRequest = new CancelRequest(true,
-            Message.raw("Test Cancel"));
+            LocalizableMessage.raw("Test Cancel"));
 
     assertEquals(abandonOperation.cancel(cancelRequest).getResultCode(),
                  ResultCode.CANNOT_CANCEL);
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 33957f7..c011f84 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
@@ -35,7 +35,7 @@
 import java.util.Map;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.api.Backend;
 import org.opends.server.plugins.DisconnectClientPlugin;
@@ -1954,7 +1954,7 @@
                           entry.getOperationalAttributes());
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    Message.raw("testCancelBeforeStartup"));
+                                                    LocalizableMessage.raw("testCancelBeforeStartup"));
     addOperation.abort(cancelRequest);
     addOperation.run();
     assertEquals(addOperation.getResultCode(), ResultCode.CANCELED);
@@ -1989,7 +1989,7 @@
     addOperation.run();
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    Message.raw("testCancelAfterOperation"));
+                                                    LocalizableMessage.raw("testCancelAfterOperation"));
     CancelResult cancelResult = addOperation.cancel(cancelRequest);
 
     assertEquals(addOperation.getResultCode(), ResultCode.SUCCESS);
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 02d527e..667c534 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
@@ -34,7 +34,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.plugins.DisconnectClientPlugin;
 import org.opends.server.plugins.InvocationCounterPlugin;
@@ -2352,7 +2352,7 @@
   public void testCancel(BindOperation bindOperation)
   {
     CancelRequest cancelRequest =
-         new CancelRequest(false, Message.raw("Test Unbind Cancel"));
+         new CancelRequest(false, LocalizableMessage.raw("Test Unbind Cancel"));
 
     assertEquals(bindOperation.cancel(cancelRequest).getResultCode(),
                  ResultCode.CANNOT_CANCEL);
@@ -2367,7 +2367,7 @@
   public void testGetCancelRequest(BindOperation bindOperation)
   {
     CancelRequest cancelRequest =
-         new CancelRequest(false, Message.raw("Test Unbind Cancel"));
+         new CancelRequest(false, LocalizableMessage.raw("Test Unbind Cancel"));
 
     assertNull(bindOperation.getCancelRequest());
 
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 43bb3c6..a5b9c82 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
@@ -34,7 +34,7 @@
 import java.util.List;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.api.Backend;
 import org.opends.server.plugins.DisconnectClientPlugin;
@@ -707,7 +707,7 @@
         newDeleteOperation(null, ByteString.valueOf("o=test"));
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    Message.raw("testCancelBeforeStartup"));
+                                                    LocalizableMessage.raw("testCancelBeforeStartup"));
     deleteOperation.abort(cancelRequest);
     deleteOperation.run();
     assertEquals(deleteOperation.getResultCode(), ResultCode.CANCELED);
@@ -729,7 +729,7 @@
     deleteOperation.run();
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    Message.raw("testCancelAfterOperation"));
+                                                    LocalizableMessage.raw("testCancelAfterOperation"));
     CancelResult cancelResult = deleteOperation.cancel(cancelRequest);
 
     assertEquals(deleteOperation.getResultCode(), ResultCode.SUCCESS);
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 e446334..ab80795 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
@@ -36,7 +36,7 @@
 import java.util.List;
 import java.util.concurrent.locks.Lock;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.api.Backend;
 import org.opends.server.plugins.DisconnectClientPlugin;
@@ -2810,7 +2810,7 @@
         newModifyOperation(null, ByteString.valueOf(baseDN), mods);
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    Message.raw("testCancelBeforeStartup"));
+                                                    LocalizableMessage.raw("testCancelBeforeStartup"));
     modifyOperation.abort(cancelRequest);
     modifyOperation.run();
     assertEquals(modifyOperation.getResultCode(), ResultCode.CANCELED);
@@ -2837,7 +2837,7 @@
     modifyOperation.run();
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    Message.raw("testCancelBeforeStartup"));
+                                                    LocalizableMessage.raw("testCancelBeforeStartup"));
     CancelResult cancelResponse = modifyOperation.cancel(cancelRequest);
     assertEquals(modifyOperation.getResultCode(), ResultCode.SUCCESS);
     assertEquals(cancelResponse.getResultCode(), ResultCode.TOO_LATE);
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 f4e6b8c..e296964 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
@@ -31,7 +31,7 @@
 import org.testng.annotations.BeforeClass;
 import static org.testng.Assert.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.controls.ProxiedAuthV1Control;
@@ -560,7 +560,7 @@
     modifyDNOperation.run();
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    Message.raw("testCancelBeforeStartup"));
+                                                    LocalizableMessage.raw("testCancelBeforeStartup"));
     CancelResult cancelResult = modifyDNOperation.cancel(cancelRequest);
 
     assertEquals(cancelResult.getResultCode(), ResultCode.TOO_LATE);
@@ -1342,7 +1342,7 @@
                                DN.valueOf("dc=example,dc=com"));
 
     CancelRequest cancelRequest = new CancelRequest(false,
-                                                    Message.raw("testCancelBeforeStartup"));
+                                                    LocalizableMessage.raw("testCancelBeforeStartup"));
     modifyDNOperation.abort(cancelRequest);
     modifyDNOperation.run();
     assertEquals(modifyDNOperation.getResultCode(), ResultCode.CANCELED);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/UnbindOperationTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/UnbindOperationTestCase.java
index fa56923..a2bda1f 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/UnbindOperationTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/UnbindOperationTestCase.java
@@ -22,13 +22,13 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
- *      Portions copyright 2013 ForgeRock AS
+ *      Portions Copyright 2013-2014 ForgeRock AS
  */
 package org.opends.server.core;
 
 import java.util.ArrayList;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.plugins.InvocationCounterPlugin;
 import org.opends.server.protocols.internal.InternalClientConnection;
 import org.opends.server.types.CancelRequest;
@@ -101,7 +101,7 @@
   {
     final InternalClientConnection conn = getRootConnection();
     CancelRequest cancelRequest =
-         new CancelRequest(false, Message.raw("Test Unbind Cancel"));
+         new CancelRequest(false, LocalizableMessage.raw("Test Unbind Cancel"));
 
     UnbindOperationBasis unbindOperation = new UnbindOperationBasis(
         conn, nextOperationID(), nextMessageID(), new ArrayList<Control>());
@@ -118,7 +118,7 @@
   {
     final InternalClientConnection conn = getRootConnection();
     CancelRequest cancelRequest =
-         new CancelRequest(false, Message.raw("Test Unbind Cancel"));
+         new CancelRequest(false, LocalizableMessage.raw("Test Unbind Cancel"));
 
     UnbindOperationBasis unbindOperation = new UnbindOperationBasis(
         conn, nextOperationID(), nextMessageID(), new ArrayList<Control>());
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 8f8e7b2..13260bd 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
@@ -28,15 +28,20 @@
 
 
 import static org.opends.messages.CoreMessages.*;
-import org.opends.messages.MessageBuilder;
+
+import org.forgerock.i18n.LocalizableMessageBuilder;
+
 import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.assertNull;
+
 import java.util.ArrayList;
 
 import org.opends.server.TestCaseUtils;
 import org.opends.server.types.DN;
 import org.opends.server.types.DirectoryException;
 import org.opends.server.types.ResultCode;
+import org.opends.server.util.StaticUtils;
 import org.opends.server.util.UtilTestCase;
 import org.opends.server.workflowelement.WorkflowElement;
 import org.testng.annotations.BeforeClass;
@@ -911,10 +916,10 @@
   {
     // Check the function that elaborates the global result code
     WorkflowResultCode globalResultCode = new WorkflowResultCode (
-        initialResultCode, new MessageBuilder("")
+        initialResultCode, new LocalizableMessageBuilder("")
         );
     globalResultCode.elaborateGlobalResultCode (
-        receivedResultCode, new MessageBuilder("")
+        receivedResultCode, new LocalizableMessageBuilder("")
         );
     assertEquals (globalResultCode.resultCode(), expectedGlobalResultCode);
   }
@@ -951,7 +956,8 @@
     catch (DirectoryException e)
     {
       exceptionRaised = true;
-      assertEquals(e.getMessageObject().getDescriptor(), ERR_REGISTER_WORKFLOW_ALREADY_EXISTS);
+      assertTrue(StaticUtils.hasDescriptor(e.getMessageObject(),
+          ERR_REGISTER_WORKFLOW_ALREADY_EXISTS));
     }
     assertEquals(exceptionRaised, true);
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/MockClientConnection.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/MockClientConnection.java
index 19248b2..844982e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/MockClientConnection.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/core/networkgroups/MockClientConnection.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.core.networkgroups;
 
@@ -30,7 +30,7 @@
 import java.net.UnknownHostException;
 import java.util.Collection;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.NetworkGroupCfgDefn.AllowedAuthMethod;
 import org.opends.server.api.ClientConnection;
 import org.opends.server.api.ConnectionHandler;
@@ -123,7 +123,7 @@
 
   @Override
   public void disconnect(DisconnectReason disconnectReason,
-      boolean sendNotification, Message message)
+      boolean sendNotification, LocalizableMessage message)
   {
     // Stub.
   }
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 6f60d0c..80cfaef 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
@@ -37,6 +37,7 @@
 import org.opends.server.protocols.internal.InternalClientConnection;
 import org.opends.server.protocols.ldap.LDAPFilter;
 import org.opends.server.types.*;
+import org.opends.server.util.StaticUtils;
 import org.opends.server.workflowelement.WorkflowElement;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.DataProvider;
@@ -344,8 +345,8 @@
     catch (InitializationException e)
     {
       exceptionRaised = true;
-      assertEquals(e.getMessageObject().getDescriptor(),
-                   ERR_REGISTER_NETWORK_GROUP_ALREADY_EXISTS);
+      assertTrue(StaticUtils.hasDescriptor(e.getMessageObject(),
+          ERR_REGISTER_NETWORK_GROUP_ALREADY_EXISTS));
     }
     assertEquals(exceptionRaised, true);
 
@@ -368,9 +369,8 @@
     catch (DirectoryException de)
     {
       exceptionRaised = true;
-      assertEquals(
-          de.getMessageObject().getDescriptor(),
-              ERR_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS);
+      assertTrue(StaticUtils.hasDescriptor(de.getMessageObject(),
+          ERR_REGISTER_WORKFLOW_NODE_ALREADY_EXISTS));
     }
     assertEquals(exceptionRaised, true);
 
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 f7e6916..836f5ed 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
@@ -31,7 +31,7 @@
 import java.util.Collections;
 import java.util.SortedSet;
 import java.util.TreeSet;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.DirectoryServerTestCase;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.std.meta.RequestFilteringQOSPolicyCfgDefn.AllowedOperations;
@@ -357,7 +357,7 @@
           boolean success)
           throws Exception
   {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     RequestFilteringPolicyFactory factory = new RequestFilteringPolicyFactory();
     RequestFilteringPolicy policy = factory.createQOSPolicy(new MockRequestFilteringQOSPolicyCfg() {
@@ -394,7 +394,7 @@
           boolean success)
           throws Exception
   {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     RequestFilteringPolicyFactory factory = new RequestFilteringPolicyFactory();
     RequestFilteringPolicy policy = factory.createQOSPolicy(new MockRequestFilteringQOSPolicyCfg() {
@@ -431,7 +431,7 @@
           boolean success)
           throws Exception
   {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     RequestFilteringPolicyFactory factory = new RequestFilteringPolicyFactory();
     RequestFilteringPolicy policy = factory.createQOSPolicy(new MockRequestFilteringQOSPolicyCfg() {
@@ -468,7 +468,7 @@
           boolean success)
           throws Exception
   {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     RequestFilteringPolicyFactory factory = new RequestFilteringPolicyFactory();
     RequestFilteringPolicy policy = factory.createQOSPolicy(new MockRequestFilteringQOSPolicyCfg() {
@@ -505,7 +505,7 @@
           boolean success)
           throws Exception
   {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     RequestFilteringPolicyFactory factory = new RequestFilteringPolicyFactory();
     RequestFilteringPolicy policy = factory.createQOSPolicy(new MockRequestFilteringQOSPolicyCfg() {
@@ -543,7 +543,7 @@
           boolean success)
           throws Exception
   {
-    ArrayList<Message> messages = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     RequestFilteringPolicyFactory factory = new RequestFilteringPolicyFactory();
     RequestFilteringPolicy policy = factory.createQOSPolicy(new MockRequestFilteringQOSPolicyCfg() {
@@ -586,7 +586,7 @@
            boolean success)
            throws Exception
    {
-     ArrayList<Message> messages = new ArrayList<Message>();
+     ArrayList<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
      RequestFilteringPolicyFactory factory = new RequestFilteringPolicyFactory();
      RequestFilteringPolicy policy = factory.createQOSPolicy(new MockRequestFilteringQOSPolicyCfg() {
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 e12e016..e976f87 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
@@ -29,7 +29,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.DirectoryServerTestCase;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.protocols.internal.InternalClientConnection;
@@ -119,7 +119,7 @@
   public void testMaxNumberOfConnections()
           throws Exception
   {
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     ResourceLimitsPolicyFactory factory = new ResourceLimitsPolicyFactory();
     ResourceLimitsPolicy limits =
@@ -157,7 +157,7 @@
   public void testMaxNumberOfConnectionsFromSameIp()
           throws Exception
   {
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     ResourceLimitsPolicyFactory factory = new ResourceLimitsPolicyFactory();
     ResourceLimitsPolicy limits =
@@ -201,7 +201,7 @@
           boolean success)
           throws Exception
   {
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
 
     ResourceLimitsPolicyFactory factory = new ResourceLimitsPolicyFactory();
     ResourceLimitsPolicy limits =
@@ -237,7 +237,7 @@
   public void testMaxThroughput()
           throws Exception
   {
-    List<Message> messages = new ArrayList<Message>();
+    List<LocalizableMessage> messages = new ArrayList<LocalizableMessage>();
     final long interval = 1000; // Unit is milliseconds
 
     ResourceLimitsPolicyFactory factory = new ResourceLimitsPolicyFactory();
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 ba150e4..f79f059 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
@@ -47,7 +47,7 @@
 
 import org.opends.admin.ads.ADSContext;
 import org.opends.admin.ads.util.ConnectionUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.config.ConfigConstants;
 import org.opends.server.core.DirectoryServer;
@@ -326,7 +326,7 @@
 
     EmbeddedUtils.restartServer(
             this.getClass().getName(),
-            Message.raw("CryptoManager: testing persistent secret keys."),
+            LocalizableMessage.raw("CryptoManager: testing persistent secret keys."),
             DirectoryServer.getEnvironmentConfig());
 
     byte[] plainText = cm.decrypt(cipherText);
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 065beaf..cb10ea5 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
@@ -37,7 +37,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.meta.AttributeValuePasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.AttributeValuePasswordValidatorCfg;
 import org.opends.server.admin.server.AdminTestCaseUtils;
@@ -449,7 +449,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertEquals(validator.passwordIsAcceptable(pwOS,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
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 76d228b..2f15101 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
@@ -37,7 +37,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.meta.CharacterSetPasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.CharacterSetPasswordValidatorCfg;
 import org.opends.server.admin.server.AdminTestCaseUtils;
@@ -937,7 +937,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertEquals(validator.passwordIsAcceptable(pwOS,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
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 10127e2..6f6aa70 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
@@ -39,7 +39,7 @@
 import org.testng.annotations.AfterClass;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.std.meta.DictionaryPasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.DictionaryPasswordValidatorCfg;
 import org.opends.server.admin.server.AdminTestCaseUtils;
@@ -686,7 +686,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertEquals(validator.passwordIsAcceptable(pwOS,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DummyAlertHandler.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DummyAlertHandler.java
index 51f1798..d85c340 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DummyAlertHandler.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/DummyAlertHandler.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -38,7 +39,7 @@
 import org.opends.server.types.ConfigChangeResult;
 import org.opends.server.types.InitializationException;
 import org.opends.server.types.ResultCode;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -94,7 +95,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationAcceptable(AlertHandlerCfg configuration,
-                                           List<Message> unacceptableReasons)
+                                           List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
@@ -115,7 +116,7 @@
    * {@inheritDoc}
    */
   public void sendAlertNotification(AlertGenerator generator, String alertType,
-                                    Message alertMessage)
+                                    LocalizableMessage alertMessage)
   {
     alertCount.incrementAndGet();
   }
@@ -138,7 +139,7 @@
    * {@inheritDoc}
    */
   public boolean isConfigurationChangeAcceptable(AlertHandlerCfg configuration,
-                      List<Message> unacceptableReasons)
+                      List<LocalizableMessage> unacceptableReasons)
   {
     return true;
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntityTagVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntityTagVirtualAttributeProviderTestCase.java
index 3fcc211..076ca36 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntityTagVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/EntityTagVirtualAttributeProviderTestCase.java
@@ -42,8 +42,8 @@
 import java.util.SortedSet;
 import java.util.TreeSet;
 
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.EntityTagVirtualAttributeCfgDefn.ChecksumAlgorithm;
@@ -540,16 +540,16 @@
     final SearchOperation search = new SearchOperationWrapper(null)
     {
       ResultCode resultCode = null;
-      MessageBuilder message = null;
+      LocalizableMessageBuilder message = null;
 
 
 
       /**
        * {@inheritDoc}
        */
-      public void appendErrorMessage(final Message message)
+      public void appendErrorMessage(final LocalizableMessage message)
       {
-        this.message = new MessageBuilder(message);
+        this.message = new LocalizableMessageBuilder(message);
       }
 
 
@@ -557,7 +557,7 @@
       /**
        * {@inheritDoc}
        */
-      public MessageBuilder getErrorMessage()
+      public LocalizableMessageBuilder getErrorMessage()
       {
         return message;
       }
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 fa502ff..b8face5 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
@@ -38,7 +38,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AccountStatusNotificationHandler;
 import org.opends.server.api.AuthenticationPolicy;
 import org.opends.server.admin.server.AdminTestCaseUtils;
@@ -311,7 +311,7 @@
 
     AccountStatusNotification notification =
          new AccountStatusNotification(notificationType, userEntry,
-                                       Message.raw("Test Modification"),
+                                       LocalizableMessage.raw("Test Modification"),
                                        notificationProperties);
     handler.handleStatusNotification(notification);
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/JMXAlertHandlerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/JMXAlertHandlerTestCase.java
index 79ac352..206cdce 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/JMXAlertHandlerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/JMXAlertHandlerTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.extensions;
 
@@ -39,7 +40,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.AlertHandler;
 import org.opends.server.core.DirectoryServer;
 
@@ -124,7 +125,7 @@
     TestAlertGenerator generator = new TestAlertGenerator();
 
     handler.sendAlertNotification(generator, generator.getAlertType(),
-            Message.raw("This is a test alert message."));
+            LocalizableMessage.raw("This is a test alert message."));
   }
 
 
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 5914626..9fa91e1 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
@@ -36,7 +36,7 @@
 import java.util.*;
 import java.util.concurrent.*;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.server.ConfigurationChangeListener;
 import org.opends.server.admin.std.meta.LDAPPassThroughAuthenticationPolicyCfgDefn.MappingPolicy;
@@ -2187,7 +2187,7 @@
   {
     final LDAPPassThroughAuthenticationPolicyFactory factory = new LDAPPassThroughAuthenticationPolicyFactory();
     assertEquals(
-        factory.isConfigurationAcceptable(cfg, new LinkedList<Message>()),
+        factory.isConfigurationAcceptable(cfg, new LinkedList<LocalizableMessage>()),
         isValid);
   }
 
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 6c4c5ce..f3b5130 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
@@ -34,7 +34,7 @@
 import java.util.HashSet;
 import java.util.List;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.server.AdminTestCaseUtils;
 import org.opends.server.admin.std.meta.LengthBasedPasswordValidatorCfgDefn;
@@ -374,7 +374,7 @@
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
                                DN.valueOf("cn=uid=test.user,o=test"), mods);
 
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       assertTrue(validator.passwordIsAcceptable(password,
                                                 new HashSet<ByteString>(0),
                                                 op, userEntry, invalidReason));
@@ -447,7 +447,7 @@
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
                                DN.valueOf("cn=uid=test.user,o=test"), mods);
 
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       assertEquals((buffer.length() >= 10),
                    validator.passwordIsAcceptable(password,
                                                   new HashSet<ByteString>(0),
@@ -522,7 +522,7 @@
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
                                DN.valueOf("cn=uid=test.user,o=test"), mods);
 
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       assertEquals((buffer.length() <= 10),
                    validator.passwordIsAcceptable(password,
                                                   new HashSet<ByteString>(0),
@@ -597,7 +597,7 @@
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
                                DN.valueOf("cn=uid=test.user,o=test"), mods);
 
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       assertEquals(((buffer.length() >= 6) && (buffer.length() <= 10)),
                    validator.passwordIsAcceptable(password,
                                                   new HashSet<ByteString>(0),
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordExpirationTimeVirtualAttributeProviderTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordExpirationTimeVirtualAttributeProviderTestCase.java
index e731a21..9e2df0e 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordExpirationTimeVirtualAttributeProviderTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/PasswordExpirationTimeVirtualAttributeProviderTestCase.java
@@ -33,7 +33,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
@@ -238,7 +238,7 @@
 
     AttributeValue val = it.next();
 
-    conn.disconnect(DisconnectReason.UNBIND, true, Message.EMPTY);
+    conn.disconnect(DisconnectReason.UNBIND, true, LocalizableMessage.EMPTY);
 
     return
       GeneralizedTimeSyntax.decodeGeneralizedTimeValue(val.getValue());
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 77b6a0d..9be7018 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
@@ -34,7 +34,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.server.AdminTestCaseUtils;
 import org.opends.server.admin.std.meta.
             RegularExpressionIdentityMapperCfgDefn;
@@ -122,7 +122,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertFalse(mapper.isConfigurationAcceptable(configuration,
-                                                 new LinkedList<Message>()));
+                                                 new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
   }
 
@@ -160,7 +160,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertFalse(mapper.isConfigurationAcceptable(configuration,
-                                                 new LinkedList<Message>()));
+                                                 new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
   }
 
@@ -199,7 +199,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<Message>()));
+                                                new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -264,7 +264,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<Message>()));
+                                                new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -329,7 +329,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<Message>()));
+                                                new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -394,7 +394,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<Message>()));
+                                                new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -459,7 +459,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<Message>()));
+                                                new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -523,7 +523,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<Message>()));
+                                                new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -585,7 +585,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<Message>()));
+                                                new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -648,7 +648,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<Message>()));
+                                                new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -712,7 +712,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<Message>()));
+                                                new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
 
 
@@ -791,7 +791,7 @@
     RegularExpressionIdentityMapper mapper =
          new RegularExpressionIdentityMapper();
     assertTrue(mapper.isConfigurationAcceptable(configuration,
-                                                new LinkedList<Message>()));
+                                                new LinkedList<LocalizableMessage>()));
     mapper.initializeIdentityMapper(configuration);
 
 
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 ea24e83..4e6c63e 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
@@ -37,8 +37,8 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.
             RepeatedCharactersPasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.
@@ -321,7 +321,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -390,7 +390,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
                                new HashSet<ByteString>(0), modifyOperation,
                                userEntry, invalidReason));
@@ -458,7 +458,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -527,7 +527,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
                                new HashSet<ByteString>(0), modifyOperation,
                                userEntry, invalidReason));
@@ -594,7 +594,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -662,7 +662,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -685,7 +685,7 @@
               RepeatedCharactersPasswordValidatorCfgDefn.getInstance(),
               updatedValidatorEntry);
 
-    ArrayList<Message> unacceptableReasons = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
     assertTrue(validator.isConfigurationChangeAcceptable(updatedConfiguration,
                                                          unacceptableReasons),
                String.valueOf(unacceptableReasons));
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 d186220..a588296 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
@@ -35,7 +35,7 @@
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.config.ConfigException;
 import org.opends.server.core.ModifyOperationBasis;
 import org.opends.server.protocols.internal.InternalClientConnection;
@@ -295,7 +295,7 @@
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
                                DN.valueOf("cn=uid=test.user,o=test"), mods);
 
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       assertTrue(validator.passwordIsAcceptable(password,
                                                 new HashSet<ByteString>(0),
                                                 op, userEntry, invalidReason));
@@ -371,7 +371,7 @@
                                InternalClientConnection.nextMessageID(), new ArrayList<Control>(),
                                DN.valueOf("cn=uid=test.user,o=test"), mods);
 
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       assertEquals((buffer.length() >= 6),
                    validator.passwordIsAcceptable(password,
                                                   currentPassword,
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestPasswordValidator.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestPasswordValidator.java
index dc1bab2..9b06d49 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestPasswordValidator.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/extensions/TestPasswordValidator.java
@@ -34,7 +34,7 @@
 import org.opends.server.api.PasswordValidator;
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteString;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 
 
 /**
@@ -112,7 +112,7 @@
   public boolean passwordIsAcceptable(ByteString newPassword,
                                       Set<ByteString> currentPasswords,
                                       Operation operation, Entry userEntry,
-                                      MessageBuilder invalidReason)
+                                      LocalizableMessageBuilder invalidReason)
   {
     lastNewPassword      = newPassword;
     lastCurrentPasswords = currentPasswords;
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 c4a2f50..e6af5b5 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
@@ -37,8 +37,8 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.MessageBuilder;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.meta.
             UniqueCharactersPasswordValidatorCfgDefn;
 import org.opends.server.admin.std.server.
@@ -321,7 +321,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -390,7 +390,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
                                new HashSet<ByteString>(0), modifyOperation,
                                userEntry, invalidReason));
@@ -458,7 +458,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -527,7 +527,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertFalse(validator.passwordIsAcceptable(password,
                                new HashSet<ByteString>(0), modifyOperation,
                                userEntry, invalidReason));
@@ -594,7 +594,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -662,7 +662,7 @@
                              new ArrayList<Control>(),
                              DN.valueOf("uid=test.user,o=test"), mods);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(validator.passwordIsAcceptable(password,
                               new HashSet<ByteString>(0), modifyOperation,
                               userEntry, invalidReason),
@@ -685,7 +685,7 @@
               UniqueCharactersPasswordValidatorCfgDefn.getInstance(),
               updatedValidatorEntry);
 
-    ArrayList<Message> unacceptableReasons = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
     assertTrue(validator.isConfigurationChangeAcceptable(updatedConfiguration,
                                                          unacceptableReasons),
                String.valueOf(unacceptableReasons));
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/DelayPreOpPlugin.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/DelayPreOpPlugin.java
index b644985..4820b12 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/DelayPreOpPlugin.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/DelayPreOpPlugin.java
@@ -33,7 +33,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.PluginCfg;
 import org.opends.server.api.plugin.DirectoryServerPlugin;
 import org.opends.server.api.plugin.PluginResult;
@@ -197,7 +197,7 @@
           // This is fine.
           break;
         default:
-          throw new ConfigException(Message.raw("Invalid plugin type " + t +
+          throw new ConfigException(LocalizableMessage.raw("Invalid plugin type " + t +
                                     " for delay pre-op plugin."));
       }
     }
@@ -332,7 +332,7 @@
     {
       return PluginResult.PreOperation.stopProcessing(
           ResultCode.PROTOCOL_ERROR,
-          Message.raw("Unable to decode the delay request control:  " +
+          LocalizableMessage.raw("Unable to decode the delay request control:  " +
               e));
     }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java
index a029c21..71f7132 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/DisconnectClientPlugin.java
@@ -33,7 +33,7 @@
 import java.util.List;
 import java.util.Set;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.PluginCfg;
 import org.opends.server.api.plugin.DirectoryServerPlugin;
 import org.opends.server.api.plugin.PluginResult;
@@ -217,7 +217,7 @@
           // This is fine.
           break;
         default:
-          throw new ConfigException(Message.raw("Invalid plugin type " + t +
+          throw new ConfigException(LocalizableMessage.raw("Invalid plugin type " + t +
                                     " for the disconnect plugin."));
       }
     }
@@ -754,7 +754,7 @@
       if (control != null && control.getSection().equalsIgnoreCase(section))
       {
         operation.disconnectClient(DisconnectReason.CLOSED_BY_PLUGIN, true,
-            Message.raw("Closed by disconnect client plugin (section " +
+            LocalizableMessage.raw("Closed by disconnect client plugin (section " +
                 section + ")"));
 
         return true;
@@ -762,7 +762,7 @@
     }
     catch (Exception e)
     {
-      ErrorLogger.logError(Message.raw("Unable to decode the disconnect client control:  " +
+      ErrorLogger.logError(LocalizableMessage.raw("Unable to decode the disconnect client control:  " +
               e));
     }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/InvocationCounterPlugin.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/InvocationCounterPlugin.java
index 97dc00e..a144217 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/InvocationCounterPlugin.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/InvocationCounterPlugin.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.plugins;
 
@@ -43,7 +44,7 @@
 import org.opends.server.types.SearchResultEntry;
 import org.opends.server.types.SearchResultReference;
 import org.opends.server.types.operation.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -960,7 +961,7 @@
   @Override()
   public PluginResult.PostDisconnect doPostDisconnect(
           ClientConnection clientConnection, DisconnectReason disconnectReason,
-          Message message)
+          LocalizableMessage message)
   {
     postDisconnectCounter.incrementAndGet();
     return PluginResult.PostDisconnect.continueDisconnectProcessing();
@@ -1135,7 +1136,7 @@
    * {@inheritDoc}
    */
   @Override()
-  public void doShutdown(Message reason)
+  public void doShutdown(LocalizableMessage reason)
   {
     shutdownCalled = true;
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/ShortCircuitPlugin.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/ShortCircuitPlugin.java
index 1d1db7e..754b435 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/ShortCircuitPlugin.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/ShortCircuitPlugin.java
@@ -35,7 +35,7 @@
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.std.server.PluginCfg;
 import org.opends.server.api.plugin.DirectoryServerPlugin;
 import org.opends.server.api.plugin.PluginResult;
@@ -232,7 +232,7 @@
           // This is fine.
           break;
         default:
-          throw new ConfigException(Message.raw("Invalid plugin type " + t +
+          throw new ConfigException(LocalizableMessage.raw("Invalid plugin type " + t +
                                     " for the short circuit plugin."));
       }
     }
@@ -252,7 +252,7 @@
     {
       return PluginResult.PreParse.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-parse"));
+          LocalizableMessage.raw("Short-circuit in pre-parse"));
     }
     else
     {
@@ -273,7 +273,7 @@
     {
       return PluginResult.PreParse.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-parse"));
+          LocalizableMessage.raw("Short-circuit in pre-parse"));
     }
     else
     {
@@ -294,7 +294,7 @@
     {
       return PluginResult.PreParse.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-parse"));
+          LocalizableMessage.raw("Short-circuit in pre-parse"));
     }
     else
     {
@@ -316,7 +316,7 @@
     {
       return PluginResult.PreParse.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-parse"));
+          LocalizableMessage.raw("Short-circuit in pre-parse"));
     }
     else
     {
@@ -338,7 +338,7 @@
     {
       return PluginResult.PreParse.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-parse"));
+          LocalizableMessage.raw("Short-circuit in pre-parse"));
     }
     else
     {
@@ -360,7 +360,7 @@
     {
       return PluginResult.PreParse.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-parse"));
+          LocalizableMessage.raw("Short-circuit in pre-parse"));
     }
     else
     {
@@ -382,7 +382,7 @@
     {
       return PluginResult.PreParse.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-parse"));
+          LocalizableMessage.raw("Short-circuit in pre-parse"));
     }
     else
     {
@@ -404,7 +404,7 @@
     {
       return PluginResult.PreParse.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-parse"));
+          LocalizableMessage.raw("Short-circuit in pre-parse"));
     }
     else
     {
@@ -426,7 +426,7 @@
     {
       return PluginResult.PreParse.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-parse"));
+          LocalizableMessage.raw("Short-circuit in pre-parse"));
     }
     else
     {
@@ -448,7 +448,7 @@
     {
       return PluginResult.PreParse.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-parse"));
+          LocalizableMessage.raw("Short-circuit in pre-parse"));
     }
     else
     {
@@ -470,7 +470,7 @@
     {
       return PluginResult.PreOperation.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-operation"));
+          LocalizableMessage.raw("Short-circuit in pre-operation"));
     }
     else
     {
@@ -492,7 +492,7 @@
     {
       return PluginResult.PreOperation.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-operation"));
+          LocalizableMessage.raw("Short-circuit in pre-operation"));
     }
     else
     {
@@ -514,7 +514,7 @@
     {
       return PluginResult.PreOperation.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-operation"));
+          LocalizableMessage.raw("Short-circuit in pre-operation"));
     }
     else
     {
@@ -536,7 +536,7 @@
     {
       return PluginResult.PreOperation.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-operation"));
+          LocalizableMessage.raw("Short-circuit in pre-operation"));
     }
     else
     {
@@ -558,7 +558,7 @@
     {
       return PluginResult.PreOperation.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-operation"));
+          LocalizableMessage.raw("Short-circuit in pre-operation"));
     }
     else
     {
@@ -580,7 +580,7 @@
     {
       return PluginResult.PreOperation.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-operation"));
+          LocalizableMessage.raw("Short-circuit in pre-operation"));
     }
     else
     {
@@ -602,7 +602,7 @@
     {
       return PluginResult.PreOperation.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-operation"));
+          LocalizableMessage.raw("Short-circuit in pre-operation"));
     }
     else
     {
@@ -624,7 +624,7 @@
     {
       return PluginResult.PreOperation.stopProcessing(
           ResultCode.valueOf(resultCode),
-          Message.raw("Short-circuit in pre-operation"));
+          LocalizableMessage.raw("Short-circuit in pre-operation"));
     }
     else
     {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/UpdatePreOpPlugin.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/UpdatePreOpPlugin.java
index 2822703..c6ece76 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/UpdatePreOpPlugin.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/plugins/UpdatePreOpPlugin.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.plugins;
 
@@ -42,7 +43,7 @@
 import org.opends.server.types.ObjectClass;
 import org.opends.server.types.operation.PreOperationAddOperation;
 import org.opends.server.types.operation.PreOperationModifyOperation;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -112,7 +113,7 @@
           // This is fine.
           break;
         default:
-          throw new ConfigException(Message.raw("Invalid plugin type " + t +
+          throw new ConfigException(LocalizableMessage.raw("Invalid plugin type " + t +
                                     " for update pre-op plugin."));
       }
     }
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 cd1d59f..01a4d95 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
@@ -38,7 +38,7 @@
 import java.util.LinkedHashSet;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.AddOperation;
 import org.opends.server.core.BindOperation;
 import org.opends.server.core.CompareOperation;
@@ -991,7 +991,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     conn.disconnect(DisconnectReason.OTHER, false,
-            Message.raw("testDisconnect"));
+            LocalizableMessage.raw("testDisconnect"));
   }
 
 
@@ -1021,7 +1021,7 @@
          InternalClientConnection.getRootConnection();
     CancelResult cancelResult =
          conn.cancelOperation(1,
-              new CancelRequest(true, Message.raw("testCancelOperation")));
+              new CancelRequest(true, LocalizableMessage.raw("testCancelOperation")));
     assertEquals(cancelResult.getResultCode(), ResultCode.CANNOT_CANCEL);
   }
 
@@ -1036,7 +1036,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     conn.cancelAllOperations(new CancelRequest(true,
-            Message.raw("testCancelOperation")));
+            LocalizableMessage.raw("testCancelOperation")));
   }
 
 
@@ -1050,7 +1050,7 @@
     InternalClientConnection conn =
          InternalClientConnection.getRootConnection();
     conn.cancelAllOperationsExcept(
-            new CancelRequest(true, Message.raw("testCancelOperation")), 1);
+            new CancelRequest(true, LocalizableMessage.raw("testCancelOperation")), 1);
   }
 
 
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 bec0f7d..18d8ba8 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
@@ -45,7 +45,7 @@
 import javax.management.ObjectName;
 import javax.net.ssl.TrustManagerFactory;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.server.AdminTestCaseUtils;
 import org.opends.server.admin.std.meta.JMXConnectionHandlerCfgDefn;
@@ -481,7 +481,7 @@
    * @throws Exception
    */
   private void configureJmx(Entry entry) throws Exception {
-    ArrayList<Message> reasons = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> reasons = new ArrayList<LocalizableMessage>();
 
     // Get the Jmx connection handler from the core server
     JmxConnectionHandler jmxConnectionHandler = getJmxConnectionHandler();
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 2968a9f..da40f35 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
@@ -43,7 +43,7 @@
 import java.util.UUID;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskBackend;
 import org.opends.server.backends.task.TaskState;
@@ -408,7 +408,7 @@
     }
     catch (SecurityException e)
     {
-      Message message = ERR_JMX_INSUFFICIENT_PRIVILEGES.get();
+      LocalizableMessage message = ERR_JMX_INSUFFICIENT_PRIVILEGES.get();
       assertEquals(message.toString(), e.getMessage());
     }
 
@@ -458,7 +458,7 @@
     }
     catch (SecurityException e)
     {
-      Message message = ERR_JMX_INSUFFICIENT_PRIVILEGES.get();
+      LocalizableMessage message = ERR_JMX_INSUFFICIENT_PRIVILEGES.get();
       assertEquals(message.toString(), e.getMessage());
     }
   }
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 a41e03b..79ba5be 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
@@ -32,7 +32,7 @@
 import org.forgerock.opendj.ldap.ByteStringBuilder;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.DirectoryServerTestCase;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -64,7 +64,7 @@
   /**
    * The error message to use for add result operations.
    */
-  private static final Message resultMsg = Message.raw("Test Successful");
+  private static final LocalizableMessage resultMsg = LocalizableMessage.raw("Test Successful");
 
   /**
    * The DN to use for add result operations
@@ -120,8 +120,6 @@
   public void testConstructors() throws Exception
   {
     AddResponseProtocolOp addResponse;
-    ArrayList<LDAPAttribute> attributes;
-
     //Test to make sure the constructor with result code param works.
     addResponse = new AddResponseProtocolOp(resultCode);
     assertEquals(addResponse.getResultCode(), resultCode);
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 15f28b1..726363f 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
@@ -30,7 +30,7 @@
 
 import java.util.List;
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import static org.opends.server.protocols.ldap.LDAPConstants.*;
 import org.opends.server.protocols.asn1.ASN1Writer;
 import org.opends.server.protocols.asn1.ASN1;
@@ -44,8 +44,8 @@
 
 public class TestBindResponseProtocolOp  extends LdapTestCase {
 
-    private static Message message = Message.raw("This is a message");
-    private static Message message2 = Message.raw("This is a second message");
+    private static LocalizableMessage message = LocalizableMessage.raw("This is a message");
+    private static LocalizableMessage message2 = LocalizableMessage.raw("This is a second message");
     ResultCode        okCode          = ResultCode.SUCCESS;
     ResultCode  busyCode = ResultCode.BUSY;
     ResultCode invalidSyntaxCode = ResultCode.INVALID_ATTRIBUTE_SYNTAX;
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 a00f16a..3ee408e 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
@@ -31,7 +31,7 @@
 import org.opends.server.types.*;
 import org.forgerock.opendj.ldap.ByteStringBuilder;
 import static org.opends.server.util.ServerConstants.EOL;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 import static org.testng.Assert.assertEquals;
@@ -66,7 +66,7 @@
   /**
    * The error message to use for compare result operations.
    */
-  private static final Message resultMsg = Message.raw("Test Successful");
+  private static final LocalizableMessage resultMsg = LocalizableMessage.raw("Test Successful");
 
 /**
    * The DN to use for compare result operations
@@ -402,7 +402,7 @@
     key.append(EOL);
 
     key.append(indentBuf);
-    key.append("  Error Message:  ");
+    key.append("  Error LocalizableMessage:  ");
     key.append(resultMsg);
     key.append(EOL);
 
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 e22b813..4584d89 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
@@ -33,7 +33,7 @@
 import org.forgerock.opendj.ldap.ByteStringBuilder;
 import org.opends.server.core.DirectoryServer;
 import static org.opends.server.util.ServerConstants.EOL;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -62,7 +62,7 @@
   /**
    * The error message to use for delete result operations.
    */
-  private static final Message resultMsg = Message.raw("Test Successful");
+  private static final LocalizableMessage resultMsg = LocalizableMessage.raw("Test Successful");
 
 /**
    * The DN to use for delete result operations
@@ -398,7 +398,7 @@
     key.append(EOL);
 
     key.append(indentBuf);
-    key.append("  Error Message:  ");
+    key.append("  Error LocalizableMessage:  ");
     key.append(resultMsg);
     key.append(EOL);
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPConnectionHandler.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPConnectionHandler.java
index 2957fd7..88c55ce 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPConnectionHandler.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPConnectionHandler.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.protocols.ldap;
 
@@ -34,7 +34,7 @@
 import java.util.List;
 import java.util.Map;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.std.server.LDAPConnectionHandlerCfg;
 import org.opends.server.api.ClientConnection;
@@ -52,7 +52,7 @@
 @SuppressWarnings("javadoc")
 public class TestLDAPConnectionHandler extends LdapTestCase {
 
-  private static Message reasonMsg= Message.raw("Don't need a reason.");
+  private static LocalizableMessage reasonMsg= LocalizableMessage.raw("Don't need a reason.");
 
   /**
    * Once-only initialization.
@@ -314,7 +314,7 @@
     GoodHandlerEntry.addAttribute(a13, null);
     GoodHandlerEntry.addAttribute(a14, null);
     GoodHandlerEntry.addAttribute(a15, null);
-    List<Message> reasons = new LinkedList<Message>();
+    List<LocalizableMessage> reasons = new LinkedList<LocalizableMessage>();
     LDAPConnectionHandlerCfg config = LdapTestCase.getConfiguration(GoodHandlerEntry);
     //see if we're ok
     boolean ret=LDAPConnHandler.isConfigurationChangeAcceptable(config, reasons);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPException.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPException.java
index bd39f88..1e5b5f9 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPException.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/ldap/TestLDAPException.java
@@ -22,34 +22,46 @@
  *
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.protocols.ldap;
 
 import org.testng.annotations.Test;
+
 import static org.opends.messages.ProtocolMessages.ERR_ECN_INVALID_ELEMENT_TYPE;
 import static org.opends.messages.ProtocolMessages.ERR_ECN_CANNOT_DECODE_VALUE;
-import org.opends.messages.MessageDescriptor;
-import static org.testng.Assert.*;
-import org.opends.server.types.LDAPException;
 
-public class TestLDAPException extends LdapTestCase {
+import org.forgerock.i18n.LocalizableMessageDescriptor;
+
+import static org.testng.Assert.*;
+
+import org.opends.server.types.LDAPException;
+import org.opends.server.util.StaticUtils;
+
+@SuppressWarnings("javadoc")
+public class TestLDAPException extends LdapTestCase
+{
 
   @Test()
-  public void testLDAPException() {
-    MessageDescriptor.Arg1<CharSequence> msgDesc = ERR_ECN_INVALID_ELEMENT_TYPE;
-    LDAPException ex=new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgDesc.get(""));
+  public void testLDAPException()
+  {
+    LocalizableMessageDescriptor.Arg1 msgDesc = ERR_ECN_INVALID_ELEMENT_TYPE;
+    LDAPException ex =
+        new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgDesc.get(""));
     assertTrue(ex.getResultCode() == LDAPResultCode.PROTOCOL_ERROR);
-    assertTrue(ex.getMessageObject().getDescriptor() == msgDesc);
+    assertTrue(StaticUtils.hasDescriptor(ex.getMessageObject(), msgDesc));
   }
 
   @Test()
-  public void testLDAPExceptionThrowable() {
-    MessageDescriptor.Arg1<CharSequence>    msgID   = ERR_ECN_INVALID_ELEMENT_TYPE;
-    LDAPException ex=new LDAPException(LDAPResultCode.OTHER, msgID.get(""));
-    MessageDescriptor.Arg1<CharSequence>    msgID1  = ERR_ECN_CANNOT_DECODE_VALUE;
+  public void testLDAPExceptionThrowable()
+  {
+    LocalizableMessageDescriptor.Arg1 msgID = ERR_ECN_INVALID_ELEMENT_TYPE;
+    LDAPException ex = new LDAPException(LDAPResultCode.OTHER, msgID.get(""));
+    LocalizableMessageDescriptor.Arg1<CharSequence> msgID1 =
+        ERR_ECN_CANNOT_DECODE_VALUE;
     new LDAPException(LDAPResultCode.PROTOCOL_ERROR, msgID1.get(""), ex);
     assertTrue(ex.getResultCode() == LDAPResultCode.OTHER);
-    assertTrue(ex.getMessageObject().getDescriptor() == msgID);
+    assertTrue(StaticUtils.hasDescriptor(ex.getMessageObject(), msgID));
   }
 }
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 3f79922..c7dd4b9 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
@@ -32,7 +32,7 @@
 import org.opends.server.protocols.asn1.*;
 import static org.opends.server.util.ServerConstants.EOL;
 import org.opends.server.DirectoryServerTestCase;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 import static org.testng.Assert.assertEquals;
@@ -66,7 +66,7 @@
   /**
    * The error message to use for compare result operations.
    */
-  private static final Message resultMsg = Message.raw("Test Successful");
+  private static final LocalizableMessage resultMsg = LocalizableMessage.raw("Test Successful");
 
 /**
    * The DN to use for compare result operations
@@ -402,7 +402,7 @@
     key.append(EOL);
 
     key.append(indentBuf);
-    key.append("  Error Message:  ");
+    key.append("  Error LocalizableMessage:  ");
     key.append(resultMsg);
     key.append(EOL);
 
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 ec9ca2d..6c4e266 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
@@ -31,7 +31,7 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.protocols.asn1.*;
 import static org.opends.server.util.ServerConstants.EOL;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 import static org.testng.Assert.assertEquals;
@@ -66,7 +66,7 @@
   /**
    * The error message to use for add result operations.
    */
-  private static final Message resultMsg = Message.raw("Test Successful");
+  private static final LocalizableMessage resultMsg = LocalizableMessage.raw("Test Successful");
 
 /**
    * The DN to use for add result operations
@@ -402,7 +402,7 @@
     key.append(EOL);
 
     key.append(indentBuf);
-    key.append("  Error Message:  ");
+    key.append("  Error LocalizableMessage:  ");
     key.append(resultMsg);
     key.append(EOL);
 
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 89183f2..877ee57 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
@@ -32,7 +32,7 @@
 
 import org.assertj.core.api.Assertions;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.backends.MemoryBackend;
@@ -141,7 +141,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, "** TEST **" + s));
+    logError(LocalizableMessage.raw("** TEST **" + s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST **" + s);
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 a23ff96..3c46b46 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
@@ -30,7 +30,7 @@
 
 import org.assertj.core.api.Assertions;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.backends.task.TaskState;
@@ -117,8 +117,7 @@
 
   private void log(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE,
-        "InitOnLineTests/" + s));
+    logError(LocalizableMessage.raw("InitOnLineTests/" + s));
     if (debugEnabled())
     {
       TRACER.debugInfo(s);
@@ -1287,7 +1286,7 @@
 
       // Now tests error in the middle of an import
       // S2 sends init request
-      ErrorMsg msg = new ErrorMsg(server1ID, 1, Message.EMPTY);
+      ErrorMsg msg = new ErrorMsg(server1ID, 1, LocalizableMessage.EMPTY);
       server2.publish(msg);
 
       waitTaskState(taskInit, STOPPED_BY_ERROR, 20000, null);
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 82049cc..d7692ba 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
@@ -32,7 +32,7 @@
 
 import org.assertj.core.api.Assertions;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.AddOperation;
@@ -88,9 +88,7 @@
   @Test(enabled=true, groups="slow")
   public void saturateQueueAndRestart() throws Exception
   {
-    logError(Message.raw(
-        Category.SYNC, Severity.INFORMATION,
-        "Starting Replication ProtocolWindowTest : saturateAndRestart"));
+    logError(LocalizableMessage.raw("Starting Replication ProtocolWindowTest : saturateAndRestart"));
 
     // suffix synchronized
     String testName = "protocolWindowTest";
@@ -183,13 +181,11 @@
         if (op.getResultCode() != ResultCode.SUCCESS
             && op.getResultCode() != ResultCode.NO_SUCH_OBJECT)
         {
-          logError(Message.raw(Category.SYNC, Severity.NOTICE,
-          "saturateQueueAndRestart: error cleaning config entry: " + dn));
+          logError(LocalizableMessage.raw("saturateQueueAndRestart: error cleaning config entry: " + dn));
         }
       } catch (NoSuchElementException e)
       {
-        logError(Message.raw(Category.SYNC, Severity.NOTICE,
-          "saturateQueueAndRestart: error cleaning config entry: " + dn));
+        logError(LocalizableMessage.raw("saturateQueueAndRestart: error cleaning config entry: " + dn));
       }
       clearChangelogDB(replicationServer);
     }
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 e9c4528..98fbc1b 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
@@ -30,7 +30,7 @@
 import java.util.UUID;
 
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.AddOperation;
@@ -57,7 +57,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo(s);
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 a899433..2f2cdb6 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
@@ -31,7 +31,7 @@
 
 import org.assertj.core.api.Assertions;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.DirectoryServerTestCase;
 import org.opends.server.TestCaseUtils;
@@ -283,7 +283,7 @@
    */
   protected void cleanConfigEntries() throws Exception
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, "ReplicationTestCase/Cleaning config entries"));
+    logError(LocalizableMessage.raw("ReplicationTestCase/Cleaning config entries"));
 
     for (DN dn : configEntriesToCleanup)
     {
@@ -300,7 +300,7 @@
    */
   protected void cleanRealEntries() throws Exception
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, "ReplicationTestCase/Cleaning entries"));
+    logError(LocalizableMessage.raw("ReplicationTestCase/Cleaning entries"));
 
     for (DN dn : entriesToCleanup)
     {
@@ -317,8 +317,7 @@
   @AfterClass
   public void classCleanUp() throws Exception
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE,
-      " ##### Calling ReplicationTestCase.classCleanUp ##### "));
+    logError(LocalizableMessage.raw(" ##### Calling ReplicationTestCase.classCleanUp ##### "));
 
     removeReplicationServerDB();
 
@@ -345,8 +344,7 @@
    */
   protected void paranoiaCheck() throws Exception
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE,
-      "Performing paranoia check"));
+    logError(LocalizableMessage.raw("Performing paranoia check"));
 
     // Check for config entries for replication server
     assertNoConfigEntriesWithFilter("(objectclass=ds-cfg-replication-server)",
@@ -701,7 +699,7 @@
    * result code is not SUCCESS
    */
   protected void addTask(Entry taskEntry, ResultCode expectedResult,
-      Message errorMessage) throws Exception
+      LocalizableMessage errorMessage) throws Exception
   {
     TRACER.debugInfo("AddTask/" + taskEntry);
 
@@ -718,7 +716,7 @@
       Assertions.assertThat(addOperation.getErrorMessage().toString())
           .startsWith(errorMessage.toString());
       TRACER.debugInfo("Create config task: <"
-          + errorMessage.getDescriptor().getId()
+          + errorMessage.resourceName() + "-" + errorMessage.ordinal()
           + addOperation.getErrorMessage() + ">");
     }
     else
@@ -733,7 +731,7 @@
   }
 
   protected void waitTaskState(Entry taskEntry, TaskState expectedTaskState,
-      long maxWaitTimeInMillis, Message expectedMessage) throws Exception
+      long maxWaitTimeInMillis, LocalizableMessage expectedMessage) throws Exception
   {
     long startTime = System.currentTimeMillis();
 
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 52e42d5..a76f477 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
@@ -33,7 +33,7 @@
 
 import org.assertj.core.api.Assertions;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.std.server.SynchronizationProviderCfg;
@@ -110,8 +110,7 @@
   @Test()
   public void pushSchemaChange() throws Exception
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE,
-        "Starting replication test : pushSchemaChange "));
+    logError(LocalizableMessage.raw("Starting replication test : pushSchemaChange "));
 
     cleanUpReplicationServersDB();
 
@@ -178,8 +177,7 @@
   @Test(enabled=true,dependsOnMethods = { "pushSchemaChange" })
   public void replaySchemaChange() throws Exception
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE,
-        "Starting replication test : replaySchemaChange "));
+    logError(LocalizableMessage.raw("Starting replication test : replaySchemaChange "));
 
     cleanUpReplicationServersDB();
 
@@ -215,8 +213,7 @@
   @Test(enabled=true, dependsOnMethods = { "replaySchemaChange" })
   public void pushSchemaFilesChange() throws Exception
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE,
-        "Starting replication test : pushSchemaFilesChange "));
+    logError(LocalizableMessage.raw("Starting replication test : pushSchemaFilesChange "));
 
     cleanUpReplicationServersDB();
 
@@ -297,7 +294,6 @@
     {
       broker.stop();
     }
-    logError(Message.raw(Category.SYNC, Severity.NOTICE,
-    "Ending replication test : pushSchemaFilesChange "));
+    logError(LocalizableMessage.raw("Ending replication test : pushSchemaFilesChange "));
   }
 }
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 f4efb40..8d366eb 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
@@ -31,7 +31,7 @@
 
 import org.assertj.core.api.Assertions;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.std.server.MonitorProviderCfg;
@@ -78,8 +78,7 @@
   @Test(enabled=false, groups="slow")
   public void fromServertoBroker() throws Exception
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE,
-        "Starting replication StressTest : fromServertoBroker"));
+    logError(LocalizableMessage.raw("Starting replication StressTest : fromServertoBroker"));
 
     final DN baseDN = DN.valueOf("ou=People," + TEST_ROOT_DN_STRING);
     final int TOTAL_MESSAGES = 1000;
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 32b8441..e18f859 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
@@ -33,7 +33,7 @@
 
 import org.assertj.core.api.Assertions;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.AddOperation;
@@ -268,8 +268,7 @@
   public void toggleReceiveStatus() throws Exception
   {
     testSetUp("toggleReceiveStatus");
-    logError(Message.raw(Category.SYNC, Severity.INFORMATION,
-        "Starting synchronization test : toggleReceiveStatus"));
+    logError(LocalizableMessage.raw("Starting synchronization test : toggleReceiveStatus"));
 
     /*
      * Open a session to the replicationServer using the broker API.
@@ -330,8 +329,7 @@
   public void lostHeartbeatFailover() throws Exception
   {
     testSetUp("lostHeartbeatFailover");
-    logError(Message.raw(Category.SYNC, Severity.INFORMATION,
-        "Starting replication test : lostHeartbeatFailover"));
+    logError(LocalizableMessage.raw("Starting replication test : lostHeartbeatFailover"));
 
     /*
      * Open a session to the replicationServer using the broker API.
@@ -540,8 +538,7 @@
   public void namingConflicts() throws Exception
   {
     testSetUp("namingConflicts");
-    logError(Message.raw(Category.SYNC, Severity.INFORMATION,
-        "Starting replication test : namingConflicts"));
+    logError(LocalizableMessage.raw("Starting replication test : namingConflicts"));
 
     String resolvedMonitorAttr = "resolved-naming-conflicts";
     String unresolvedMonitorAttr = "unresolved-naming-conflicts";
@@ -1109,9 +1106,7 @@
   public void updateOperations(boolean assured) throws Exception
   {
     testSetUp("updateOperations");
-    logError(Message.raw(
-        Category.SYNC, Severity.INFORMATION,
-        "Starting replication test : updateOperations " + assured));
+    logError(LocalizableMessage.raw("Starting replication test : updateOperations " + assured));
 
     // Cleanup from previous run
     cleanupTest();
@@ -1269,8 +1264,7 @@
   public void deleteNoSuchObject() throws Exception
   {
     testSetUp("deleteNoSuchObject");
-    logError(Message.raw(Category.SYNC, Severity.INFORMATION,
-        "Starting replication test : deleteNoSuchObject"));
+    logError(LocalizableMessage.raw("Starting replication test : deleteNoSuchObject"));
 
     DeleteOperation op = connection.processDelete("cn=No Such Object," + baseDN);
     assertEquals(op.getResultCode(), ResultCode.NO_SUCH_OBJECT);
@@ -1285,8 +1279,7 @@
   public void infiniteReplayLoop() throws Exception
   {
     testSetUp("infiniteReplayLoop");
-    logError(Message.raw(Category.SYNC, Severity.INFORMATION,
-        "Starting replication test : infiniteReplayLoop"));
+    logError(LocalizableMessage.raw("Starting replication test : infiniteReplayLoop"));
 
     int serverId = 11;
     ReplicationBroker broker =
@@ -1385,8 +1378,7 @@
   public void csnGeneratorAdjust() throws Exception
   {
     testSetUp("csnGeneratorAdjust");
-    logError(Message.raw(Category.SYNC, Severity.INFORMATION,
-        "Starting synchronization test : CSNGeneratorAdjust"));
+    logError(LocalizableMessage.raw("Starting synchronization test : CSNGeneratorAdjust"));
 
     /*
      * Open a session to the replicationServer using the broker API.
@@ -1457,8 +1449,7 @@
 
     if (!msgs.isEmpty())
     {
-      logError(Message.raw(Category.SYNC, Severity.SEVERE_ERROR,
-          "Leftover messages from previous test runs " + msgs));
+      logError(LocalizableMessage.raw("Leftover messages from previous test runs " + msgs));
     }
   }
 }
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 4f1a6c8..10064a5 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
@@ -36,7 +36,7 @@
 import org.assertj.core.api.Assertions;
 import org.assertj.core.data.MapEntry;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.AddOperation;
@@ -138,7 +138,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST **" + s);
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 6028476..67daa29 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
@@ -34,7 +34,7 @@
 import java.util.concurrent.LinkedBlockingQueue;
 
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.config.ConfigException;
@@ -126,7 +126,7 @@
   private static String ENTRY_DN2 = "uid=1," + TEST2_ORG_DN_STRING;
 
   private void debugInfo(String s) {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST **" + s);
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 16ec20f..08380dd 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
@@ -31,7 +31,7 @@
 import java.util.TreeSet;
 
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -72,7 +72,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST **" + s);
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 1e3b7ca..636eb9f 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
@@ -34,7 +34,7 @@
 
 import org.assertj.core.api.Assertions;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.std.meta.ReplicationDomainCfgDefn.AssuredType;
@@ -127,8 +127,7 @@
     final AttributeType histType =
       DirectoryServer.getAttributeType(EntryHistorical.HISTORICAL_ATTRIBUTE_NAME);
 
-    logError(Message.raw(Category.SYNC, Severity.INFORMATION,
-    "Starting replication test : changesCmpTest"));
+    logError(LocalizableMessage.raw("Starting replication test : changesCmpTest"));
 
     // Add the first test entry.
     TestCaseUtils.addEntry(
@@ -158,8 +157,7 @@
     String histValue =
       attrs1.get(0).iterator().next().getValue().toString();
 
-    logError(Message.raw(Category.SYNC, Severity.INFORMATION,
-        "First historical value:" + histValue));
+    logError(LocalizableMessage.raw("First historical value:" + histValue));
 
     // Perform a 2nd modification to update the hist attribute with
     // a second value
@@ -175,8 +173,7 @@
       Assertions.assertThat(attrs2).isNotEmpty();
 
     for (AttributeValue av : attrs2.get(0)) {
-      logError(Message.raw(Category.SYNC, Severity.INFORMATION,
-          "Second historical value:" + av.getValue()));
+      logError(LocalizableMessage.raw("Second historical value:" + av.getValue()));
     }
 
     LinkedList<ReplicationMsg> opList = new LinkedList<ReplicationMsg>();
@@ -191,7 +188,7 @@
 
     // Build a CSN from the first modification
     String hv[] = histValue.split(":");
-    logError(Message.raw(Category.SYNC, Severity.INFORMATION, hv[1]));
+    logError(LocalizableMessage.raw(hv[1]));
     CSN fromCSN = new CSN(hv[1]);
 
     opList = new LinkedList<ReplicationMsg>();
@@ -226,8 +223,7 @@
 
     try
     {
-    logError(Message.raw(Category.SYNC, Severity.INFORMATION,
-    "Starting replication test : changesCmpTest"));
+    logError(LocalizableMessage.raw("Starting replication test : changesCmpTest"));
 
     // Add 3 entries.
     DN dnTest1 = DN.valueOf("cn=test1," + baseDN);
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 4e49969..fe99ffe 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
@@ -31,7 +31,7 @@
 import java.util.TreeSet;
 
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.config.ConfigException;
@@ -71,7 +71,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo("*** TEST *** " + s);
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 a8ca9ce..e116d6a 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
@@ -30,7 +30,7 @@
 
 import org.assertj.core.api.Assertions;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.std.server.ReplicationServerCfg;
@@ -71,7 +71,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST **" + s);
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 cbe60b4..e120783 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
@@ -35,7 +35,7 @@
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.server.ConfigurationChangeListener;
@@ -91,7 +91,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST **" + s);
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 38cba02..856a857 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
@@ -31,7 +31,7 @@
 import java.util.*;
 
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.std.meta.ReplicationDomainCfgDefn.AssuredType;
@@ -145,7 +145,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST **" + s);
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 a6708fb..95ec395 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
@@ -34,7 +34,7 @@
 import java.util.List;
 import java.util.zip.DataFormatException;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.AddOperationBasis;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.core.ModifyDNOperationBasis;
@@ -1184,7 +1184,7 @@
   {
     int sender = 1;
     int dest = 2;
-    Message message = ERR_UNKNOWN_TYPE.get("toto");
+    LocalizableMessage message = ERR_UNKNOWN_TYPE.get("toto");
     Object[] set1 = new Object[] {sender, dest, message};
     return new Object [][] { set1};
   }
@@ -1194,7 +1194,7 @@
    * using protocol VLAST and V3 are working.
    */
   @Test(enabled=true, dataProvider="createErrorMsgData")
-  public void errorMsgTestVLASTV3(int sender, int dest, Message message)
+  public void errorMsgTestVLASTV3(int sender, int dest, LocalizableMessage message)
   throws Exception
   {
     // Create VLAST message
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 c281ed8..b85dfd8 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
@@ -30,7 +30,7 @@
 import java.util.zip.DataFormatException;
 
 import org.assertj.core.api.Assertions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.controls.SubtreeDeleteControl;
 import org.opends.server.core.*;
 import org.opends.server.protocols.internal.InternalClientConnection;
@@ -185,7 +185,7 @@
   }
 
   /**
-   * Create an Update Message from the data provided above.
+   * Create an Update LocalizableMessage from the data provided above.
    * The call getBytes() to test the encoding of the Msg and
    * create another ModifyMsg from the encoded byte array.
    * Finally test that both Msgs match.
@@ -1226,7 +1226,7 @@
   @Test()
   public void errorMsgTest() throws Exception
   {
-    ErrorMsg msg = new ErrorMsg(1, 2, Message.raw("details"));
+    ErrorMsg msg = new ErrorMsg(1, 2, LocalizableMessage.raw("details"));
     ErrorMsg newMsg = new ErrorMsg(msg.getBytes(getCurrentVersion()),getCurrentVersion());
     assertEquals(msg.getSenderID(), newMsg.getSenderID());
     assertEquals(msg.getDestination(), newMsg.getDestination());
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 f778fb4..7f5d762 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
@@ -35,7 +35,7 @@
 import java.util.concurrent.TimeoutException;
 
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.admin.std.meta.ReplicationDomainCfgDefn.AssuredType;
@@ -178,7 +178,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST **" + s);
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 cdf768e..89dad14 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
@@ -31,7 +31,7 @@
 import java.util.*;
 
 import org.opends.messages.Category;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.messages.Severity;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.loggers.debug.DebugTracer;
@@ -88,7 +88,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST **" + s);
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 d349a85..333386a 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
@@ -150,7 +150,7 @@
 
   private void debugInfo(String s)
   {
-    //ErrorLogger.logError(Message.raw(Category.SYNC, Severity.NOTICE, "** TEST ** " + s));
+    //ErrorLogger.logError(LocalizableMessage.raw("** TEST ** " + s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST ** " + s);
@@ -920,7 +920,7 @@
       Assertions.assertThat(repMsg).isInstanceOf(TopologyMsg.class);
 
       // Now comes the real test : check that the Replication Server
-      // answers correctly to a WindowProbeMsg Message.
+      // answers correctly to a WindowProbeMsg LocalizableMessage.
       session.publish(new WindowProbeMsg());
 
       WindowMsg windowMsg = waitForSpecificMsg(session, WindowMsg.class);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ComputeBestServerTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ComputeBestServerTest.java
index 37a3008..b4729b8 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ComputeBestServerTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/replication/service/ComputeBestServerTest.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.replication.service;
 
@@ -32,8 +32,8 @@
 import org.assertj.core.api.Assertions;
 import org.assertj.core.data.MapEntry;
 import org.opends.messages.Category;
-import org.opends.messages.Message;
-import org.opends.messages.MessageDescriptor;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageDescriptor;
 import org.opends.messages.Severity;
 import org.opends.server.loggers.debug.DebugTracer;
 import org.opends.server.replication.ReplicationTestCase;
@@ -44,6 +44,7 @@
 import org.opends.server.replication.server.ReplicationServer;
 import org.opends.server.replication.service.ReplicationBroker.RSEvaluations;
 import org.opends.server.replication.service.ReplicationBroker.ReplicationServerInfo;
+import org.opends.server.util.StaticUtils;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -80,7 +81,7 @@
 
   private void debugInfo(String s)
   {
-    logError(Message.raw(Category.SYNC, Severity.NOTICE, s));
+    logError(LocalizableMessage.raw(s));
     if (debugEnabled())
     {
       TRACER.debugInfo("** TEST **" + s);
@@ -117,7 +118,7 @@
 
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
-    containsOnly(evals.getEvaluations(), entry(11, NOTE_BEST_RS));
+    containsOnly(evals.getEvaluations(), entry(11, NOTE_BEST_RS.ordinal()));
   }
 
   private Map<Integer, ReplicationServerInfo> newRSInfos(
@@ -159,7 +160,7 @@
 
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
-    containsOnly(evals.getEvaluations(), entry(11, NOTE_BEST_RS));
+    containsOnly(evals.getEvaluations(), entry(11, NOTE_BEST_RS.ordinal()));
   }
 
   /**
@@ -182,7 +183,7 @@
 
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
-    containsOnly(evals.getEvaluations(), entry(11, NOTE_BEST_RS));
+    containsOnly(evals.getEvaluations(), entry(11, NOTE_BEST_RS.ordinal()));
   }
 
   /**
@@ -204,7 +205,7 @@
 
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
-    containsOnly(evals.getEvaluations(), entry(11, NOTE_BEST_RS));
+    containsOnly(evals.getEvaluations(), entry(11, NOTE_BEST_RS.ordinal()));
   }
 
   /**
@@ -229,8 +230,8 @@
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
     containsOnly(evals.getEvaluations(),
-        entry(11, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS),
-        entry(12, NOTE_BEST_RS));
+        entry(11, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS.ordinal()),
+        entry(12, NOTE_BEST_RS.ordinal()));
   }
 
   /**
@@ -257,53 +258,44 @@
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
     containsOnly(evals.getEvaluations(),
-        entry(11, NOTE_BEST_RS),
-        entry(12, NOTE_RS_HAS_DIFFERENT_GROUP_ID_THAN_DS));
+        entry(11, NOTE_BEST_RS.ordinal()),
+        entry(12, NOTE_RS_HAS_DIFFERENT_GROUP_ID_THAN_DS.ordinal()));
   }
 
-  private void containsOnly(final Map<Integer, Message> evaluations,
+  private void containsOnly(final Map<Integer, LocalizableMessage> evaluations,
       MapEntry... entries)
   {
     final List<MapEntry> notFound = new ArrayList<MapEntry>(Arrays.asList(entries));
     for (Iterator<MapEntry> iter = notFound.iterator(); iter.hasNext();)
     {
       final MapEntry entry = iter.next();
-      final Message reason = evaluations.get(entry.key);
-      if (reason != null && reason.getDescriptor().equals(entry.value))
+      final LocalizableMessage reason = evaluations.get(entry.key);
+      if (reason != null && reason.ordinal()==(Integer)entry.value)
       {
         iter.remove();
       }
     }
     if (!notFound.isEmpty())
     {
-      final StringBuilder sb = new StringBuilder("expecting:\n");
-      sb.append("  <").append(getDescription(evaluations)).append(">\n");
+      final StringBuilder sb = new StringBuilder("expecting ordinals:\n");
+      sb.append("  <").append(getOrdinal(evaluations)).append(">\n");
       sb.append("   to contain:\n");
-      sb.append("  <").append(getDescription(Arrays.asList(entries))).append(">\n");
+      sb.append("  <").append(Arrays.asList(entries)).append(">\n");
       sb.append("   but could not find:\n");
-      sb.append("  <").append(getDescription(notFound)).append(">");
+      sb.append("  <").append(notFound).append(">");
       throw new AssertionError(sb.toString());
     }
 
     Assertions.assertThat(evaluations).hasSize(entries.length);
   }
 
-  private Map<Integer, String> getDescription(Map<Integer, Message> evaluations)
+  /** Contains ordinal for each message */
+  private Map<Integer, Integer> getOrdinal(Map<Integer, LocalizableMessage> evaluations)
   {
-    final Map<Integer, String> result = new LinkedHashMap<Integer, String>();
-    for (Entry<Integer, Message> entry : evaluations.entrySet())
+    final Map<Integer, Integer> result = new LinkedHashMap<Integer, Integer>();
+    for (Entry<Integer, LocalizableMessage> entry : evaluations.entrySet())
     {
-      result.put(entry.getKey(), entry.getValue().getDescriptor().getKey());
-    }
-    return result;
-  }
-
-  private List<MapEntry> getDescription(List<MapEntry> entries)
-  {
-    final List<MapEntry> result = new ArrayList<MapEntry>();
-    for (MapEntry entry : entries)
-    {
-      result.add(entry(entry.key, ((MessageDescriptor) entry.value).getKey()));
+      result.put(entry.getKey(), entry.getValue().ordinal());
     }
     return result;
   }
@@ -330,8 +322,8 @@
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
     containsOnly(evals.getEvaluations(),
-        entry(11, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS),
-        entry(12, NOTE_BEST_RS));
+        entry(11, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS.ordinal()),
+        entry(12, NOTE_BEST_RS.ordinal()));
   }
 
   /**
@@ -358,9 +350,9 @@
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
     containsOnly(evals.getEvaluations(),
-        entry(11, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS),
-        entry(12, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS),
-        entry(13, NOTE_BEST_RS));
+        entry(11, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS.ordinal()),
+        entry(12, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS.ordinal()),
+        entry(13, NOTE_BEST_RS.ordinal()));
   }
 
   /**
@@ -388,9 +380,9 @@
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
     containsOnly(evals.getEvaluations(),
-        entry(11, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS),
-        entry(12, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS),
-        entry(13, NOTE_BEST_RS));
+        entry(11, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS.ordinal()),
+        entry(12, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS.ordinal()),
+        entry(13, NOTE_BEST_RS.ordinal()));
   }
 
   /**
@@ -419,9 +411,9 @@
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
     containsOnly(evals.getEvaluations(),
-        entry(11, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS),
-        entry(12, NOTE_RS_HAS_DIFFERENT_GROUP_ID_THAN_DS),
-        entry(13, NOTE_BEST_RS));
+        entry(11, NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS.ordinal()),
+        entry(12, NOTE_RS_HAS_DIFFERENT_GROUP_ID_THAN_DS.ordinal()),
+        entry(13, NOTE_BEST_RS.ordinal()));
   }
 
   /**
@@ -443,7 +435,7 @@
 
     assertEquals(evals.getBestRS().getServerURL(), WINNER,
         "Wrong best replication server.");
-    containsOnly(evals.getEvaluations(), entry(11, NOTE_BEST_RS));
+    containsOnly(evals.getEvaluations(), entry(11, NOTE_BEST_RS.ordinal()));
   }
 
   @DataProvider(name = "create3ServersData")
@@ -557,21 +549,21 @@
     final boolean winnerIsLatestRS = winnerT1 > 4 && looser1T1 == 4 && looser2T1 == 4;
     containsOnly(evals.getEvaluations(),
         entry(11, getEval1(winnerIsLocal, looser1IsLocal, winnerIsLatestRS)),
-        entry(12, NOTE_BEST_RS),
+        entry(12, NOTE_BEST_RS.ordinal()),
         entry(13, getEval1(winnerIsLocal, looser2IsLocal, winnerIsLatestRS)));
   }
 
-  private MessageDescriptor getEval1(boolean winnerIsLocal, boolean looserIsLocal, boolean winnerIsLatestRS)
+  private Integer getEval1(boolean winnerIsLocal, boolean looserIsLocal, boolean winnerIsLatestRS)
   {
     if (winnerIsLocal && !looserIsLocal)
     {
-      return NOTE_RS_ON_DIFFERENT_VM_THAN_DS;
+      return NOTE_RS_ON_DIFFERENT_VM_THAN_DS.ordinal();
     }
     else if (winnerIsLatestRS)
     {
-      return NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS;
+      return NOTE_RS_LATER_THAN_ANOTHER_RS_MORE_UP_TO_DATE_THAN_LOCAL_DS.ordinal();
     }
-    return NOTE_RS_LATER_THAN_LOCAL_DS;
+    return NOTE_RS_LATER_THAN_LOCAL_DS.ordinal();
   }
 
   @DataProvider(name = "test3ServersMoreCriteria")
@@ -646,21 +638,21 @@
         "Wrong best replication server.");
     containsOnly(evals.getEvaluations(),
         entry(11, getEval2(winnerGroupId == looser1GroupId, winnerIsLocal, looser1IsLocal)),
-        entry(12, NOTE_BEST_RS),
+        entry(12, NOTE_BEST_RS.ordinal()),
         entry(13, getEval2(winnerGroupId == looser2GroupId, winnerIsLocal, looser2IsLocal)));
   }
 
-  private MessageDescriptor getEval2(boolean sameGroupId, boolean winnerIsLocal, boolean looserIsLocal)
+  private Integer getEval2(boolean sameGroupId, boolean winnerIsLocal, boolean looserIsLocal)
   {
     if (winnerIsLocal && !looserIsLocal)
     {
-      return NOTE_RS_ON_DIFFERENT_VM_THAN_DS;
+      return NOTE_RS_ON_DIFFERENT_VM_THAN_DS.ordinal();
     }
     else if (!sameGroupId)
     {
-      return NOTE_RS_HAS_DIFFERENT_GROUP_ID_THAN_DS;
+      return NOTE_RS_HAS_DIFFERENT_GROUP_ID_THAN_DS.ordinal();
     }
-    return NOTE_RS_HAS_DIFFERENT_GENERATION_ID_THAN_DS;
+    return NOTE_RS_HAS_DIFFERENT_GENERATION_ID_THAN_DS.ordinal();
   }
 
   @SuppressWarnings("unchecked")
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java
index d0e9c81..30e0e60 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeSyntaxTest.java
@@ -30,7 +30,7 @@
 
 import org.opends.server.api.AttributeSyntax;
 import org.forgerock.opendj.ldap.ByteString;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -64,7 +64,7 @@
     // Make sure that the specified class can be instantiated as a task.
     AttributeSyntax syntax = getRule();
 
-    MessageBuilder reason = new MessageBuilder();
+    LocalizableMessageBuilder reason = new LocalizableMessageBuilder();
     // test the valueIsAcceptable method
     Boolean liveResult =
       syntax.valueIsAcceptable(ByteString.valueOf(value), reason);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
index 8183266..b9e6db3 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/AttributeTypeSyntaxTest.java
@@ -33,7 +33,7 @@
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.AttributeType;
 import org.forgerock.opendj.ldap.ByteString;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import java.util.ArrayList;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.protocols.internal.InternalClientConnection;
@@ -168,7 +168,7 @@
       "( testxapproxtype-oid NAME 'testXApproxType' " +
            "SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 " +
            "X-APPROX 'equalLengthApproximateMatch' )");
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(attrTypeSyntax.valueIsAcceptable(definition, invalidReason),
             invalidReason.toString());
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/BinaryAttributeSyntaxTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/BinaryAttributeSyntaxTest.java
index eb32b2b..8af3d15 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/BinaryAttributeSyntaxTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/BinaryAttributeSyntaxTest.java
@@ -30,7 +30,7 @@
 
 import org.opends.server.api.AttributeSyntax;
 import org.forgerock.opendj.ldap.ByteString;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -64,7 +64,7 @@
     // Make sure that the specified class can be instantiated as a task.
     AttributeSyntax syntax = getRule();
 
-    MessageBuilder reason = new MessageBuilder();
+    LocalizableMessageBuilder reason = new LocalizableMessageBuilder();
     // test the valueIsAcceptable method
     Boolean liveResult =
       syntax.valueIsAcceptable(value, reason);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java
index da10765..6652c0f 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/BitStringSyntaxTest.java
@@ -30,7 +30,7 @@
 
 import org.opends.server.api.AttributeSyntax;
 import org.forgerock.opendj.ldap.ByteString;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
@@ -78,7 +78,7 @@
 
     ByteString byteStringValue = ByteString.valueOf(value);
 
-    MessageBuilder reason = new MessageBuilder();
+    LocalizableMessageBuilder reason = new LocalizableMessageBuilder();
     Boolean liveResult =
       syntax.valueIsAcceptable(byteStringValue, reason);
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java
index 75f3c12..74f75e2 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/schema/ConfigurableAttributeSyntaxTest.java
@@ -32,8 +32,8 @@
 import java.util.ArrayList;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.admin.server.AdminTestCaseUtils;
 import org.opends.server.admin.std.meta.TelephoneNumberAttributeSyntaxCfgDefn;
 import org.opends.server.admin.std.server.TelephoneNumberAttributeSyntaxCfg;
@@ -118,7 +118,7 @@
          (TelephoneNumberSyntax) DirectoryServer.getAttributeSyntax(oid, false);
 
     // apply the configuration.
-    ArrayList<Message> unacceptableReasons = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> unacceptableReasons = new ArrayList<LocalizableMessage>();
     assertTrue(syntax.isConfigurationChangeAcceptable(configuration,
                                                       unacceptableReasons));
     ConfigChangeResult configResult =
@@ -127,7 +127,7 @@
 
     // check the syntax of the given value.
     Boolean liveResult = syntax.valueIsAcceptable(
-        ByteString.valueOf(value), new MessageBuilder());
+        ByteString.valueOf(value), new LocalizableMessageBuilder());
     assertEquals(result, liveResult);
 
     // call the getters to increase code coverage...
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPSyncManagerV2AccessTest.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPSyncManagerV2AccessTest.java
index de329b6..fd59011 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPSyncManagerV2AccessTest.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPSyncManagerV2AccessTest.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.snmp;
 
@@ -36,7 +37,7 @@
 import java.net.InetAddress;
 import java.util.ArrayList;
 import java.util.Map.Entry;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.admin.AbstractManagedObjectDefinition;
 import org.opends.server.admin.server.AdminTestCaseUtils;
 import org.opends.server.admin.std.meta.SNMPConnectionHandlerCfgDefn;
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 c377c55..46ea8d0 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
@@ -34,7 +34,7 @@
 import org.testng.annotations.BeforeClass;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
 import org.opends.server.extensions.GetConnectionIDExtendedOperation;
@@ -112,7 +112,7 @@
 
     // Invoke the disconnect client task.
     String taskID = "Disconnect Client " + connectionID;
-    Message disconnectMessage = Message.raw("testDisconnectWithNotification");
+    LocalizableMessage disconnectMessage = LocalizableMessage.raw("testDisconnectWithNotification");
     DN taskDN = DN.valueOf("ds-task-id=" + taskID +
                           ",cn=Scheduled Tasks,cn=Tasks");
     TestCaseUtils.addEntry(
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java
index 98ed96f..322f64c 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/DummyTask.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.tasks;
 
@@ -29,7 +30,7 @@
 
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.backends.task.Task;
 import org.opends.server.backends.task.TaskState;
 import org.opends.server.types.Attribute;
@@ -57,8 +58,8 @@
    * {@inheritDoc}
    */
   @Override
-  public Message getDisplayName() {
-    return Message.raw("Dummy");
+  public LocalizableMessage getDisplayName() {
+    return LocalizableMessage.raw("Dummy");
   }
 
   /**
@@ -133,7 +134,7 @@
    * {@inheritDoc}
    */
   @Override
-  public void interruptTask(TaskState taskState, Message interruptMessage)
+  public void interruptTask(TaskState taskState, LocalizableMessage interruptMessage)
   {
     interruptedState = taskState;
     setTaskInterruptState(taskState);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/LdifFileWriter.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/LdifFileWriter.java
index 2ab3289..52c2b51 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/LdifFileWriter.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tasks/LdifFileWriter.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2006-2009 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 
 package org.opends.server.tasks;
@@ -35,7 +36,7 @@
 import org.opends.server.types.ExistingFileBehavior;
 import org.opends.server.util.LDIFWriter;
 import org.opends.server.util.LDIFException;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import java.io.IOException;
 import java.util.Random;
@@ -79,7 +80,7 @@
        throws IOException, InitializationException, MakeLDIFException
   {
     TemplateFile template = new TemplateFile(resourcePath, new Random(1));
-    ArrayList<Message> warnings = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> warnings = new ArrayList<LocalizableMessage>();
     template.parse(templatePath, warnings);
     makeLdif(ldifPath, template);
   }
@@ -103,7 +104,7 @@
        throws IOException, InitializationException, MakeLDIFException
   {
     TemplateFile template = new TemplateFile(resourcePath, new Random(1));
-    ArrayList<Message> warnings = new ArrayList<Message>();
+    ArrayList<LocalizableMessage> warnings = new ArrayList<LocalizableMessage>();
     template.parse(templateLines, warnings);
     makeLdif(ldifPath, template);
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPAuthenticationHandlerTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPAuthenticationHandlerTestCase.java
index e7308134..c42449a 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPAuthenticationHandlerTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/LDAPAuthenticationHandlerTestCase.java
@@ -42,7 +42,7 @@
 import org.testng.annotations.Test;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.api.SASLMechanismHandler;
 import org.opends.server.controls.PasswordPolicyRequestControl;
 import org.opends.server.core.AddOperation;
@@ -136,7 +136,7 @@
   @Test(dataProvider = "saslMechanisms")
   public void testGetSASLProperties(String saslMechanismName)
   {
-    LinkedHashMap<String, Message> properties =
+    LinkedHashMap<String, LocalizableMessage> properties =
          LDAPAuthenticationHandler.getSASLProperties(saslMechanismName);
 
     assertNotNull(properties);
@@ -151,7 +151,7 @@
   @Test()
   public void testGetSASLPropertiesInvlaid()
   {
-    LinkedHashMap<String,Message> properties =
+    LinkedHashMap<String,LocalizableMessage> properties =
          LDAPAuthenticationHandler.getSASLProperties("unsupportedMechanism");
 
     assertNull(properties);
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/UpgradeTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/UpgradeTestCase.java
index 6bcb047..9bd75e7 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/UpgradeTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/UpgradeTestCase.java
@@ -21,7 +21,7 @@
  * CDDL HEADER END
  *
  *
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.tools;
 
@@ -32,7 +32,7 @@
 import java.util.List;
 
 import org.assertj.core.api.Assertions;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.tools.upgrade.UpgradeCli;
@@ -90,7 +90,7 @@
    * @param expectedMessage
    *          The expected message.
    */
-  private void assertContainsMessage(String output, Message expectedMessage)
+  private void assertContainsMessage(String output, LocalizableMessage expectedMessage)
   {
     String out = output.replaceAll("\n", " ").replaceAll("%s", " ");
     String expected = expectedMessage.toString().replaceAll("\n", " ").replaceAll("%s", " ");
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/makeldif/MakeLDIFTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/makeldif/MakeLDIFTestCase.java
index c0d54ff..f64107c 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/makeldif/MakeLDIFTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/tools/makeldif/MakeLDIFTestCase.java
@@ -22,7 +22,7 @@
  *
  *      Copyright 2006-2008 Sun Microsystems, Inc.
  *      Portions Copyright 2006 Brighton Consulting, Inc.
- *      Portions Copyright 2013 ForgeRock AS.
+ *      Portions Copyright 2013-2014 ForgeRock AS.
  */
 package org.opends.server.tools.makeldif;
 
@@ -31,7 +31,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.tasks.LdifFileWriter;
@@ -87,7 +87,7 @@
     // Previous behaviour showed "missingVar" on line 5.
 
     TemplateFile templateFile = new TemplateFile(resourcePath);
-    List<Message> warns = new ArrayList<Message>();
+    List<LocalizableMessage> warns = new ArrayList<LocalizableMessage>();
 
     try
     {
@@ -96,7 +96,7 @@
     catch (InitializationException e)
     {
       String msg = e.getMessage();
-      Message msg_locale = ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get("missingVar",1);
+      LocalizableMessage msg_locale = ERR_MAKELDIF_TAG_UNDEFINED_ATTRIBUTE.get("missingVar",1);
       assertTrue (msg.equals(msg_locale.toString()), msg);
     }
   }
@@ -160,7 +160,7 @@
       throws Exception
   {
     TemplateFile templateFile = new TemplateFile(resourcePath);
-    List<Message> warns = new ArrayList<Message>();
+    List<LocalizableMessage> warns = new ArrayList<LocalizableMessage>();
     templateFile.parse(lines, warns);
     assertTrue(warns.isEmpty(),"Warnings in parsing test template " + testName );
   }
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 ebc1ec3..3b1cfea 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
@@ -32,7 +32,7 @@
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.testng.Assert.*;
 
@@ -74,10 +74,10 @@
   @Test(dataProvider = "resultCodes")
   public void testConstructor1(ResultCode resultCode)
   {
-    Message msg = Message.raw("Test Constructor 1");
+    LocalizableMessage msg = LocalizableMessage.raw("Test Constructor 1");
 
     validateException(new DirectoryException(resultCode, msg));
-    validateException(new DirectoryException(resultCode, (Message)null));
+    validateException(new DirectoryException(resultCode, (LocalizableMessage)null));
   }
 
 
@@ -91,7 +91,7 @@
   @Test(dataProvider = "resultCodes")
   public void testConstructor2(ResultCode resultCode)
   {
-    Message   msg = Message.raw("Test Constructor 2");
+    LocalizableMessage   msg = LocalizableMessage.raw("Test Constructor 2");
     Exception e   = new Exception("Test Constructor 2 Exception");
 
     validateException(new DirectoryException(resultCode, msg, e));
@@ -112,7 +112,7 @@
   public void testConstructor3(ResultCode resultCode)
          throws Exception
   {
-    Message   msg = Message.raw("Test Constructor 3");
+    LocalizableMessage   msg = LocalizableMessage.raw("Test Constructor 3");
     DN        dn  = DN.valueOf("cn=Test Constructor 3,dc=example,dc=com");
     Exception e   = new Exception("Test Constructor 3 Exception");
 
@@ -143,7 +143,7 @@
   public void testConstructor4(ResultCode resultCode)
          throws Exception
   {
-    Message   msg     = Message.raw("Test Constructor 4");
+    LocalizableMessage   msg     = LocalizableMessage.raw("Test Constructor 4");
     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>();
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/EntrySchemaCheckingTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/EntrySchemaCheckingTestCase.java
index 6c8c044..d3425b1 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/EntrySchemaCheckingTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/EntrySchemaCheckingTestCase.java
@@ -31,7 +31,7 @@
 
 import java.util.LinkedList;
 
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.tools.LDAPModify;
@@ -57,7 +57,7 @@
   {
     try
     {
-      MessageBuilder invalidReason = new MessageBuilder();
+      LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
       DirectoryServer.setSingleStructuralObjectClassPolicy(REJECT);
       assertFalse(e.conformsToSchema(null, false, true, true, invalidReason),
                   "Entry validation succeeded with REJECT policy");
@@ -96,7 +96,7 @@
          "objectClass: domain",
          "dc: example");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, true, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -122,7 +122,7 @@
          "dc: example",
          "o: Example Org");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, true, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -198,7 +198,7 @@
          "cn: test");
 
     assertFalse(e.conformsToSchema(null, false, true, true,
-                                   new MessageBuilder()));
+                                   new LocalizableMessageBuilder()));
   }
 
 
@@ -223,7 +223,7 @@
          "cn: test");
 
     assertFalse(e.conformsToSchema(null, false, true, true,
-                                   new MessageBuilder()));
+                                   new LocalizableMessageBuilder()));
   }
 
 
@@ -267,7 +267,7 @@
          "cn: test");
 
     assertFalse(e.conformsToSchema(null, false, true, true,
-                                   new MessageBuilder()));
+                                   new LocalizableMessageBuilder()));
   }
 
 
@@ -312,7 +312,7 @@
          "cn: test");
 
     assertFalse(e.conformsToSchema(null, false, true, true,
-                                   new MessageBuilder()));
+                                   new LocalizableMessageBuilder()));
   }
 
 
@@ -356,7 +356,7 @@
          "description: foo");
 
     assertFalse(e.conformsToSchema(null, false, true, true,
-                                   new MessageBuilder()));
+                                   new LocalizableMessageBuilder()));
   }
 
 
@@ -378,7 +378,7 @@
          "o: test",
          "o: foo");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, true, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -406,7 +406,7 @@
     e.addAttribute(Attributes.create("dc", "foo"),
                    new LinkedList<AttributeValue>());
 
-    assertFalse(e.conformsToSchema(null, false, true, true, new MessageBuilder()));
+    assertFalse(e.conformsToSchema(null, false, true, true, new LocalizableMessageBuilder()));
   }
 
 
@@ -439,7 +439,7 @@
     builder.add("cn=Another User");
     e.addAttribute(builder.toAttribute(), new LinkedList<AttributeValue>());
 
-    assertFalse(e.conformsToSchema(null, false, true, true, new MessageBuilder()));
+    assertFalse(e.conformsToSchema(null, false, true, true, new LocalizableMessageBuilder()));
   }
 
 
@@ -491,7 +491,7 @@
          "objectClass: testAuxiliaryClassAllowedByDCROCAux",
          "cn: test");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -595,7 +595,7 @@
          "cn: test",
          "description: foo");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -694,7 +694,7 @@
          "objectClass: testDontRequireATRequiredByObsoleteDCROC",
          "cn: test");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -745,7 +745,7 @@
          "cn: test",
          "description: foo");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -796,7 +796,7 @@
          "objectClass: testDontRequireATAllowedByDCROC",
          "cn: test");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -896,7 +896,7 @@
          "objectClass: testSatisfiesSingleValuedNameFormOC",
          "cn: test");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -1048,7 +1048,7 @@
          "cn: test",
          "description: foo");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -1102,7 +1102,7 @@
          "cn: test",
          "description: foo");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -1207,7 +1207,7 @@
          "cn: test",
          "description: foo");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -1260,7 +1260,7 @@
          "cn: test",
          "description: foo");
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
   }
@@ -1400,7 +1400,7 @@
 
     assertEquals(LDAPModify.mainModify(args, false, null, System.err), 0);
 
-    MessageBuilder invalidReason = new MessageBuilder();
+    LocalizableMessageBuilder invalidReason = new LocalizableMessageBuilder();
     assertTrue(e.conformsToSchema(null, false, true, true, invalidReason),
                invalidReason.toString());
 
@@ -1418,7 +1418,7 @@
          "objectClass: top",
          "objectClass: device",
          "cn: invalid entry below parent covered by DSR");
-    invalidReason = new MessageBuilder();
+    invalidReason = new LocalizableMessageBuilder();
     failOnlyForStrictEvaluation(e);
   }
 
@@ -1449,7 +1449,7 @@
     e.addAttribute(Attributes.create("name", "foo"),
                    new LinkedList<AttributeValue>());
 
-    assertFalse(e.conformsToSchema(null, false, true, true, new MessageBuilder()));
+    assertFalse(e.conformsToSchema(null, false, true, true, new LocalizableMessageBuilder()));
   }
 }
 
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/InitializationExceptionTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/InitializationExceptionTestCase.java
index a7dffaa..033da40 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/InitializationExceptionTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/types/InitializationExceptionTestCase.java
@@ -28,7 +28,7 @@
 
 import org.testng.annotations.Test;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 import static org.testng.Assert.*;
 
@@ -46,7 +46,7 @@
   @Test()
   public void testConstructor1()
   {
-    Message message = Message.raw("Test Constructor 1");
+    LocalizableMessage message = LocalizableMessage.raw("Test Constructor 1");
 
     validateException(new InitializationException(message), message);
     validateException(new InitializationException(null), null);
@@ -61,7 +61,7 @@
   @Test()
   public void testConstructor2()
   {
-    Message   message = Message.raw("Test Constructor 2");
+    LocalizableMessage   message = LocalizableMessage.raw("Test Constructor 2");
     Exception e       = new Exception("Test Constructor 2 Exception");
 
     validateException(new InitializationException(message, e), message);
@@ -81,7 +81,7 @@
    * @param  message    The expected message for the exception.
    */
   private void validateException(InitializationException ie,
-                                 Message message)
+                                 LocalizableMessage message)
   {
     if (message == null)
     {
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 8062255..571032f 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
@@ -36,7 +36,7 @@
 import java.util.List;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.MessageBuilder;
+import org.forgerock.i18n.LocalizableMessageBuilder;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.schema.*;
 import org.testng.annotations.Test;
@@ -323,7 +323,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new MessageBuilder()));
+                                  new LocalizableMessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
@@ -411,7 +411,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new MessageBuilder()));
+                                  new LocalizableMessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
@@ -457,7 +457,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new MessageBuilder()));
+                                  new LocalizableMessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
@@ -503,7 +503,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new MessageBuilder()));
+                                  new LocalizableMessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
@@ -758,7 +758,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new MessageBuilder()));
+                                  new LocalizableMessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
@@ -907,7 +907,7 @@
          "modifyTimestamp: 20070101000001Z");
 
     assertTrue(e.conformsToSchema(null, false, false, false,
-                                  new MessageBuilder()));
+                                  new LocalizableMessageBuilder()));
 
     AttributeType ocType   = DirectoryServer.getAttributeType("objectclass");
     AttributeType cnType   = DirectoryServer.getAttributeType("cn");
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/EmbeddedUtilsTestCase.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/EmbeddedUtilsTestCase.java
index c3149e0..ab53bb0 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/EmbeddedUtilsTestCase.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/EmbeddedUtilsTestCase.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util;
 
@@ -31,7 +32,7 @@
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.DirectoryEnvironmentConfig;
@@ -93,7 +94,7 @@
     assertNotNull(environmentConfig);
 
     EmbeddedUtils.restartServer(getClass().getName(),
-                                Message.raw("testRestartServer"),
+                                LocalizableMessage.raw("testRestartServer"),
                                 environmentConfig);
 
     assertTrue(EmbeddedUtils.isRunning());
@@ -118,7 +119,7 @@
     assertNotNull(environmentConfig);
 
     EmbeddedUtils.stopServer(getClass().getName(),
-                             Message.raw("testStopAndStartServer"));
+                             LocalizableMessage.raw("testStopAndStartServer"));
     assertFalse(EmbeddedUtils.isRunning());
 
     EmbeddedUtils.startServer(environmentConfig);
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 66216a0..fa958aa 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
@@ -35,7 +35,7 @@
 import java.util.List;
 
 import org.opends.server.TestCaseUtils;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.*;
 import org.testng.Assert;
@@ -641,10 +641,10 @@
       reader.readChangeRecord(false);
 
       reader.readChangeRecord(false);
-      reader.rejectLastEntry(Message.raw("Rejected"));
+      reader.rejectLastEntry(LocalizableMessage.raw("Rejected"));
 
       reader.readChangeRecord(false);
-      reader.rejectLastEntry(Message.raw("Rejected"));
+      reader.rejectLastEntry(LocalizableMessage.raw("Rejected"));
 
       reader.readChangeRecord(false);
       reader.readChangeRecord(false);
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 14459bb..5b9ae3a 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
@@ -36,7 +36,7 @@
 import java.util.LinkedList;
 import java.util.List;
 
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 import org.opends.server.TestCaseUtils;
 import org.opends.server.core.DirectoryServer;
 import org.opends.server.types.Attribute;
@@ -258,7 +258,7 @@
   }
 
   /**
-   * Test the {@link LDIFWriter#writeComment(Message, int)} method.
+   * Test the {@link LDIFWriter#writeComment(LocalizableMessage, int)} method.
    *
    * @param comment
    *          The input comment string.
@@ -275,7 +275,7 @@
     Writer writer = new Writer();
 
     LDIFWriter ldifWriter = writer.getLDIFWriter();
-    ldifWriter.writeComment(Message.raw(comment), wrapColumn);
+    ldifWriter.writeComment(LocalizableMessage.raw(comment), wrapColumn);
 
     checkLDIFOutput(writer, expectedLDIF);
   }
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommand.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommand.java
index 92cfb5b..2efe651 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommand.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommand.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.args;
 
@@ -31,7 +32,7 @@
 
 import org.testng.Assert;
 import org.testng.annotations.Test;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -48,8 +49,8 @@
   @Test
   public void testAllowsTrailingArgumentsFalse1() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
-    SubCommand sc = new SubCommand(parser, "sub-command1", Message.raw("XXX"));
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
+    SubCommand sc = new SubCommand(parser, "sub-command1", LocalizableMessage.raw("XXX"));
     Assert.assertFalse(sc.allowsTrailingArguments());
   }
 
@@ -64,9 +65,9 @@
   @Test
   public void testAllowsTrailingArgumentsFalse2() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", false, 0, 0, null,
-        Message.raw("XXX"));
+        LocalizableMessage.raw("XXX"));
     Assert.assertFalse(sc.allowsTrailingArguments());
   }
 
@@ -81,9 +82,9 @@
   @Test
   public void testAllowsTrailingArgumentsTrue() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", Message.raw("XXX"));
+        "args1 arg2 [arg3 arg4]", LocalizableMessage.raw("XXX"));
     Assert.assertTrue(sc.allowsTrailingArguments());
   }
 
@@ -98,8 +99,8 @@
   @Test
   public void testGetMaxTrailingArguments1() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
-    SubCommand sc = new SubCommand(parser, "sub-command1", Message.raw("XXX"));
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
+    SubCommand sc = new SubCommand(parser, "sub-command1", LocalizableMessage.raw("XXX"));
     Assert.assertEquals(sc.getMaxTrailingArguments(), 0);
   }
 
@@ -114,9 +115,9 @@
   @Test
   public void testGetMaxTrailingArguments2() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", false, 0, 0, null,
-        Message.raw("XXX"));
+        LocalizableMessage.raw("XXX"));
     Assert.assertEquals(sc.getMaxTrailingArguments(), 0);
   }
 
@@ -131,9 +132,9 @@
   @Test
   public void testGetMaxTrailingArguments3() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", Message.raw("XXX"));
+        "args1 arg2 [arg3 arg4]", LocalizableMessage.raw("XXX"));
     Assert.assertEquals(sc.getMaxTrailingArguments(), 4);
   }
 
@@ -148,8 +149,8 @@
   @Test
   public void testGetMinTrailingArguments1() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
-    SubCommand sc = new SubCommand(parser, "sub-command1", Message.raw("XXX"));
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
+    SubCommand sc = new SubCommand(parser, "sub-command1", LocalizableMessage.raw("XXX"));
     Assert.assertEquals(sc.getMinTrailingArguments(), 0);
   }
 
@@ -164,9 +165,9 @@
   @Test
   public void testGetMinTrailingArguments2() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", false, 0, 0, null,
-        Message.raw("XXX"));
+        LocalizableMessage.raw("XXX"));
     Assert.assertEquals(sc.getMinTrailingArguments(), 0);
   }
 
@@ -181,9 +182,9 @@
   @Test
   public void testGetMinTrailingArguments3() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", Message.raw("XXX"));
+        "args1 arg2 [arg3 arg4]", LocalizableMessage.raw("XXX"));
     Assert.assertEquals(sc.getMinTrailingArguments(), 2);
   }
 
@@ -198,8 +199,8 @@
   @Test
   public void testGetTrailingArgumentsDisplayName1() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
-    SubCommand sc = new SubCommand(parser, "sub-command1", Message.raw("XXX"));
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
+    SubCommand sc = new SubCommand(parser, "sub-command1", LocalizableMessage.raw("XXX"));
     Assert.assertNull(sc.getTrailingArgumentsDisplayName());
   }
 
@@ -214,9 +215,9 @@
   @Test
   public void testGetTrailingArgumentsDisplayName2() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", false, 0, 0, null,
-        Message.raw("XXX"));
+        LocalizableMessage.raw("XXX"));
     Assert.assertNull(sc.getTrailingArgumentsDisplayName());
   }
 
@@ -231,9 +232,9 @@
   @Test
   public void testGetTrailingArgumentsDisplayName3() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", Message.raw("XXX"));
+        "args1 arg2 [arg3 arg4]", LocalizableMessage.raw("XXX"));
     Assert.assertEquals(sc.getTrailingArgumentsDisplayName(),
         "args1 arg2 [arg3 arg4]");
   }
@@ -249,8 +250,8 @@
   @Test
   public void testGetTrailingArguments1() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
-    SubCommand sc = new SubCommand(parser, "sub-command1", Message.raw("XXX"));
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
+    SubCommand sc = new SubCommand(parser, "sub-command1", LocalizableMessage.raw("XXX"));
     parser.parseArguments(new String[] { "sub-command1" });
     Assert.assertTrue(sc.getTrailingArguments().isEmpty());
   }
@@ -266,9 +267,9 @@
   @Test
   public void testGetTrailingArguments2() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", false, 0, 0, null,
-        Message.raw("XXX"));
+        LocalizableMessage.raw("XXX"));
     parser.parseArguments(new String[] { "sub-command2" });
     Assert.assertTrue(sc.getTrailingArguments().isEmpty());
   }
@@ -284,9 +285,9 @@
   @Test
   public void testGetTrailingArguments3() throws Exception {
     SubCommandArgumentParser parser = new SubCommandArgumentParser(this
-        .getClass().getName(), Message.raw("test description"), true);
+        .getClass().getName(), LocalizableMessage.raw("test description"), true);
     SubCommand sc = new SubCommand(parser, "sub-command2", true, 2, 4,
-        "args1 arg2 [arg3 arg4]", Message.raw("XXX"));
+        "args1 arg2 [arg3 arg4]", LocalizableMessage.raw("XXX"));
     parser
         .parseArguments(new String[] { "sub-command2", "arg1", "arg2", "arg3" });
     Assert.assertEquals(sc.getTrailingArguments(), Arrays.asList(new String[] {
diff --git a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommandArgumentParser.java b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommandArgumentParser.java
index 626014f..fb4a1cd 100644
--- a/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommandArgumentParser.java
+++ b/opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/util/args/TestSubCommandArgumentParser.java
@@ -22,6 +22,7 @@
  *
  *
  *      Copyright 2008 Sun Microsystems, Inc.
+ *      Portions Copyright 2014 ForgeRock AS
  */
 package org.opends.server.util.args;
 
@@ -35,7 +36,7 @@
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 import static org.opends.messages.ToolMessages.*;
-import org.opends.messages.Message;
+import org.forgerock.i18n.LocalizableMessage;
 
 
 /**
@@ -63,7 +64,7 @@
   @BeforeClass
   public void setup() throws Exception {
     parser = new SubCommandArgumentParser(this.getClass().getName(),
-        Message.raw("test description"), true);
+        LocalizableMessage.raw("test description"), true);
 
     sc1 = new SubCommand(parser, "sub-command1", INFO_BACKUPDB_DESCRIPTION_BACKEND_ID.get());
     sc2 = new SubCommand(parser, "sub-command2", true, 2, 4,

--
Gitblit v1.10.0